[OE-core] [PATCH] perl: Fix setgroup call regression from 5.30

Richard Purdie richard.purdie at linuxfoundation.org
Fri Jun 14 21:47:58 UTC 2019


The upgrade from 5.28 to 5.30 caused acl's ptests to fail. The issue is
that the new function changes the endptr to the end of the scanned number
and this now needs to be reset to the end of the string for each iteration
of the loop.

[YOCTO #13391]

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 .../perl-sanity/files/fix-setgroup.patch      | 49 +++++++++++++++++++
 .../perl-sanity/perl_5.30.0.bb                |  1 +
 2 files changed, 50 insertions(+)
 create mode 100644 meta/recipes-devtools/perl-sanity/files/fix-setgroup.patch

diff --git a/meta/recipes-devtools/perl-sanity/files/fix-setgroup.patch b/meta/recipes-devtools/perl-sanity/files/fix-setgroup.patch
new file mode 100644
index 00000000000..2b490e60676
--- /dev/null
+++ b/meta/recipes-devtools/perl-sanity/files/fix-setgroup.patch
@@ -0,0 +1,49 @@
+Test script to reproduce the problem:
+
+#!/usr/bin/env perl
+$) = "2 2";
+print $!;
+
+Result from perl 5.28 under strace:
+
+setgroups(1, [2])                       = 0
+setresgid(-1, 2, -1)                    = 0
+
+Result from perl 5.30 under strace:
+
+setgroups(1, [-1])                      = -1 EINVAL (Invalid argument)
+setresgid(-1, 2, -1)                    = 0
+
+Patch which broke this upstream:
+https://perl5.git.perl.org/perl.git/commitdiff/5d4a52b5c68a11bfc97c2e24806993b84a61eade
+
+Issue is that the new function changes the endptr to the end of the
+scanned number and needs to be reset to the end of the string for 
+each iteration of the loop.
+
+[YOCTO #13391]
+
+RP
+2019/6/14
+Upstream-Status: Pending
+
+Index: perl-5.30.0/mg.c
+===================================================================
+--- perl-5.30.0.orig/mg.c
++++ perl-5.30.0/mg.c
+@@ -3179,6 +3256,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
+ 	    const char *p = SvPV_const(sv, len);
+             Groups_t *gary = NULL;
+             const char* endptr = p + len;
++            const char* realend = p + len;
+             UV uv;
+ #ifdef _SC_NGROUPS_MAX
+            int maxgrp = sysconf(_SC_NGROUPS_MAX);
+@@ -3209,6 +3287,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
+                     Newx(gary, i + 1, Groups_t);
+                 else
+                     Renew(gary, i + 1, Groups_t);
++                endptr = realend;
+                 if (grok_atoUV(p, &uv, &endptr))
+                     gary[i] = (Groups_t)uv;
+                 else {
diff --git a/meta/recipes-devtools/perl-sanity/perl_5.30.0.bb b/meta/recipes-devtools/perl-sanity/perl_5.30.0.bb
index 90a8a035ce6..b18a6b69131 100644
--- a/meta/recipes-devtools/perl-sanity/perl_5.30.0.bb
+++ b/meta/recipes-devtools/perl-sanity/perl_5.30.0.bb
@@ -18,6 +18,7 @@ SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
            file://0001-perl-cross-add-LDFLAGS-when-linking-libperl.patch \
            file://perl-dynloader.patch \
            file://0001-configure_path.sh-do-not-hardcode-prefix-lib-as-libr.patch \
+           file://fix-setgroup.patch \
            "
 SRC_URI_append_class-native = " \
            file://perl-configpm-switch.patch \
-- 
2.20.1



More information about the Openembedded-core mailing list