This stack trace pinpoints the particular strncpy() call in do_interface:
if (current_state != NULL) { strncpy(liface, current_state, 80);
liface is correct ("lo"), but current_state is bogus (0x1). We see that lock_interface() failed as lock == NULL, but lock isn't being tested after calling lock_interface(). Hence "current_state" never actually gets initialized. The obvious exit path in lock_interface() is
if (lock_fp == NULL) {
if (!no_act) { fprintf(stderr, "%s: failed to open lockfile %s: %s\n", argv0, filename, strerror(errno)); exit(1);
} else { return NULL;
}
}
i. e. this happens if the interface is locked.
For the record, I set bug 1337873 to failed, which is the SRU tracking bug for landing the per-interface locking into stables.
Thanks Brian, this was really helpful!
This stack trace pinpoints the particular strncpy() call in do_interface:
liface is correct ("lo"), but current_state is bogus (0x1). We see that lock_interface() failed as lock == NULL, but lock isn't being tested after calling lock_interface(). Hence "current_state" never actually gets initialized. The obvious exit path in lock_interface() is
if (lock_fp == NULL) {
fprintf( stderr, "%s: failed to open lockfile %s: %s\n", argv0, filename, strerror(errno));
exit( 1);
return NULL;
if (!no_act) {
} else {
}
}
i. e. this happens if the interface is locked.
For the record, I set bug 1337873 to failed, which is the SRU tracking bug for landing the per-interface locking into stables.