pkgsrc-Bugs archive

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

pkg/57888: pkg_create fails ungracefully if uid or gid on file doesn't have name



>Number:         57888
>Category:       pkg
>Synopsis:       pkg_create fails ungracefully if uid or gid on file doesn't have name
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 29 15:15:00 +0000 2024
>Originator:     Taylor R Campbell
>Release:        current
>Organization:
The NetBSD pkg_installation
>Environment:
>Description:
(gdb) run
Starting program: /usr/sbin/pkg_create -K /usr/pkg/pkgdb -l -U -B /usr/pkgsrc/mail/imp/work/.pkgdb/+BUILD_INFO -b /usr/pkgsrc/mail/imp/work/.pkgdb/+BUILD_VERSION -c /usr/pkgsrc/mail/imp/work/.pkgdb/+COMMENT -D /usr/pkgsrc/mail/imp/work/.pkgdb/+DISPLAY -d /usr/pkgsrc/mail/imp/work/.pkgdb/+DESC -f /usr/pkgsrc/mail/imp/work/.PLIST_deps -S /usr/pkgsrc/mail/imp/work/.pkgdb/+SIZE_ALL -s /usr/pkgsrc/mail/imp/work/.pkgdb/+SIZE_PKG -C imp-3.\* -i /usr/pkgsrc/mail/imp/work/.pkgdb/+INSTALL -k /usr/pkgsrc/mail/imp/work/.pkgdb/+DEINSTALL -F gzip -I /usr/pkg -p /usr/pkgsrc/mail/imp/work/.destdir/usr/pkg /usr/pkgsrc/mail/imp/work/.packages/imp-4.3.11nb2.tmp.tgz

Program received signal SIGSEGV, Segmentation fault.
0x000073151d783a10 in strlen () from /usr/lib/libc.so.12
(gdb) bt
#0  0x000073151d783a10 in strlen () from /usr/lib/libc.so.12
#1  0x000073151d6b0ba5 in _strdup (str=0x0)
    at /usr/src/lib/libc/string/strdup.c:60
#2  0x000000014cc09b70 in xstrdup (str=<optimized out>)
    at /usr/src/external/bsd/pkg_install/dist/lib/xwrapper.c:99
#3  0x000000014cc043af in update_ids (file=file@entry=0x73152076c1c0)
    at /usr/src/external/bsd/pkg_install/dist/create/util.c:78
#4  0x000000014cc045ac in load_memory_file (
    disk_name=0x7f7fffde7d97 "/usr/pkgsrc/mail/imp/work/.pkgdb/+INSTALL", 
    archive_name=archive_name@entry=0x14cc0a72d "+INSTALL", 
    owner=<optimized out>, group=<optimized out>, mode=mode@entry=365)
    at /usr/src/external/bsd/pkg_install/dist/create/util.c:128
#5  0x000000014cc04c54 in load_and_add (perm=365, 
    target_name=0x14cc0a72d "+INSTALL", input_name=<optimized out>, 
    plist=0x7f7fffde7480)
    at /usr/src/external/bsd/pkg_install/dist/create/build.c:338
#6  pkg_build (
    pkg=pkg@entry=0x731520796000 "/usr/pkgsrc/mail/imp/work/.packages/imp-4.3.11nb2.tmp", 
    full_pkg=full_pkg@entry=0x7f7fffde7e32 "/usr/pkgsrc/mail/imp/work/.packages/imp-4.3.11nb2.tmp.tgz", suffix=suffix@entry=0x7f7fffde7e68 "tgz", 
    plist=plist@entry=0x7f7fffde7480)
    at /usr/src/external/bsd/pkg_install/dist/create/build.c:373
#7  0x000000014cc03d5c in pkg_perform (
    pkg=0x731520796000 "/usr/pkgsrc/mail/imp/work/.packages/imp-4.3.11nb2.tmp")
    at /usr/src/external/bsd/pkg_install/dist/create/perform.c:228
#8  0x000000014cc09e0b in main (argc=1, argv=0x7f7fffde7640)
    at /usr/src/external/bsd/pkg_install/dist/create/main.c:202
(gdb) fr 3
#3  0x000000014cc043af in update_ids (file=file@entry=0x73152076c1c0)
    at /usr/src/external/bsd/pkg_install/dist/create/util.c:78
78			file->group = xstrdup(group_from_gid(file->st.st_gid, 1));
(gdb) info locals
No locals.
(gdb) print *file
$1 = {st = {st_dev = 43009, st_mode = 33261, st_ino = 55666008, st_nlink = 1, 
    st_uid = 0, st_gid = 125, st_rdev = 18446744073709551615, st_atim = {
      tv_sec = 1706487457, tv_nsec = 804541539}, st_mtim = {
      tv_sec = 1706487457, tv_nsec = 804745331}, st_ctim = {
      tv_sec = 1706487457, tv_nsec = 804745331}, st_birthtim = {
      tv_sec = 1706487457, tv_nsec = 804539974}, st_size = 24531, 
    st_blocks = 48, st_blksize = 32768, st_flags = 0, st_gen = 0, st_spare = {
      0, 0}}, name = 0x14cc0a72d "+INSTALL", owner = 0x7315207a60e8 "root", 
  group = 0x0, mode = 365, data = 0x0, len = 0}
>How-To-Repeat:
1. chown/chgrp pkgsrc files to a uid/gid without a name in /etc/passwd or /etc/group
2. try to build a package

(Realistically, what happened is that /etc/group got munged by etcupdate(8), causing the wsrc gid to change.)
>Fix:
Yes, please!

At the very least, pkg_create should fail with an obvious error message, not with a SIGSEGV and core dump.



Home | Main Index | Thread Index | Old Index