Bug#979970: libselinux1: dependency to newer libc6 ignored by/missing for aptitude

Laurent Bigonville <[email protected]>
Newsgroups gmane.linux.debian.devel.ssh
Message-ID <f84f13f5-4b61-06fc-40f2-0621f3e5ce3b__30952.4543861457$1611824258$gmane$org@debian.org>
Le 26/01/21 à 13:44, Julian Andres Klode a écrit :
> On Tue, Jan 26, 2021 at 12:52:52PM +0100, Aurelien Jarno wrote:
>> reassign 979970 src:glibc,src:libselinux,src:apt,src:openssh
>> thanks
>>
>> On 2021-01-25 11:59, Laurent Bigonville wrote:
>>> reassign 979970 src:glibc 2.30-1
>>> affects 979970 + libselinux1
>>> thanks
>>>
>>> On Tue, 12 Jan 2021 13:31:19 +0100 Charlemagne Lasse
>>> <[email protected]> wrote:
>>>
>>>> Right now, an update from buster to bullseye on amd64 completely
>>>> bricks the system because libselinux1 is requiring a libc6 which is
>>>> not yet installed on the system:
>>>>
>>>> Preparing to unpack .../0-libselinux1_3.1-2+b2_amd64.deb ...
>>>> De-configuring libselinux1:i386 (2.8-1+b1) ...
>>>> Unpacking libselinux1:amd64 (3.1-2+b2) over (2.8-1+b1) ...
>>>> tar: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.30' not
>>>> found (required by /lib/x86_64-linux-gnu/libselinux.so.1)
>>>> dpkg-deb: error: tar subprocess returned error exit status 1
>>>>
>>>> It is then not possible anymore to recover the system because dpkg
>>>> (mv, ...) is no longer working.
>>>>
>>>> There is most likely some kind dependency missing to let aptitude
>>>> known that it must first update libc6 before it can update
>>>> libselinux1. At least on this system, the installed version of libc6
>>>> for amd64 and i386 was still 2.28-10 when this happened
>>> After some discussion on IRC it looks like the problem is apparently coming
>>> from the breaks added to the libc6 package.
>> The break hasn't been added randomly, but in response to upstream
>> release notes and bug #965932. In short the openssh seccomp filters in
>> buster are too narrow, and do not allow the new 64-bit syscalls needed
>> for 64-bit time_t compatibility to be used.
>>
>> So we definitely can't drop this break. For me this is not a libc6 bug.
>> Or if it is, it is as much the fault of libc6 (for using new syscalls)
>> than libselinux1 (for starting using symbol versioning).
> This is not a question of finding the right solution, but more of the
> least worst one.
>
The reason that libselinux needs glibc >= 2.30 is because it now uses 
gettid(), it cas be replaced by syscall(__NR_gettid), right?

With the following patch, the dependency is back to "Depends: libc6 (>= 
2.14), libpcre2-8-0 (>= 10.22)" at least on amd64

--- a/src/procattr.c
+++ b/src/procattr.c
@@ -94,7 +94,7 @@ static int openattr(pid_t pid, const cha
  		if (fd >= 0 || errno != ENOENT)
  			goto out;
  		free(path);
-		tid = gettid();
+		tid = syscall(__NR_gettid);
  		rc = asprintf(&path, "/proc/self/task/%d/attr/%s", tid, attr);
  	} else {
  		errno = EINVAL;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.