NetBSD Problem Report #58809
From martin@aprisoft.de Sun Nov 3 17:48:32 2024
Return-Path: <martin@aprisoft.de>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
client-signature RSA-PSS (2048 bits) client-digest SHA256)
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id F19D51A9238
for <gnats-bugs@gnats.NetBSD.org>; Sun, 3 Nov 2024 17:48:31 +0000 (UTC)
Message-Id: <20241103174818.1D1E55CC7B9@emmas.aprisoft.de>
Date: Sun, 3 Nov 2024 18:48:18 +0100 (CET)
From: martin@aprisoft.de
Reply-To: martin@aprisoft.de
To: gnats-bugs@NetBSD.org
Subject: stat(2) fails for freshly created directory
X-Send-Pr-Version: 3.95
>Number: 58809
>Category: bin
>Synopsis: pkg_add -P gets confused
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: bin-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Nov 03 17:50:01 +0000 2024
>Last-Modified: Mon Jan 13 11:20:01 +0000 2025
>Originator: Martin Husemann
>Release: NetBSD 10.99.12
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD martins.aprisoft.de 10.99.12 NetBSD 10.99.12 (GENERIC) #250: Sat Nov 2 11:23:49 CET 2024 martin@martins.aprisoft.de:/home/martin/current/src/sys/arch/amd64/compile/GENERIC amd64
Architecture: x86_64
Machine: amd64
>Description:
I am trying to run a script that populates a directory with pkg stuff.
I get strange failures from pkg-add -P ...
pkg_add: var_set: can't open temp file for 'root//usr/pkg/pkgdb/libcbor-0.11.0/+INSTALLED_INFO' for writing: No such file or directory
This fails in lib/var.c::var_set in mkstemp() because the stat testing
for the existance of the target directory fails. This is strange, because
pkg_add created it a few seconds before and it is still there after
the failure (and no unlink calls for it in ktrace output).
8742 8742 pkg_add CALL mkdir(0x782bc5837f80,0x1ff)
8742 8742 pkg_add NAMI "root//usr/pkg/pkgdb/libcbor-0.11.0"
8742 8742 pkg_add RET mkdir 0
[..]
8742 8742 pkg_add CALL __stat50(0x782bc5834500,0x7f7fff7510f0)
8742 8742 pkg_add NAMI "root//usr/pkg/pkgdb/libcbor-0.11.0"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
> ls -l root//usr/pkg/pkgdb/libcbor-0.11.0
total 28
-r--r--r-- 1 root users 2732 Nov 3 18:29 +BUILD_INFO
-r--r--r-- 1 root users 444 Nov 3 18:29 +BUILD_VERSION
-r--r--r-- 1 root users 52 Nov 3 18:29 +COMMENT
-rw-r--r-- 1 root users 2355 Nov 3 18:29 +CONTENTS
-r--r--r-- 1 root users 440 Nov 3 18:29 +DESC
-r--r--r-- 1 root users 7 Nov 3 18:29 +SIZE_ALL
-r--r--r-- 1 root users 7 Nov 3 18:29 +SIZE_PKG
This is on ffs (FFSv2):
/dev/dk6 on / type ffs (local)
I am pretty sure I used a very simmilar invocation of pkg_add -P a few
days ago against an empty pkgdb and it worked. Only thing (AFAICT) I changed
is updated kernel + userland today.
>How-To-Repeat:
cd /tmp && mkdir root && pkg_add -P root ${pkgs}/fidocrypt-0.0nb20241023.tgz
(not sure what exactly are the relevant things to reproduce)
>Fix:
n/a
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: kern-bug-people->bin-bug-people
Responsible-Changed-By: martin@NetBSD.org
Responsible-Changed-When: Sun, 03 Nov 2024 18:02:38 +0000
Responsible-Changed-Why:
not a kernel issue
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Sun, 3 Nov 2024 19:02:46 +0100
Looking closer and grepping the right patterns in the ktrace output
shows this is a plain pkg_add bug (thanks bad@ !).
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x9000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff7513e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff751980)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x9000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __stat50(0x782bc59bb060,0x7f7fff751b00)
8742 8742 pkg_add NAMI "/usr/pkg/pkgdb"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL __stat50(0x782bc59bb060,0x7f7fff751b00)
8742 8742 pkg_add NAMI "/usr/pkg/pkgdb"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL __stat50(0x782bc59bb060,0x7f7fff751b00)
8742 8742 pkg_add NAMI "/usr/pkg/pkgdb"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL mmap(0,0x3000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff74f260)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff74f260)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(3,0x7f7fff74e1b0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff74eb98)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff74dff0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff74dff0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,3,0,0)
--
8742 8742 pkg_add CALL __fstat50(3,0x7f7fff751720)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x11000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff7514e0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(4,0x782bc59ae340,0x8000)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff7514d0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(4,0x782bc59ae340,0x8000)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f250)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f250)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff74e1a0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74eb88)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74dfe0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74dfe0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff750d00,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff750ce0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff750cb0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f0b0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f0b0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff74e000,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74e9e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74de40)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74de40)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff750a90,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f0b0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74f0b0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(4,0x7f7fff74e000,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(4,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74e9e8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74de40)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff74de40)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,4,0,0)
--
8742 8742 pkg_add CALL __fstat50(4,0x7f7fff7516f0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(4,0x782bc5892a10,0x8000)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff751330)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x9000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff751320)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(5,0x782bc5878f00,0x8000)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74f0a0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74f0a0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff74dff0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74e9d8)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74de30)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74de30)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff750b50,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff750b30,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff750b00,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74ef00)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74ef00)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff74de50,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74e838)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74dc90)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74dc90)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff7508e0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74ef00)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74ef00)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(5,0x7f7fff74de50,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(5,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74e838)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74dc90)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff74dc90)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,5,0,0)
--
8742 8742 pkg_add CALL __fstat50(5,0x7f7fff751540)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(5,0x782bc5828d10,0x8000)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff751180)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x9000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff751170)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(6,0x782bc580ea00,0x8000)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff74eef0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,6,0,0)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff74eef0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x4b,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,6,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(6,0x7f7fff74de40,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(6,0,0,1)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff74e828)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x1000,PROT_READ,0x1<SHARED,FILE,ALIGN=NONE>,6,0,0)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff74dc80)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x7300,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,6,0,0)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff74dc80)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x32c0,PROT_READ,0x2<PRIVATE,FILE,ALIGN=NONE>,6,0,0)
--
8742 8742 pkg_add CALL __fstatvfs190(6,0x7f7fff7509a0,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(6,0,0,1)
--
8742 8742 pkg_add CALL __fstatvfs190(6,0x7f7fff750980,2)
8742 8742 pkg_add RET __fstatvfs190 0
8742 8742 pkg_add CALL lseek(6,0,0,1)
--
8742 8742 pkg_add CALL __stat50(0x782bc580d5a0,0x7f7fff751670)
8742 8742 pkg_add NAMI "/usr/lib/libc.so.12"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL mkdir(0x782bc5837f80,0x1ff)
8742 8742 pkg_add NAMI "root//usr/pkg/pkgdb/libcbor-0.11.0"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL unlink(0x782bc5837fe0)
--
8742 8742 pkg_add CALL mkdir(0x782bc58c32d0,0x1ff)
8742 8742 pkg_add NAMI "root//usr/pkg"
8742 8742 pkg_add RET mkdir -1 errno 17 File exists
8742 8742 pkg_add CALL __stat50(0x782bc58c32d0,0x7f7fff7511c0)
8742 8742 pkg_add NAMI "root//usr/pkg"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL open(0x782bc5837fe0,0x400202,0x1a4)
--
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff751170)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL __fstat50(6,0x7f7fff751040)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x5000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL chdir(0x782bc58c32d0)
8742 8742 pkg_add NAMI "root//usr/pkg"
8742 8742 pkg_add RET chdir 0
8742 8742 pkg_add CALL __gettimeofday50(0x7f7fff751250,0)
--
8742 8742 pkg_add CALL __fstat50(1,0x7f7fff750740)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL ioctl(1,TIOCGETA,0x7f7fff7507b0)
--
8742 8742 pkg_add CALL __stat50(0x782bc5835ea0,0x7f7fff751140)
8742 8742 pkg_add NAMI "include"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL mkdir(0x782bc5835ea0,0x1ed)
8742 8742 pkg_add NAMI "include"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL open(0x782bc5835ea0,0x400a01,0x1a4)
--
8742 8742 pkg_add CALL __stat50(0x782bc5c78c9a,0x7f7fff750d50)
8742 8742 pkg_add NAMI "/etc/nsswitch.conf"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL open(0x782bc5c78c9a,0x400000,0x1b6)
--
8742 8742 pkg_add CALL __fstat50(8,0x7f7fff750a80)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL mmap(0,0x9000,PROT_READ|PROT_WRITE,0x1002<PRIVATE,ANONYMOUS,ALIGN=NONE>,0xffffffff,0,0)
--
8742 8742 pkg_add CALL __stat50(0x782bc5c783eb,0x7f7fff7501a0)
8742 8742 pkg_add NAMI "/etc/spwd.db"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL open(0x782bc5c783eb,0x400000,0)
--
8742 8742 pkg_add CALL __fstat50(8,0x7f7fff7501a0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(8,0x782bc58dd300,0x104)
--
8742 8742 pkg_add CALL __stat50(0x782bc5c78c9a,0x7f7fff750d80)
8742 8742 pkg_add NAMI "/etc/nsswitch.conf"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL open(0x782bc5c785d0,0x400000,0x1b6)
--
8742 8742 pkg_add CALL __fstat50(8,0x7f7fff7506f0)
8742 8742 pkg_add RET __fstat50 0
8742 8742 pkg_add CALL read(8,0x782bc57e3780,0x8000)
--
8742 8742 pkg_add CALL __stat50(0x782bc5835ea0,0x7f7fff751140)
8742 8742 pkg_add NAMI "include/cbor"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL __stat50(0x782bc5835ea0,0x7f7fff751060)
8742 8742 pkg_add NAMI "include"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL mkdir(0x782bc5835ea0,0x1ed)
8742 8742 pkg_add NAMI "include/cbor"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL open(0x782bc5835ea0,0x400a01,0x1a4)
--
IFIER\n\n#endif\n\nstatic const uint8_t cbor_major_version = CBOR_MAJO\
R_VERSION;\nstatic const uint8_t cbor_minor_version = CBOR_MINOR_VERSI\
ON;\nstatic const uint8_t cbor_patch_version = CBOR_PATCH_VERSION;\n\n\
#define CBOR_VERSION \\\n _CBOR_TO_STR(CBOR_MAJOR_VERSI\
--
"is function modifies the global state and should therefore be\n * use\
d accordingly. Changing the memory handlers while allocated items exis\
--
ming decoder result - status */\nenum cbor_decoder_status {\n /** Dec\
oding finished successfully (a callback has been invoked)\n *\n * \
--
ad`).\n *\n * Set to 0 if the #status is not #CBOR_DECODER_FINISHE\
D.\n */\n size_t read;\n\n /** The decoding status */\n enum cbor\
_decoder_status status;\n\n /** Number of bytes in the input buffer n\
eeded to resume parsing\n *\n * Set to 0 unless the result status \
is #CBOR_DECODER_NEDATA. If it is, then:\n * - If at least one byte\
--
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751140)
8742 8742 pkg_add NAMI "include/cbor/internal"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751060)
8742 8742 pkg_add NAMI "include/cbor"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL mkdir(0x782bc58347c0,0x1ed)
8742 8742 pkg_add NAMI "include/cbor/internal"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL open(0x782bc58347c0,0x400a01,0x1a4)
--
m _cbor_unicode_status_error { _CBOR_UNICODE_OK, _CBOR_UNICODE_BADCP }\
;\n\n/** Signals unicode validation error and possibly its location */\
\nstruct _cbor_unicode_status {\n enum _cbor_unicode_status_error sta\
tus;\n size_t location;\n};\n\n_CBOR_NODISCARD\nsize_t _cbor_unicode_\
--
struct _cbor_unicode_status* status);\n\n#ifde\
f __cplusplus\n}\n#endif\n\n#endif // LIBCBOR_UNICODE_H\n"
--
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751140)
8742 8742 pkg_add NAMI "lib/cmake/libcbor"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751060)
8742 8742 pkg_add NAMI "lib/cmake"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff750f80)
8742 8742 pkg_add NAMI "lib"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL mkdir(0x782bc58347c0,0x1ed)
8742 8742 pkg_add NAMI "lib"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL mkdir(0x782bc58347c0,0x1ed)
8742 8742 pkg_add NAMI "lib/cmake"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL mkdir(0x782bc58347c0,0x1ed)
8742 8742 pkg_add NAMI "lib/cmake/libcbor"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL open(0x782bc58347c0,0x400a01,0x1a4)
--
8742 8742 pkg_add CALL __lstat50(0x782bc58347c0,0x7f7fff751140)
8742 8742 pkg_add NAMI "lib/libcbor.so"
8742 8742 pkg_add RET __lstat50 0
8742 8742 pkg_add CALL write(1,0x782bc5982000,0xf)
--
8742 8742 pkg_add CALL __lstat50(0x782bc58347c0,0x7f7fff751140)
8742 8742 pkg_add NAMI "lib/libcbor.so.0.11"
8742 8742 pkg_add RET __lstat50 0
8742 8742 pkg_add CALL write(1,0x782bc5982000,0x14)
--
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751140)
8742 8742 pkg_add NAMI "lib/pkgconfig"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL __stat50(0x782bc58347c0,0x7f7fff751060)
8742 8742 pkg_add NAMI "lib"
8742 8742 pkg_add RET __stat50 0
8742 8742 pkg_add CALL mkdir(0x782bc58347c0,0x1ed)
8742 8742 pkg_add NAMI "lib/pkgconfig"
8742 8742 pkg_add RET mkdir 0
8742 8742 pkg_add CALL open(0x782bc58347c0,0x400a01,0x1a4)
--
8742 8742 pkg_add CALL __stat50(0x782bc5834500,0x7f7fff7510f0)
8742 8742 pkg_add NAMI "root//usr/pkg/pkgdb/libcbor-0.11.0"
8742 8742 pkg_add RET __stat50 -1 errno 2 No such file or directory
8742 8742 pkg_add CALL write(2,0x7f7fff750f90,9)
So it chdirs to root/usr/pkg to extract the libcbor stuff, never chdirs
back and then fails to access pkgdb files.
Jörg mentioned this could have been fixed upstream recently.
Martin
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Mon, 4 Nov 2024 19:36:48 +0100
On Sun, Nov 03, 2024 at 07:02:46PM +0100, Martin Husemann wrote:
> Jörg mentioned this could have been fixed upstream recently.
I checked with latest tools from pkgsrc and the failure is the same.
Martin
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Tue, 5 Nov 2024 09:39:47 +0100
Applying the patch below to pkgsrc and copying over the pkgsrc version
to external/bsd/pkg_install/dist fixes this for me.
Martin
Save and restore current working directory around chdir() and
pkg extraction.
Index: perform.c
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/perform.c,v
retrieving revision 1.126
diff -u -r1.126 perform.c
--- perform.c 1 Nov 2024 11:26:46 -0000 1.126
+++ perform.c 5 Nov 2024 06:24:22 -0000
@@ -692,7 +692,7 @@
int r;
plist_t *p;
const char *last_file;
- char *fullpath;
+ char *fullpath, orig_cwd[PATH_MAX];
if (Fake)
return 0;
@@ -707,6 +707,11 @@
return -1;
}
+ if (getcwd(orig_cwd, sizeof(orig_cwd)) == NULL) {
+ warn("Can't get current working directory");
+ return -1;
+ }
+
if (chdir(pkg->install_prefix) == -1) {
warn("Can't change into prefix: %s", pkg->install_prefix);
return -1;
@@ -833,6 +838,8 @@
pkgdb_close();
archive_write_free(writer);
+ chdir(orig_cwd);
+
return r;
}
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Tue, 5 Nov 2024 20:32:15 +0000 (UTC)
> + if (getcwd(orig_cwd, sizeof(orig_cwd)) == NULL) {
> + warn("Can't get current working directory");
> + return -1;
> + }
> +
> [...]
> + chdir(orig_cwd);
> +
>
Save a buffer by doing:
```
fd = open(".", O_RDONLY|O_CLOEXEC|O_DIRECTORY);
...
fchdir(fd);
```
?
(precedent in pfcexec():pkg_install/dist/lib/fexec.c)
-RVP
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Thu, 28 Nov 2024 18:22:38 +0100
This patch also works for me. While checking for other getcwd() calls
I found one where the result was unused and eliminate that.
After this patch there is only a single getcwd() call left (in lib/pkg_io.c::
process_pkg_path) and that plays with the path results instead of a simple
push/pop of the current working dir, so I left it alone.
I plan to commit this soonish unless there are objections.
Martin
--8<--
extract_files(): save and restore current directory.
make_dist(): remove an unused getcwd().
Fixes PR bin/58809.
Index: files/add/perform.c
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/perform.c,v
retrieving revision 1.126
diff -u -p -r1.126 perform.c
--- files/add/perform.c 1 Nov 2024 11:26:46 -0000 1.126
+++ files/add/perform.c 28 Nov 2024 17:17:03 -0000
@@ -693,6 +693,7 @@ extract_files(struct pkg_task *pkg)
plist_t *p;
const char *last_file;
char *fullpath;
+ int workdir;
if (Fake)
return 0;
@@ -707,6 +708,12 @@ extract_files(struct pkg_task *pkg)
return -1;
}
+ workdir = open(".", O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+ if (workdir == -1) {
+ warn("Can't open current working directory");
+ return -1;
+ }
+
if (chdir(pkg->install_prefix) == -1) {
warn("Can't change into prefix: %s", pkg->install_prefix);
return -1;
@@ -833,6 +840,8 @@ out:
pkgdb_close();
archive_write_free(writer);
+ fchdir(workdir);
+
return r;
}
Index: files/create/build.c
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/create/build.c,v
retrieving revision 1.17
diff -u -p -r1.17 build.c
--- files/create/build.c 19 Apr 2017 21:42:50 -0000 1.17
+++ files/create/build.c 28 Nov 2024 17:17:03 -0000
@@ -229,7 +229,6 @@ make_dist(const char *pkg, const char *s
struct archive *archive;
struct archive_entry *entry, *sparse_entry;
struct archive_entry_linkresolver *resolver;
- char *initial_cwd;
archive = archive_write_new();
archive_write_set_format_pax_restricted(archive);
@@ -291,8 +290,6 @@ make_dist(const char *pkg, const char *s
if (Preserve)
write_meta_file(preserve_file, archive);
- initial_cwd = getcwd(NULL, 0);
-
for (p = plist->head; p; p = p->next) {
if (p->type == PLIST_FILE) {
write_normal_file(p->name, archive, resolver, owner, group);
@@ -325,8 +322,6 @@ make_dist(const char *pkg, const char *s
if (archive_write_free(archive))
errx(2, "cannot finish archive: %s", archive_error_string(archive));
-
- free(initial_cwd);
}
static struct memory_file *
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/58809 CVS commit: pkgsrc/pkgtools/pkg_install/files/add
Date: Sat, 7 Dec 2024 13:20:14 +0000
Module Name: pkgsrc
Committed By: martin
Date: Sat Dec 7 13:20:14 UTC 2024
Modified Files:
pkgsrc/pkgtools/pkg_install/files/add: perform.c
Log Message:
PR 58809: save and restore current working directory when installing
libraries.
To generate a diff of this commit:
cvs rdiff -u -r1.126 -r1.127 pkgsrc/pkgtools/pkg_install/files/add/perform.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Responsible-Changed-From-To: bin-bug-people->pkg-manager
Responsible-Changed-By: martin@NetBSD.org
Responsible-Changed-When: Sat, 07 Dec 2024 18:52:33 +0000
Responsible-Changed-Why:
This requires a fix in pkgsrc first and then an import of the fixed
version into base.
Fix is known (but details controversial).
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Fri, 27 Dec 2024 18:25:26 +0100
Here is a better patch.
Martin
Index: perform.c
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/perform.c,v
retrieving revision 1.128
diff -u -p -r1.128 perform.c
--- perform.c 7 Dec 2024 13:56:46 -0000 1.128
+++ perform.c 27 Dec 2024 17:22:29 -0000
@@ -693,6 +693,13 @@ extract_files(struct pkg_task *pkg)
plist_t *p;
const char *last_file;
char *fullpath;
+#ifdef O_DIRECTORY
+ int workdir;
+#define NO_WORK_DIR -1
+#else
+ char *workdir;
+#define NO_WORK_DIR NULL
+#endif
if (Fake)
return 0;
@@ -707,6 +714,16 @@ extract_files(struct pkg_task *pkg)
return -1;
}
+#ifdef O_DIRECTORY
+ workdir = open(".", O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+#else
+ workdir = getcwd(NULL, 0);
+#endif
+ if (workdir == NO_WORK_DIR) {
+ warn("Can't open current working directory");
+ return -1;
+ }
+
if (chdir(pkg->install_prefix) == -1) {
warn("Can't change into prefix: %s", pkg->install_prefix);
return -1;
@@ -833,6 +850,14 @@ out:
pkgdb_close();
archive_write_free(writer);
+#ifdef O_DIRECTORY
+ fchdir(workdir);
+ close(workdir);
+#else
+ chdir(workdir);
+ free(workdir);
+#endif
+
return r;
}
From: =?UTF-8?Q?J=C3=B6rg_Sonnenberger?= <joerg@bec.de>
To: gnats-bugs@netbsd.org, pkg-manager@netbsd.org, gnats-admin@netbsd.org,
pkgsrc-bugs@netbsd.org, martin@aprisoft.de
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Mon, 30 Dec 2024 22:08:58 +0100
On 12/27/24 6:30 PM, Martin Husemann via gnats wrote:
> The following reply was made to PR pkg/58809; it has been noted by GNATS.
>
> From: Martin Husemann <martin@duskware.de>
> To: gnats-bugs@netbsd.org
> Cc:
> Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
> Date: Fri, 27 Dec 2024 18:25:26 +0100
>
> Here is a better patch.
There is no reason to depend on O_DIRECTORY. "." is always a directory,
so it's a no-op on systems that implement it.
Joerg
From: Martin Husemann <martin@duskware.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/58809: pkg_add gets confused with -P and library installs
Date: Thu, 2 Jan 2025 20:46:56 +0100
Like this?
Martin
Index: perform.c
===================================================================
RCS file: /cvsroot/pkgsrc/pkgtools/pkg_install/files/add/perform.c,v
retrieving revision 1.128
diff -u -p -r1.128 perform.c
--- perform.c 7 Dec 2024 13:56:46 -0000 1.128
+++ perform.c 2 Jan 2025 19:43:18 -0000
@@ -693,6 +693,7 @@ extract_files(struct pkg_task *pkg)
plist_t *p;
const char *last_file;
char *fullpath;
+ int workdir;
if (Fake)
return 0;
@@ -707,6 +708,15 @@ extract_files(struct pkg_task *pkg)
return -1;
}
+#ifndef O_DIRECTORY
+#define O_DIRECTORY 0
+#endif
+ workdir = open(".", O_RDONLY|O_CLOEXEC|O_DIRECTORY);
+ if (workdir == -1) {
+ warn("Can't open current working directory");
+ return -1;
+ }
+
if (chdir(pkg->install_prefix) == -1) {
warn("Can't change into prefix: %s", pkg->install_prefix);
return -1;
@@ -833,6 +843,9 @@ out:
pkgdb_close();
archive_write_free(writer);
+ fchdir(workdir);
+ close(workdir);
+
return r;
}
Responsible-Changed-From-To: pkg-manager->bin-bug-people
Responsible-Changed-By: martin@NetBSD.org
Responsible-Changed-When: Mon, 13 Jan 2025 11:17:55 +0000
Responsible-Changed-Why:
This is fixed upstream in pkgsrc, we only need to import a newer pkg_*
version into base.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/58809 CVS commit: pkgsrc/pkgtools/pkg_install/files/add
Date: Mon, 13 Jan 2025 11:16:20 +0000
Module Name: pkgsrc
Committed By: martin
Date: Mon Jan 13 11:16:19 UTC 2025
Modified Files:
pkgsrc/pkgtools/pkg_install/files/add: perform.c
Log Message:
PR 58809: save current directory before adding pkgs and restore
it afterwards.
To generate a diff of this commit:
cvs rdiff -u -r1.128 -r1.129 pkgsrc/pkgtools/pkg_install/files/add/perform.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2025
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.