Ignore:
Timestamp:
Jul 26, 2011, 1:25:42 AM (8 years ago)
Author:
bruno
Message:
  • Update to upstream busybox 1.18.5
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mindi-busybox/sysklogd/klogd.c

    r2725 r2859  
    151151    klogd_open();
    152152    openlog("kernel", 0, LOG_KERN);
     153    /*
     154     * glibc problem: for some reason, glibc changes LOG_KERN to LOG_USER
     155     * above. The logic behind this is that standard
     156     * http://pubs.opengroup.org/onlinepubs/9699919799/functions/syslog.html
     157     * says the following about openlog and syslog:
     158     * "LOG_USER
     159     *  Messages generated by arbitrary processes.
     160     *  This is the default facility identifier if none is specified."
     161     *
     162     * I believe glibc misinterpreted this text as "if openlog's
     163     * third parameter is 0 (=LOG_KERN), treat it as LOG_USER".
     164     * Whereas it was meant to say "if *syslog* is called with facility
     165     * 0 in its 1st parameter without prior call to openlog, then perform
     166     * implicit openlog(LOG_USER)".
     167     *
     168     * As a result of this, eh, feature, standard klogd was forced
     169     * to open-code its own openlog and syslog implementation (!).
     170     *
     171     * Note that prohibiting openlog(LOG_KERN) on libc level does not
     172     * add any security: any process can open a socket to "/dev/log"
     173     * and write a string "<0>Voila, a LOG_KERN + LOG_EMERG message"
     174     *
     175     * Google code search tells me there is no widespread use of
     176     * openlog("foo", 0, 0), thus fixing glibc won't break userspace.
     177     *
     178     * The bug against glibc was filed:
     179     * bugzilla.redhat.com/show_bug.cgi?id=547000
     180     */
    153181
    154182    if (i)
    155183        klogd_setloglevel(i);
    156184
    157     bb_signals(BB_FATAL_SIGS, record_signo);
    158185    signal(SIGHUP, SIG_IGN);
     186    /* We want klogd_read to not be restarted, thus _norestart: */
     187    bb_signals_recursive_norestart(BB_FATAL_SIGS, record_signo);
    159188
    160189    syslog(LOG_NOTICE, "klogd started: %s", bb_banner);
Note: See TracChangeset for help on using the changeset viewer.