[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#907399: Logs with systemd-coredump



Hello,
I had a closer look to the core dump.
The backtrace shows as follows:

    (gdb) bt
    #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
    #1  0x00007fd5463d62f1 in __GI_abort () at abort.c:79
    #2  0x00007fd546417867 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7fd546521273 "%s\n") at ../sysdeps/posix/libc_fatal.c:181
    #3  0x00007fd54641de0a in malloc_printerr (str=str@entry=0x7fd546522b90 "munmap_chunk(): invalid pointer") at malloc.c:5350
    #4  0x00007fd54641e36c in munmap_chunk (p=<optimized out>) at malloc.c:2846
    #5  0x0000564d381c7c86 in main (argc=1, argv=0x7ffd86f7cd88) at utils/cups-browsed.c:8814

    (gdb) print DomainSocket
    $1 = 0x564d381dd409 "/var/run/cups/cups.sock"


The lines in main function:

    utils/cups-browsed.c

    8467    #ifdef CUPS_DEFAULT_DOMAINSOCKET
    8468        if (DomainSocket == NULL)
    8469          DomainSocket = CUPS_DEFAULT_DOMAINSOCKET;
    ...
    8813      if (DomainSocket != NULL)
    8814        free(DomainSocket);
    8815
    8816      return ret;


Looks like CUPS_DEFAULT_DOMAINSOCKET is defined in ./config.h:
    #define CUPS_DEFAULT_DOMAINSOCKET "/var/run/cups/cups.sock"


Therefore I assume we try to free the memory of a string literal,
that has to fail.

This looks like introduced in commit "Fixing covscan issues" [1].

Could not yet find an upstream bug report for this issue in [2].

A workaround could be to explicitly
configure DomainSocket in /etc/cups/cups-browsed.conf.

Kind regards,
Bernhard


[1] https://github.com/OpenPrinting/cups-filters/commit/fc6a67dfbfc7346e80bd48a0d6ddc858afcabcdf
    https://github.com/OpenPrinting/cups-filters/pull/53

[2] https://github.com/OpenPrinting/cups-filters/issues

apt install devscripts dpkg-dev gdb lz4 cups-browsed-dbgsym mc

mkdir cups-browsed/orig -p
cd    cups-browsed/orig
apt source cups-browsed
cd ../..


mkdir cups
cd    cups
wget "https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=907399;filename=core.cups-browsed.0.92be2c80dd62445a8f63c2f29311ef3d.10180.1535612401000000.lz4;msg=38"; -O core.cups-browsed.0.92be2c80dd62445a8f63c2f29311ef3d.10180.1535612401000000.lz4
unlz4 -k core.cups-browsed.0.92be2c80dd62445a8f63c2f29311ef3d.10180.1535612401000000.lz4


gdb -q /usr/sbin/cups-browsed --core core.cups-browsed.0.92be2c80dd62445a8f63c2f29311ef3d.10180.1535612401000000

set height 0
set width 0
set pagination off
directory /home/benutzer/cups-browsed/orig/cups-filters-1.21.1



benutzer@debian:~/cups$ gdb -q /usr/sbin/cups-browsed --core core.cups-browsed.0.92be2c80dd62445a8f63c2f29311ef3d.10180.1535612401000000
Reading symbols from /usr/sbin/cups-browsed...Reading symbols from /usr/lib/debug/.build-id/92/11537d40281e41394b4b4fc46a118c5997dfaa.debug...done.
done.
[New LWP 10180]
[New LWP 10181]
[New LWP 10182]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/sbin/cups-browsed'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51      ../sysdeps/unix/sysv/linux/raise.c: Datei oder Verzeichnis nicht gefunden.
[Current thread is 1 (Thread 0x7fd542fdeb00 (LWP 10180))]
(gdb) set height 0
(gdb) set width 0
(gdb) set pagination off
(gdb) directory /home/benutzer/cups-browsed/orig/cups-filters-1.21.1
Source directories searched: /home/benutzer/cups-browsed/orig/cups-filters-1.21.1:$cdir:$cwd
(gdb) bt full
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
        set = {__val = {0, 11966690534043898880, 4, 281470681751424, 206158430232, 140726867839760, 30072307974, 14973365004415290, 21482373383, 206983541050, 14973365004415290, 47252308229, 124570895468, 588410521149, 90201587969, 7310017498960785199}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#1  0x00007fd5463d62f1 in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0, 0, 0, 0, 64, 38654705664, 7, 144, 94889677680712, 176, 2065, 18446744073709551536, 2, 214748364809, 140726867839568, 140726867839856}}, sa_flags = -2030581168, sa_restorer = 0x1000}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007fd546417867 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7fd546521273 "%s\n") at ../sysdeps/posix/libc_fatal.c:181
        ap = {{gp_offset = 24, fp_offset = 0, overflow_arg_area = 0x7ffd86f7cb80, reg_save_area = 0x7ffd86f7cb10}}
        fd = <optimized out>
        list = <optimized out>
        nlist = <optimized out>
        cp = <optimized out>
        written = <optimized out>
#3  0x00007fd54641de0a in malloc_printerr (str=str@entry=0x7fd546522b90 "munmap_chunk(): invalid pointer") at malloc.c:5350
No locals.
#4  0x00007fd54641e36c in munmap_chunk (p=<optimized out>) at malloc.c:2846
        size = <optimized out>
        __PRETTY_FUNCTION__ = "munmap_chunk"
        block = <optimized out>
        total_size = <optimized out>
#5  0x0000564d381c7c86 in main (argc=1, argv=0x7ffd86f7cd88) at utils/cups-browsed.c:8814
        ret = 0
        http = <optimized out>
        i = <optimized out>
        val = <optimized out>
        p = <optimized out>
        proxy = <optimized out>
        error = 0x0
        subscription_id = 2365
        action = {__sigaction_handler = {sa_handler = 0x564d381cc360 <sigusr2_handler>, sa_sigaction = 0x564d381cc360 <sigusr2_handler>}, sa_mask = {__val = {2048, 0 <repeats 15 times>}}, sa_flags = 0, sa_restorer = 0x0}

(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007fd5463d62f1 in __GI_abort () at abort.c:79
#2  0x00007fd546417867 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7fd546521273 "%s\n") at ../sysdeps/posix/libc_fatal.c:181
#3  0x00007fd54641de0a in malloc_printerr (str=str@entry=0x7fd546522b90 "munmap_chunk(): invalid pointer") at malloc.c:5350
#4  0x00007fd54641e36c in munmap_chunk (p=<optimized out>) at malloc.c:2846
#5  0x0000564d381c7c86 in main (argc=1, argv=0x7ffd86f7cd88) at utils/cups-browsed.c:8814



(gdb) up
#5  0x0000564d381c7c86 in main (argc=1, argv=0x7ffd86f7cd88) at utils/cups-browsed.c:8814
8814        free(DomainSocket);
(gdb) print DomainSocket
$1 = 0x564d381dd409 "/var/run/cups/cups.sock"



384     static char *DomainSocket = NULL;

8457      /* Point to selected CUPS server or domain socket via the CUPS_SERVER
8458         environment variable or DomainSocket configuration file option.
8459         Default to localhost:631 (and not to CUPS default to override
8460         client.conf files as cups-browsed works only with a local CUPS
8461         daemon, not with remote ones. */
8462      if (getenv("CUPS_SERVER") != NULL) {
8463        strncpy(local_server_str, getenv("CUPS_SERVER"), sizeof(local_server_str));
8464        if (strlen(getenv("CUPS_SERVER")) > 1023)
8465          local_server_str[1023] = '\0';
8466      } else {
8467    #ifdef CUPS_DEFAULT_DOMAINSOCKET
8468        if (DomainSocket == NULL)
8469          DomainSocket = CUPS_DEFAULT_DOMAINSOCKET;
8470    #endif
8471        if (DomainSocket != NULL) {
8472          struct stat sockinfo;               /* Domain socket information */
8473          if (strcasecmp(DomainSocket, "None") != 0 &&
8474              strcasecmp(DomainSocket, "Off") != 0 &&
8475              !stat(DomainSocket, &sockinfo) &&
8476              (sockinfo.st_mode & S_IROTH) != 0 &&
8477              (sockinfo.st_mode & S_IWOTH) != 0)
8478            strncpy(local_server_str, DomainSocket, sizeof(local_server_str));
8479          else
8480            strncpy(local_server_str, "localhost:631", sizeof(local_server_str));
8481        } else
8482          strncpy(local_server_str, "localhost:631", sizeof(local_server_str));
8483        setenv("CUPS_SERVER", local_server_str, 1);
8484      }

8736    fail:

8813      if (DomainSocket != NULL)
8814        free(DomainSocket);
8815
8816      return ret;



./config.h:#define CUPS_DEFAULT_DOMAINSOCKET "/var/run/cups/cups.sock"


Looks like introduced here: Fixing covscan issues
https://github.com/OpenPrinting/cups-filters/commit/fc6a67dfbfc7346e80bd48a0d6ddc858afcabcdf

Reply to: