Comment 3 for bug 1532722

Revision history for this message
Martin Pitt (pitti) wrote :

Thanks Brian, this was really helpful!

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.