Hi tech, In case send or recv fail in send_command, reply.error is stack garbage. This wouldn't be possible if reply was zeroed. But checking for ret == 0 ensures that reply was fully written.
OK? mbuhl Index: usr.sbin/apm/apm.c =================================================================== RCS file: /cvs/src/usr.sbin/apm/apm.c,v retrieving revision 1.42 diff -u -p -r1.42 apm.c --- usr.sbin/apm/apm.c 10 Sep 2022 10:10:09 -0000 1.42 +++ usr.sbin/apm/apm.c 9 Nov 2022 17:29:03 -0000 @@ -99,6 +99,8 @@ do_zzz(int fd, enum apm_action action) char *msg; int ret; + bzero(&reply, sizeof reply); + switch (action) { case NONE: case SUSPEND: @@ -119,7 +121,7 @@ do_zzz(int fd, enum apm_action action) printf("%s...\n", msg); ret = send_command(fd, &command, &reply); - if (reply.error) + if (ret == 0 && reply.error) errx(1, "%s: %s", apm_state(reply.newstate), strerror(reply.error)); exit(ret); }