Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Vyacheslav Yurkov <uvv.mail@gmail.com>
To: Alexander Kanavin <alex.kanavin@gmail.com>
Cc: "Chen, Qi" <Qi.Chen@windriver.com>,
	"openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>,
	Alexander Kanavin <alex@linutronix.de>
Subject: Re: [OE-core] [PATCH v3 1/2] shadow: update 4.13 -> 4.14.2
Date: Thu, 8 Feb 2024 13:11:03 +0100	[thread overview]
Message-ID: <9c50fcac-5993-4293-a794-422fe8ec5e5c@gmail.com> (raw)
In-Reply-To: <17B1DDC9333F50F1.20876@lists.openembedded.org>

FTR, reverting the last 3 patches to shadow fixed the build of 
shadow-native for me.
We still consider 20.04 to be a "supported" distribution, right?

Slava

On 08.02.2024 11:52, Vyacheslav Yurkov via lists.openembedded.org wrote:
> I only ran 'oe-selftest -r overlayfs.OverlayFSEtcRunTimeTest' on a 
> fresh poky clone with SANITY_TESTED_DISTROS = "" set in local.conf.
>
> I'm trying now the build with this commit reverted.
>
> Slava
>
> On 08.02.2024 11:45, Alexander Kanavin wrote:
>> First you need to show how to reproduce it with plain poky.
>>
>> Alex
>>
>> On Thu, 8 Feb 2024 at 11:40, Vyacheslav Yurkov <uvv.mail@gmail.com> 
>> wrote:
>>> I'm getting the same "parameter name omitted" error with today's master
>>> of poky on Ubuntu-20.04 machine. Is there a fix for that?
>>>
>>> Slava
>>>
>>> On 19.01.2024 13:24, Alexander Kanavin wrote:
>>>> I've seen issues where static libraries built on one host were not
>>>> usable on a different host with default compiler options. This may be
>>>> another one of these.
>>>>
>>>> We're reverting to dynamic linking with libraries in a custom
>>>> directory in sysroot that would be bundled together with shadow-native
>>>> proper. Patch is coming.
>>>>
>>>> Alex
>>>>
>>>> On Fri, 19 Jan 2024 at 13:13, Chen, Qi <Qi.Chen@windriver.com> wrote:
>>>>> I didn't do anything particular, but as several people are sharing 
>>>>> the server, it's possible that its environment is somewhat messed 
>>>>> up. I'll check more and fix the environment. Thanks for your 
>>>>> double check.
>>>>>
>>>>> Regards,
>>>>> Qi
>>>>>
>>>>> -----Original Message-----
>>>>> From: Alexander Kanavin <alex.kanavin@gmail.com>
>>>>> Sent: Friday, January 19, 2024 6:12 PM
>>>>> To: Chen, Qi <Qi.Chen@windriver.com>
>>>>> Cc: openembedded-core@lists.openembedded.org; Alexander Kanavin 
>>>>> <alex@linutronix.de>
>>>>> Subject: Re: [OE-core] [PATCH v3 1/2] shadow: update 4.13 -> 4.14.2
>>>>>
>>>>> I just tried poky master on ubuntu 20.04, and the issues do not 
>>>>> appear. Do you have a custom setup?
>>>>>
>>>>> Alex
>>>>>
>>>>> On Fri, 19 Jan 2024 at 04:06, ChenQi <Qi.Chen@windriver.com> wrote:
>>>>>> I'm seeing build failures on Ubuntu 20.04.
>>>>>> GCC version: 9.4.0
>>>>>>
>>>>>> 1. error: parameter name omitted
>>>>>> The problem is that the active_sessions_count function's definition
>>>>>> lacks parameter. I did change like below:
>>>>>> -unsigned long active_sessions_count(const char *name, unsigned long
>>>>>> unused)
>>>>>> +unsigned long active_sessions_count(const char *name, unsigned long
>>>>>> unused unused_parameter)
>>>>>> But then I observed another error, as shown below.
>>>>>>
>>>>>> 2. undefined reference to `dlsym'.
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> ../lib/.libs/libshadow.a(libshadow_la-nss.o): in function 
>>>>>> `nss_exit':
>>>>>> | nss.c:(.text+0x32): undefined reference to `dlclose'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> ../lib/.libs/libshadow.a(libshadow_la-nss.o): in function 
>>>>>> `nss_init':
>>>>>> | nss.c:(.text+0x1dd): undefined reference to `dlopen'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> nss.c:(.text+0x21c): undefined reference to `dlsym'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> nss.c:(.text+0x237): undefined reference to `dlsym'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> nss.c:(.text+0x253): undefined reference to `dlsym'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> nss.c:(.text+0x365): undefined reference to `dlclose'
>>>>>> | /ala-lpggp72/qichen/Yocto/builds/build-master/tmp/hosttools/ld:
>>>>>> nss.c:(.text+0x3b2): undefined reference to `dlerror'
>>>>>> | collect2: error: ld returned 1 exit status
>>>>>> | make[2]: *** [Makefile:1130: su] Error 1
>>>>>>
>>>>>> On Ubuntu22.04, there's no such issue.
>>>>>>
>>>>>> Regards,
>>>>>> Qi
>>>>>>
>>>>>> On 1/11/24 21:15, Alexander Kanavin wrote:
>>>>>>> License-Update: formatting, spdx conversion
>>>>>>>
>>>>>>> Drop:
>>>>>>> 0001-Disable-use-of-syslog-for-sysroot.patch
>>>>>>> (issue fixed upstream)
>>>>>>>
>>>>>>> 0001-Fix-can-not-print-full-login.patch
>>>>>>> 0001-Overhaul-valid_field.patch
>>>>>>> CVE-2023-29383.patch
>>>>>>> (backports)
>>>>>>>
>>>>>>> libbsd is a new native dependency, as otherwise glibc >= 2.38 is
>>>>>>> needed.
>>>>>>>
>>>>>>> A similar fix is added to musl in order to define non-standard 
>>>>>>> __BEGIN_DECLS/__END_DECLS.
>>>>>>>
>>>>>>> Signed-off-by: Alexander Kanavin <alex@linutronix.de>
>>>>>>> ---
>>>>>>>     ...01-Disable-use-of-syslog-for-sysroot.patch | 52 -------
>>>>>>>     .../0001-Fix-can-not-print-full-login.patch   | 41 -----
>>>>>>>     .../files/0001-Overhaul-valid_field.patch     | 65 --------
>>>>>>>     .../shadow/files/CVE-2023-29383.patch         | 53 -------
>>>>>>>     .../shadow/files/CVE-2023-4641.patch          | 147 
>>>>>>> ------------------
>>>>>>>     ...nexpected-open-failure-in-chroot-env.patch | 16 +-
>>>>>>>     meta/recipes-extended/shadow/shadow.inc       | 20 +--
>>>>>>>     .../{shadow_4.13.bb => shadow_4.14.2.bb} |   0
>>>>>>>     8 files changed, 16 insertions(+), 378 deletions(-)
>>>>>>>     delete mode 100644 
>>>>>>> meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for-sysroot.patch
>>>>>>>     delete mode 100644 
>>>>>>> meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-login.patch
>>>>>>>     delete mode 100644 
>>>>>>> meta/recipes-extended/shadow/files/0001-Overhaul-valid_field.patch
>>>>>>>     delete mode 100644 
>>>>>>> meta/recipes-extended/shadow/files/CVE-2023-29383.patch
>>>>>>>     delete mode 100644 
>>>>>>> meta/recipes-extended/shadow/files/CVE-2023-4641.patch
>>>>>>>     rename meta/recipes-extended/shadow/{shadow_4.13.bb =>
>>>>>>> shadow_4.14.2.bb} (100%)
>>>>>>>
>>>>>>> diff --git
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for- 
>>>>>>>
>>>>>>> sysroot.patch
>>>>>>> b/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for- 
>>>>>>>
>>>>>>> sysroot.patch
>>>>>>> deleted file mode 100644
>>>>>>> index fa1532c8317..00000000000
>>>>>>> ---
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Disable-use-of-syslog-for- 
>>>>>>>
>>>>>>> sysroot.patch
>>>>>>> +++ /dev/null
>>>>>>> @@ -1,52 +0,0 @@
>>>>>>> -From 85d0444229ee3d14fefcf10d093f49c862826f82 Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> -From: Richard Purdie <richard.purdie@linuxfoundation.org>
>>>>>>> -Date: Thu, 14 Apr 2022 23:11:53 +0000
>>>>>>> -Subject: [PATCH] Disable use of syslog for shadow-native tools
>>>>>>> -
>>>>>>> -Disable use of syslog to prevent sysroot user and group additions
>>>>>>> from -writing entries to the host's syslog. This patch should only
>>>>>>> be used -with the shadow-native recipe.
>>>>>>> -
>>>>>>> -Upstream-Status: Inappropriate [OE specific configuration]
>>>>>>> -Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
>>>>>>> -Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
>>>>>>> -
>>>>>>> ----
>>>>>>> - configure.ac      | 2 +-
>>>>>>> - src/login_nopam.c | 3 ++-
>>>>>>> - 2 files changed, 3 insertions(+), 2 deletions(-)
>>>>>>> -
>>>>>>> -diff --git a/configure.ac b/configure.ac -index 924254a..603af81
>>>>>>> 100644
>>>>>>> ---- a/configure.ac
>>>>>>> -+++ b/configure.ac
>>>>>>> -@@ -191,7 +191,7 @@ AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, 
>>>>>>> "$shadow_cv_passwd_dir/passwd",
>>>>>>> -     [Path to passwd program.])
>>>>>>> -
>>>>>>> - dnl XXX - quick hack, should disappear before anyone notices :).
>>>>>>> --AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
>>>>>>> -+#AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
>>>>>>> - if test "$ac_cv_func_ruserok" = "yes"; then
>>>>>>> -     AC_DEFINE(RLOGIN, 1, [Define if login should support the 
>>>>>>> -r flag for rlogind.])
>>>>>>> -     AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" 
>>>>>>> return value (0 or 1).])
>>>>>>> -diff --git a/src/login_nopam.c b/src/login_nopam.c -index
>>>>>>> df6ba88..fc24e13 100644
>>>>>>> ---- a/src/login_nopam.c
>>>>>>> -+++ b/src/login_nopam.c
>>>>>>> -@@ -29,7 +29,6 @@
>>>>>>> - #ifndef USE_PAM
>>>>>>> - #ident "$Id$"
>>>>>>> -
>>>>>>> --#include "prototypes.h"
>>>>>>> -     /*
>>>>>>> -      * This module implements a simple but effective form of 
>>>>>>> login access
>>>>>>> -      * control based on login names and on host (or domain) 
>>>>>>> names, internet
>>>>>>> -@@ -57,6 +56,8 @@
>>>>>>> - #include <netinet/in.h>
>>>>>>> - #include <arpa/inet.h>              /* for inet_ntoa() */
>>>>>>> -
>>>>>>> -+#include "prototypes.h"
>>>>>>> -+
>>>>>>> - #if !defined(MAXHOSTNAMELEN) || (MAXHOSTNAMELEN < 64)
>>>>>>> - #undef MAXHOSTNAMELEN
>>>>>>> - #define MAXHOSTNAMELEN 256
>>>>>>> diff --git
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-log 
>>>>>>>
>>>>>>> in.patch
>>>>>>> b/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-log 
>>>>>>>
>>>>>>> in.patch
>>>>>>> deleted file mode 100644
>>>>>>> index 89f9c05c8d3..00000000000
>>>>>>> ---
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Fix-can-not-print-full-log 
>>>>>>>
>>>>>>> in.patch
>>>>>>> +++ /dev/null
>>>>>>> @@ -1,41 +0,0 @@
>>>>>>> -commit 670cae834827a8f794e6f7464fa57790d911b63c
>>>>>>> -Author: SoumyaWind <121475834+SoumyaWind@users.noreply.github.com>
>>>>>>> -Date:   Tue Dec 27 17:40:17 2022 +0530
>>>>>>> -
>>>>>>> -    shadow: Fix can not print full login timeout message
>>>>>>> -
>>>>>>> -    Login timed out message prints only first few bytes when 
>>>>>>> write is immediately followed by exit.
>>>>>>> -    Calling exit from new handler provides enough time to 
>>>>>>> display full message.
>>>>>>> -
>>>>>>> -Upstream-Status: Backport
>>>>>>> [https://github.com/shadow-maint/shadow/commit/670cae834827a8f794e6f 
>>>>>>>
>>>>>>> 7464fa57790d911b63c]
>>>>>>> -
>>>>>>> -diff --git a/src/login.c b/src/login.c -index 116e2cb3..c55f4de0
>>>>>>> 100644
>>>>>>> ---- a/src/login.c
>>>>>>> -+++ b/src/login.c
>>>>>>> -@@ -120,6 +120,7 @@ static void get_pam_user (char 
>>>>>>> **ptr_pam_user);
>>>>>>> -
>>>>>>> - static void init_env (void);
>>>>>>> - static void alarm_handler (int);
>>>>>>> -+static void exit_handler (int);
>>>>>>> -
>>>>>>> - /*
>>>>>>> -  * usage - print login command usage and exit -@@ -391,11 +392,16
>>>>>>> @@ static void init_env (void)
>>>>>>> - #endif                              /* !USE_PAM */
>>>>>>> - }
>>>>>>> -
>>>>>>> -+static void exit_handler (unused int sig) {
>>>>>>> -+    _exit (0);
>>>>>>> -+}
>>>>>>> -
>>>>>>> - static void alarm_handler (unused int sig)
>>>>>>> - {
>>>>>>> -     write (STDERR_FILENO, tmsg, strlen (tmsg));
>>>>>>> --    _exit (0);
>>>>>>> -+    signal(SIGALRM, exit_handler);
>>>>>>> -+    alarm(2);
>>>>>>> - }
>>>>>>> -
>>>>>>> - #ifdef USE_PAM
>>>>>>> diff --git
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Overhaul-valid_field.patch 
>>>>>>>
>>>>>>> b/meta/recipes-extended/shadow/files/0001-Overhaul-valid_field.patch 
>>>>>>>
>>>>>>> deleted file mode 100644
>>>>>>> index ac08be515bf..00000000000
>>>>>>> ---
>>>>>>> a/meta/recipes-extended/shadow/files/0001-Overhaul-valid_field.patch 
>>>>>>>
>>>>>>> +++ /dev/null
>>>>>>> @@ -1,65 +0,0 @@
>>>>>>> -From 2eaea70111f65b16d55998386e4ceb4273c19eb4 Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> -From: =?UTF-8?q?Christian=20G=C3=B6ttsche?=
>>>>>>> <cgzones@googlemail.com>
>>>>>>> -Date: Fri, 31 Mar 2023 14:46:50 +0200
>>>>>>> -Subject: [PATCH] Overhaul valid_field()
>>>>>>> -
>>>>>>> -e5905c4b ("Added control character check") introduced checking for
>>>>>>> -control characters but had the logic inverted, so it rejects all
>>>>>>> -characters that are not control ones.
>>>>>>> -
>>>>>>> -Cast the character to `unsigned char` before passing to the
>>>>>>> character -checking functions to avoid UB.
>>>>>>> -
>>>>>>> -Use strpbrk(3) for the illegal character test and return early.
>>>>>>> -
>>>>>>> -Upstream-Status: Backport
>>>>>>> [https://github.com/shadow-maint/shadow/commit/2eaea70111f65b16d5599 
>>>>>>>
>>>>>>> 8386e4ceb4273c19eb4]
>>>>>>> -
>>>>>>> -Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
>>>>>>> ----
>>>>>>> - lib/fields.c | 24 ++++++++++--------------
>>>>>>> - 1 file changed, 10 insertions(+), 14 deletions(-)
>>>>>>> -
>>>>>>> -diff --git a/lib/fields.c b/lib/fields.c -index fb51b582..53929248
>>>>>>> 100644
>>>>>>> ---- a/lib/fields.c
>>>>>>> -+++ b/lib/fields.c
>>>>>>> -@@ -37,26 +37,22 @@ int valid_field (const char *field, const char
>>>>>>> *illegal)
>>>>>>> -
>>>>>>> -     /* For each character of field, search if it appears in 
>>>>>>> the list
>>>>>>> -      * of illegal characters. */
>>>>>>> -+    if (illegal && NULL != strpbrk (field, illegal)) {
>>>>>>> -+            return -1;
>>>>>>> -+    }
>>>>>>> -+
>>>>>>> -+    /* Search if there are non-printable or control characters */
>>>>>>> -     for (cp = field; '\0' != *cp; cp++) {
>>>>>>> --            if (strchr (illegal, *cp) != NULL) {
>>>>>>> -+            unsigned char c = *cp;
>>>>>>> -+            if (!isprint (c)) {
>>>>>>> -+                    err = 1;
>>>>>>> -+            }
>>>>>>> -+            if (iscntrl (c)) {
>>>>>>> -                     err = -1;
>>>>>>> -                     break;
>>>>>>> -             }
>>>>>>> -     }
>>>>>>> -
>>>>>>> --    if (0 == err) {
>>>>>>> --            /* Search if there are non-printable or control 
>>>>>>> characters */
>>>>>>> --            for (cp = field; '\0' != *cp; cp++) {
>>>>>>> --                    if (!isprint (*cp)) {
>>>>>>> --                            err = 1;
>>>>>>> --                    }
>>>>>>> --                    if (!iscntrl (*cp)) {
>>>>>>> --                            err = -1;
>>>>>>> --                            break;
>>>>>>> --                    }
>>>>>>> --            }
>>>>>>> --    }
>>>>>>> -- 
>>>>>>> -     return err;
>>>>>>> - }
>>>>>>> -
>>>>>>> ---
>>>>>>> -2.34.1
>>>>>>> -
>>>>>>> diff --git 
>>>>>>> a/meta/recipes-extended/shadow/files/CVE-2023-29383.patch
>>>>>>> b/meta/recipes-extended/shadow/files/CVE-2023-29383.patch
>>>>>>> deleted file mode 100644
>>>>>>> index f53341d3fc2..00000000000
>>>>>>> --- a/meta/recipes-extended/shadow/files/CVE-2023-29383.patch
>>>>>>> +++ /dev/null
>>>>>>> @@ -1,53 +0,0 @@
>>>>>>> -From e5905c4b84d4fb90aefcd96ee618411ebfac663d Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> -From: tomspiderlabs
>>>>>>> <128755403+tomspiderlabs@users.noreply.github.com>
>>>>>>> -Date: Thu, 23 Mar 2023 23:39:38 +0000
>>>>>>> -Subject: [PATCH] Added control character check
>>>>>>> -
>>>>>>> -Added control character check, returning -1 (to "err") if 
>>>>>>> control characters are present.
>>>>>>> -
>>>>>>> -CVE: CVE-2023-29383
>>>>>>> -Upstream-Status: Backport
>>>>>>> -
>>>>>>> -Reference to upstream:
>>>>>>> -https://github.com/shadow-maint/shadow/commit/e5905c4b84d4fb90aefcd 
>>>>>>>
>>>>>>> 96ee618411ebfac663d
>>>>>>> -
>>>>>>> -Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
>>>>>>> ----
>>>>>>> - lib/fields.c | 11 +++++++----
>>>>>>> - 1 file changed, 7 insertions(+), 4 deletions(-)
>>>>>>> -
>>>>>>> -diff --git a/lib/fields.c b/lib/fields.c -index 640be931..fb51b582
>>>>>>> 100644
>>>>>>> ---- a/lib/fields.c
>>>>>>> -+++ b/lib/fields.c
>>>>>>> -@@ -21,9 +21,9 @@
>>>>>>> -  *
>>>>>>> -  * The supplied field is scanned for non-printable and other
>>>>>>> illegal
>>>>>>> -  * characters.
>>>>>>> -- *  + -1 is returned if an illegal character is present.
>>>>>>> -- *  +  1 is returned if no illegal characters are present, but 
>>>>>>> the field
>>>>>>> -- *       contains a non-printable character.
>>>>>>> -+ *  + -1 is returned if an illegal or control character is 
>>>>>>> present.
>>>>>>> -+ *  +  1 is returned if no illegal or control characters are 
>>>>>>> present,
>>>>>>> -+ *       but the field contains a non-printable character.
>>>>>>> -  *  +  0 is returned otherwise.
>>>>>>> -  */
>>>>>>> - int valid_field (const char *field, const char *illegal) -@@
>>>>>>> -45,10 +45,13 @@ int valid_field (const char *field, const char 
>>>>>>> *illegal)
>>>>>>> -     }
>>>>>>> -
>>>>>>> -     if (0 == err) {
>>>>>>> --            /* Search if there are some non-printable 
>>>>>>> characters */
>>>>>>> -+            /* Search if there are non-printable or control
>>>>>>> -+ characters */
>>>>>>> -             for (cp = field; '\0' != *cp; cp++) {
>>>>>>> -                     if (!isprint (*cp)) {
>>>>>>> -                             err = 1;
>>>>>>> -+                    }
>>>>>>> -+                    if (!iscntrl (*cp)) {
>>>>>>> -+                            err = -1;
>>>>>>> -                             break;
>>>>>>> -                     }
>>>>>>> -             }
>>>>>>> ---
>>>>>>> -2.34.1
>>>>>>> -
>>>>>>> diff --git a/meta/recipes-extended/shadow/files/CVE-2023-4641.patch
>>>>>>> b/meta/recipes-extended/shadow/files/CVE-2023-4641.patch
>>>>>>> deleted file mode 100644
>>>>>>> index 1fabfe928e4..00000000000
>>>>>>> --- a/meta/recipes-extended/shadow/files/CVE-2023-4641.patch
>>>>>>> +++ /dev/null
>>>>>>> @@ -1,147 +0,0 @@
>>>>>>> -From 25dbe2ce166a13322b7536ff2f738786ea2e61e7 Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> -From: Alejandro Colomar <alx@kernel.org>
>>>>>>> -Date: Sat, 10 Jun 2023 16:20:05 +0200
>>>>>>> -Subject: [PATCH] gpasswd(1): Fix password leak
>>>>>>> -
>>>>>>> -How to trigger this password leak?
>>>>>>> -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>>>> -
>>>>>>> -When gpasswd(1) asks for the new password, it asks twice (as is
>>>>>>> usual -for confirming the new password).  Each of those 2 password
>>>>>>> prompts -uses agetpass() to get the password.  If the second
>>>>>>> agetpass() fails, -the first password, which has been copied into
>>>>>>> the 'static' buffer -'pass' via STRFCPY(), wasn't being zeroed.
>>>>>>> -
>>>>>>> -agetpass() is defined in <./libmisc/agetpass.c> (around line 91),
>>>>>>> and -can fail for any of the following reasons:
>>>>>>> -
>>>>>>> --  malloc(3) or readpassphrase(3) failure.
>>>>>>> -
>>>>>>> -   These are going to be difficult to trigger.  Maybe getting 
>>>>>>> the system
>>>>>>> -   to the limits of memory utilization at that exact point, so 
>>>>>>> that the
>>>>>>> -   next malloc(3) gets ENOMEM, and possibly even the OOM is 
>>>>>>> triggered.
>>>>>>> -   About readpassphrase(3), ENFILE and EINTR seem the only 
>>>>>>> plausible
>>>>>>> -   ones, and EINTR probably requires privilege or being the 
>>>>>>> same user;
>>>>>>> -   but I wouldn't discard ENFILE so easily, if a process starts 
>>>>>>> opening
>>>>>>> -   files.
>>>>>>> -
>>>>>>> --  The password is longer than PASS_MAX.
>>>>>>> -
>>>>>>> -   The is plausible with physical access.  However, at that 
>>>>>>> point, a
>>>>>>> -   keylogger will be a much simpler attack.
>>>>>>> -
>>>>>>> -And, the attacker must be able to know when the second password is
>>>>>>> being -introduced, which is not going to be easy.
>>>>>>> -
>>>>>>> -How to read the password after the leak?
>>>>>>> -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>>>> -
>>>>>>> -Provoking the leak yourself at the right point by entering a very
>>>>>>> long -password is easy, and inspecting the process stack at that
>>>>>>> point should -be doable.  Try to find some consistent patterns.
>>>>>>> -
>>>>>>> -Then, search for those patterns in free memory, right after the
>>>>>>> victim -leaks their password.
>>>>>>> -
>>>>>>> -Once you get the leak, a program should read all the free memory
>>>>>>> -searching for patterns that gpasswd(1) leaves nearby the leaked
>>>>>>> -password.
>>>>>>> -
>>>>>>> -On 6/10/23 03:14, Seth Arnold wrote:
>>>>>>> -> An attacker process wouldn't be able to use malloc(3) for 
>>>>>>> this task.
>>>>>>> -> There's a handful of tools available for userspace to 
>>>>>>> allocate memory:
>>>>>>> ->
>>>>>>> -> -  brk / sbrk
>>>>>>> -> -  mmap MAP_ANONYMOUS
>>>>>>> -> -  mmap /dev/zero
>>>>>>> -> -  mmap some other file
>>>>>>> -> -  shm_open
>>>>>>> -> -  shmget
>>>>>>> ->
>>>>>>> -> Most of these return only pages of zeros to a process.  Using
>>>>>>> -> mmap of an existing file, you can get some of the contents of 
>>>>>>> the
>>>>>>> -> file demand-loaded into the memory space on the first use.
>>>>>>> ->
>>>>>>> -> The MAP_UNINITIALIZED flag only works if the kernel was compiled
>>>>>>> -> with CONFIG_MMAP_ALLOW_UNINITIALIZED.  This is rare.
>>>>>>> ->
>>>>>>> -> malloc(3) doesn't zero memory, to our collective frustration, 
>>>>>>> but
>>>>>>> -> all the garbage in the allocations is from previous allocations
>>>>>>> -> in the current process.  It isn't leftover from other processes.
>>>>>>> ->
>>>>>>> -> The avenues available for reading the memory:
>>>>>>> -> -  /dev/mem and /dev/kmem (requires root, not available with
>>>>>>> -> Secure Boot)
>>>>>>> -> -  /proc/pid/mem (requires ptrace privileges, mediated by YAMA)
>>>>>>> -> -  ptrace (requires ptrace privileges, mediated by YAMA)
>>>>>>> -> -  causing memory to be swapped to disk, and then inspecting the
>>>>>>> -> swap
>>>>>>> ->
>>>>>>> -> These all require a certain amount of privileges.
>>>>>>> -
>>>>>>> -How to fix it?
>>>>>>> -~~~~~~~~~~~~~~
>>>>>>> -
>>>>>>> -memzero(), which internally calls explicit_bzero(3), or whatever
>>>>>>> -alternative the system provides with a slightly different name,
>>>>>>> will -make sure that the buffer is zeroed in memory, and
>>>>>>> optimizations are not -allowed to impede this zeroing.
>>>>>>> -
>>>>>>> -This is not really 100% effective, since compilers may place 
>>>>>>> copies
>>>>>>> of -the string somewhere hidden in the stack.  Those copies won't
>>>>>>> get zeroed -by explicit_bzero(3).  However, that's arguably a
>>>>>>> compiler bug, since -compilers should make everything possible to
>>>>>>> avoid optimizing strings -that are later passed to
>>>>>>> explicit_bzero(3).  But we all know that -sometimes it's impossible
>>>>>>> to have perfect knowledge in the compiler, so -this is plausible.
>>>>>>> Nevertheless, there's nothing we can do against such -issues, 
>>>>>>> except
>>>>>>> minimizing the time such passwords are stored in plain -text.
>>>>>>> -
>>>>>>> -Security concerns
>>>>>>> -~~~~~~~~~~~~~~~~~
>>>>>>> -
>>>>>>> -We believe this isn't easy to exploit.  Nevertheless, and since 
>>>>>>> the
>>>>>>> fix -is trivial, this fix should probably be applied soon, and
>>>>>>> backported to -all supported distributions, to prevent someone else
>>>>>>> having more -imagination than us to find a way.
>>>>>>> -
>>>>>>> -Affected versions
>>>>>>> -~~~~~~~~~~~~~~~~~
>>>>>>> -
>>>>>>> -All.  Bug introduced in shadow 19990709.  That's the second commit
>>>>>>> in -the git history.
>>>>>>> -
>>>>>>> -Fixes: 45c6603cc86c ("[svn-upgrade] Integrating new upstream
>>>>>>> version, shadow (19990709)")
>>>>>>> -
>>>>>>> -CVE: CVE-2023-4641
>>>>>>> -Upstream-Status: Backport
>>>>>>> [https://github.com/shadow-maint/shadow/commit/65c88a43a23c2391dcc90 
>>>>>>>
>>>>>>> c0abda3e839e9c57904]
>>>>>>> -
>>>>>>> -Reported-by: Alejandro Colomar <alx@kernel.org>
>>>>>>> -Cc: Serge Hallyn <serge@hallyn.com>
>>>>>>> -Cc: Iker Pedrosa <ipedrosa@redhat.com>
>>>>>>> -Cc: Seth Arnold <seth.arnold@canonical.com>
>>>>>>> -Cc: Christian Brauner <christian@brauner.io>
>>>>>>> -Cc: Balint Reczey <rbalint@debian.org>
>>>>>>> -Cc: Sam James <sam@gentoo.org>
>>>>>>> -Cc: David Runge <dvzrv@archlinux.org>
>>>>>>> -Cc: Andreas Jaeger <aj@suse.de>
>>>>>>> -Cc: <~hallyn/shadow@lists.sr.ht>
>>>>>>> -Signed-off-by: Alejandro Colomar <alx@kernel.org>
>>>>>>> -Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
>>>>>>> ----
>>>>>>> - src/gpasswd.c | 1 +
>>>>>>> - 1 file changed, 1 insertion(+)
>>>>>>> -
>>>>>>> -diff --git a/src/gpasswd.c b/src/gpasswd.c -index
>>>>>>> 5983f787..2d8869ef 100644
>>>>>>> ---- a/src/gpasswd.c
>>>>>>> -+++ b/src/gpasswd.c
>>>>>>> -@@ -896,6 +896,7 @@ static void change_passwd (struct group *gr)
>>>>>>> -             strzero (cp);
>>>>>>> -             cp = getpass (_("Re-enter new password: "));
>>>>>>> -             if (NULL == cp) {
>>>>>>> -+                    memzero (pass, sizeof pass);
>>>>>>> -                     exit (1);
>>>>>>> -             }
>>>>>>> -
>>>>>>> ---
>>>>>>> -2.34.1
>>>>>>> -
>>>>>>> diff --git
>>>>>>> a/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open- 
>>>>>>>
>>>>>>> failure-in-chroot-env.patch
>>>>>>> b/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open- 
>>>>>>>
>>>>>>> failure-in-chroot-env.patch index 85d91751056..4a932d2dbb1 100644
>>>>>>> ---
>>>>>>> a/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-open- 
>>>>>>>
>>>>>>> failure-in-chroot-env.patch
>>>>>>> +++ 
>>>>>>> b/meta/recipes-extended/shadow/files/commonio.c-fix-unexpected-o
>>>>>>> +++ pen-failure-in-chroot-env.patch
>>>>>>> @@ -1,4 +1,4 @@
>>>>>>> -From 21583da072aa66901d859ac00ce209bac87ddecc Mon Sep 17 00:00:00
>>>>>>> 2001
>>>>>>> +From a773c6b240d27e23d6be41decef0edf24fcee523 Mon Sep 17 00:00:00
>>>>>>> +2001
>>>>>>>     From: Chen Qi <Qi.Chen@windriver.com>
>>>>>>>     Date: Thu, 17 Jul 2014 15:53:34 +0800
>>>>>>>     Subject: [PATCH]
>>>>>>> commonio.c-fix-unexpected-open-failure-in-chroot-env
>>>>>>> @@ -15,35 +15,37 @@ Note that this patch doesn't change the 
>>>>>>> logic in the code, it just expands
>>>>>>>     the codes.
>>>>>>>
>>>>>>>     Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>>>>>>> -
>>>>>>>     ---
>>>>>>>      lib/commonio.c | 16 ++++++++++++----
>>>>>>>      1 file changed, 12 insertions(+), 4 deletions(-)
>>>>>>>
>>>>>>>     diff --git a/lib/commonio.c b/lib/commonio.c -index
>>>>>>> 9a02ce1..61384ec 100644
>>>>>>> +index 73fdb3a..d1231e9 100644
>>>>>>>     --- a/lib/commonio.c
>>>>>>>     +++ b/lib/commonio.c
>>>>>>> -@@ -616,10 +616,18 @@ int commonio_open (struct commonio_db *db,
>>>>>>> int mode)
>>>>>>> +@@ -606,10 +606,18 @@ int commonio_open (struct commonio_db *db,
>>>>>>> +int mode)
>>>>>>>         db->cursor = NULL;
>>>>>>>         db->changed = false;
>>>>>>>
>>>>>>>     -   fd = open (db->filename,
>>>>>>>     -                (db->readonly ? O_RDONLY : O_RDWR)
>>>>>>> --               | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
>>>>>>> +-               | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW | O_CLOEXEC);
>>>>>>>     -   saved_errno = errno;
>>>>>>>     +   if (db->readonly) {
>>>>>>>     +           fd = open (db->filename,
>>>>>>>     +                      (true ? O_RDONLY : O_RDWR)
>>>>>>> -+                       | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
>>>>>>> ++                       | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW |
>>>>>>> ++ O_CLOEXEC);
>>>>>>>     +           saved_errno = errno;
>>>>>>>     +   } else {
>>>>>>>     +           fd = open (db->filename,
>>>>>>>     +                      (false ? O_RDONLY : O_RDWR)
>>>>>>> -+                       | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
>>>>>>> ++                       | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW|
>>>>>>> ++ O_CLOEXEC);
>>>>>>>     +           saved_errno = errno;
>>>>>>>     +   }
>>>>>>>     +
>>>>>>>         db->fp = NULL;
>>>>>>>         if (fd >= 0) {
>>>>>>>      #ifdef WITH_TCB
>>>>>>> +--
>>>>>>> +2.30.2
>>>>>>> +
>>>>>>> diff --git a/meta/recipes-extended/shadow/shadow.inc
>>>>>>> b/meta/recipes-extended/shadow/shadow.inc
>>>>>>> index ce3ce627156..c024746d4ff 100644
>>>>>>> --- a/meta/recipes-extended/shadow/shadow.inc
>>>>>>> +++ b/meta/recipes-extended/shadow/shadow.inc
>>>>>>> @@ -5,7 +5,7 @@ BUGTRACKER = 
>>>>>>> "http://github.com/shadow-maint/shadow/issues"
>>>>>>>     SECTION = "base/utils"
>>>>>>>     LICENSE = "BSD-3-Clause"
>>>>>>>     LIC_FILES_CHKSUM = 
>>>>>>> "file://COPYING;md5=c9a450b7be84eac23e6353efecb60b5b \
>>>>>>> - 
>>>>>>> file://src/passwd.c;beginline=2;endline=30;md5=758c26751513b6795395275969dd3be1 
>>>>>>> \
>>>>>>> +
>>>>>>> + 
>>>>>>> file://src/passwd.c;beginline=2;endline=7;md5=67bcf314687820b2f010
>>>>>>> + d4863fce3fc5 \
>>>>>>>                         "
>>>>>>>
>>>>>>>     DEPENDS = "virtual/crypt"
>>>>>>> @@ -14,10 +14,6 @@ GITHUB_BASE_URI = 
>>>>>>> "https://github.com/shadow-maint/shadow/releases"
>>>>>>>     SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.gz \
>>>>>>>                ${@bb.utils.contains('PACKAGECONFIG', 'pam', 
>>>>>>> '${PAM_SRC_URI}', '', d)} \
>>>>>>>                file://useradd \
>>>>>>> - file://0001-Fix-can-not-print-full-login.patch \
>>>>>>> -           file://CVE-2023-29383.patch \
>>>>>>> -           file://0001-Overhaul-valid_field.patch \
>>>>>>> -           file://CVE-2023-4641.patch \
>>>>>>>                "
>>>>>>>
>>>>>>>     SRC_URI:append:class-target = " \
>>>>>>> @@ -26,14 +22,9 @@ SRC_URI:append:class-target = " \
>>>>>>>                "
>>>>>>>
>>>>>>>     SRC_URI:append:class-native = " \
>>>>>>> - file://0001-Disable-use-of-syslog-for-sysroot.patch \
>>>>>>> file://commonio.c-fix-unexpected-open-failure-in-chroot-env.patch \
>>>>>>>                "
>>>>>>> -SRC_URI:append:class-nativesdk = " \
>>>>>>> - file://0001-Disable-use-of-syslog-for-sysroot.patch \
>>>>>>> -           "
>>>>>>> -SRC_URI[sha256sum] = 
>>>>>>> "813057047499c7fe81108adcf0cffa3ad4ec75e19a80151f9cbaa458ff2e86cd"
>>>>>>> -
>>>>>>> +SRC_URI[sha256sum] = 
>>>>>>> "a305edf5d19bddbdf5e836d2d609fa8bff2d35458819de4d9f06306a1cf24342"
>>>>>>>
>>>>>>>     # Additional Policy files for PAM
>>>>>>>     PAM_SRC_URI = "file://pam.d/chfn \ @@ -44,7 +35,7 @@ 
>>>>>>> PAM_SRC_URI =
>>>>>>> "file://pam.d/chfn \
>>>>>>>                    file://pam.d/passwd \
>>>>>>>                    file://pam.d/su"
>>>>>>>
>>>>>>> -inherit autotools gettext github-releases
>>>>>>> +inherit autotools gettext github-releases pkgconfig
>>>>>>>
>>>>>>>     export CONFIG_SHELL="/bin/sh"
>>>>>>>
>>>>>>> @@ -54,6 +45,8 @@ EXTRA_OECONF += "--without-libcrack \
>>>>>>>                      --without-sssd \
>>>>>>>                      ${NSCDOPT}"
>>>>>>>
>>>>>>> +CFLAGS:append:libc-musl = " -DLIBBSD_OVERLAY"
>>>>>>> +
>>>>>>>     NSCDOPT = ""
>>>>>>>     NSCDOPT:class-native = "--without-nscd"
>>>>>>>     NSCDOPT:class-nativesdk = "--without-nscd"
>>>>>>> @@ -73,13 +66,14 @@ PAM_PLUGINS = "libpam-runtime \
>>>>>>>
>>>>>>>     PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 
>>>>>>> 'pam', d)} \
>>>>>>> ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
>>>>>>> -PACKAGECONFIG:class-native ??= 
>>>>>>> "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)}"
>>>>>>> +PACKAGECONFIG:class-native ??= 
>>>>>>> "${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', 
>>>>>>> d)} libbsd"
>>>>>>>     PACKAGECONFIG:class-nativesdk = ""
>>>>>>>     PACKAGECONFIG[pam] = 
>>>>>>> "--with-libpam,--without-libpam,libpam,${PAM_PLUGINS}"
>>>>>>>     PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
>>>>>>>     PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
>>>>>>>     PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit"
>>>>>>>     PACKAGECONFIG[selinux] = 
>>>>>>> "--with-selinux,--without-selinux,libselinux libsemanage"
>>>>>>> +PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
>>>>>>>
>>>>>>>     RDEPENDS:${PN} = "shadow-securetty \
>>>>>>>                       base-passwd \
>>>>>>> diff --git a/meta/recipes-extended/shadow/shadow_4.13.bb
>>>>>>> b/meta/recipes-extended/shadow/shadow_4.14.2.bb
>>>>>>> similarity index 100%
>>>>>>> rename from meta/recipes-extended/shadow/shadow_4.13.bb
>>>>>>> rename to meta/recipes-extended/shadow/shadow_4.14.2.bb
>>>>>>>
>>>>>>>
>>>>>>>



  parent reply	other threads:[~2024-02-08 12:11 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-11 13:15 [PATCH v3 1/2] shadow: update 4.13 -> 4.14.2 Alexander Kanavin
2024-01-11 13:15 ` [PATCH v3 2/2] shadow: link executables statically for -native variant Alexander Kanavin
2024-01-17 12:46   ` [OE-core] " Dmitry Baryshkov
2024-01-18  9:50     ` Dmitry Baryshkov
2024-01-18  9:59     ` Richard Purdie
2024-01-18 10:13       ` Alexander Kanavin
2024-01-18 13:32         ` Dmitry Baryshkov
2024-01-18 13:37       ` Dmitry Baryshkov
2024-01-18 13:51         ` Richard Purdie
2024-01-18 15:12           ` Dmitry Baryshkov
2024-01-19  3:06 ` [OE-core] [PATCH v3 1/2] shadow: update 4.13 -> 4.14.2 ChenQi
2024-01-19 10:12   ` Alexander Kanavin
2024-01-19 10:24     ` Richard Purdie
2024-01-19 10:44       ` Alexander Kanavin
2024-01-19 12:13     ` Chen, Qi
2024-01-19 12:24       ` Alexander Kanavin
2024-02-08 10:40         ` Vyacheslav Yurkov
2024-02-08 10:45           ` Alexander Kanavin
2024-02-08 10:52             ` Vyacheslav Yurkov
     [not found]             ` <17B1DDC9333F50F1.20876@lists.openembedded.org>
2024-02-08 12:11               ` Vyacheslav Yurkov [this message]
2024-02-08 12:16                 ` Richard Purdie
2024-02-08 13:09                   ` Vyacheslav Yurkov
2024-02-08 13:27                     ` Richard Purdie
2024-02-08 18:57                       ` Alexander Kanavin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9c50fcac-5993-4293-a794-422fe8ec5e5c@gmail.com \
    --to=uvv.mail@gmail.com \
    --cc=Qi.Chen@windriver.com \
    --cc=alex.kanavin@gmail.com \
    --cc=alex@linutronix.de \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox