Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libpulp for openSUSE:Factory checked 
in at 2025-06-18 19:42:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libpulp (Old)
 and      /work/SRC/openSUSE:Factory/.libpulp.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libpulp"

Wed Jun 18 19:42:05 2025 rev:11 rq:1286733 version:0.3.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/libpulp/libpulp.changes  2025-04-30 
19:03:49.772943435 +0200
+++ /work/SRC/openSUSE:Factory/.libpulp.new.19631/libpulp.changes       
2025-06-18 19:42:06.591784620 +0200
@@ -1,0 +2,8 @@
+Wed Jun 18 13:57:40 UTC 2025 - Giuliano Belinassi <giuliano.belina...@suse.com>
+
+- Update package with libpulp-0.3.15:
+  - Fix race condition on ppc64le livepatching (bsc#1244263)
+  - Fix SIGABRT when non-valid JSON is given at input (bsc#1243923)
+  - Fix linking against libpthread on older versions of glibc for ppc64le.
+
+-------------------------------------------------------------------

Old:
----
  libpulp-0.3.14.tar.gz

New:
----
  libpulp-0.3.15.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libpulp.spec ++++++
--- /var/tmp/diff_new_pack.i8efXC/_old  2025-06-18 19:42:07.303814210 +0200
+++ /var/tmp/diff_new_pack.i8efXC/_new  2025-06-18 19:42:07.307814376 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           libpulp
-Version:        0.3.14
+Version:        0.3.15
 Release:        0
 Summary:        Userspace live patching library and tools
 License:        LGPL-2.1-or-later

++++++ libpulp-0.3.14.tar.gz -> libpulp-0.3.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/configure new/libpulp-0.3.15/configure
--- old/libpulp-0.3.14/configure        2025-04-30 17:33:53.000000000 +0200
+++ new/libpulp-0.3.15/configure        2025-06-18 15:49:29.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for libpulp 0.3.14.
+# Generated by GNU Autoconf 2.72 for libpulp 0.3.15.
 #
 # Report bugs to <nore...@suse.com>.
 #
@@ -614,8 +614,8 @@
 # Identity of this package.
 PACKAGE_NAME='libpulp'
 PACKAGE_TARNAME='libpulp'
-PACKAGE_VERSION='0.3.14'
-PACKAGE_STRING='libpulp 0.3.14'
+PACKAGE_VERSION='0.3.15'
+PACKAGE_STRING='libpulp 0.3.15'
 PACKAGE_BUGREPORT='nore...@suse.com'
 PACKAGE_URL=''
 
@@ -1421,7 +1421,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures libpulp 0.3.14 to adapt to many kinds of systems.
+'configure' configures libpulp 0.3.15 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1493,7 +1493,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libpulp 0.3.14:";;
+     short | recursive ) echo "Configuration of libpulp 0.3.15:";;
    esac
   cat <<\_ACEOF
 
@@ -1629,7 +1629,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libpulp configure 0.3.14
+libpulp configure 0.3.15
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -1980,7 +1980,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libpulp $as_me 0.3.14, which was
+It was created by libpulp $as_me 0.3.15, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3824,7 +3824,7 @@
 
 # Define the identity of the package.
  PACKAGE='libpulp'
- VERSION='0.3.14'
+ VERSION='0.3.15'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -20428,7 +20428,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libpulp $as_me 0.3.14, which was
+This file was extended by libpulp $as_me 0.3.15, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -20496,7 +20496,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libpulp config.status 0.3.14
+libpulp config.status 0.3.15
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/configure.ac 
new/libpulp-0.3.15/configure.ac
--- old/libpulp-0.3.14/configure.ac     2025-04-30 17:29:00.000000000 +0200
+++ new/libpulp-0.3.15/configure.ac     2025-06-18 15:48:30.000000000 +0200
@@ -17,7 +17,7 @@
 #   You should have received a copy of the GNU General Public License
 #   along with libpulp.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_INIT([libpulp],[0.3.14],[nore...@suse.com])
+AC_INIT([libpulp],[0.3.15],[nore...@suse.com])
 
 # Keep most generated files under the config directory.
 AC_CONFIG_AUX_DIR([config])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/lib/Makefile.am 
new/libpulp-0.3.15/lib/Makefile.am
--- old/libpulp-0.3.14/lib/Makefile.am  2025-01-30 21:56:54.000000000 +0100
+++ new/libpulp-0.3.15/lib/Makefile.am  2025-06-18 15:42:28.000000000 +0200
@@ -51,7 +51,8 @@
   arch/powerpc64le/patch.c
 
 libpulp_la_LDFLAGS += \
-  -l:ld64.so.2
+  -l:ld64.so.2 \
+  -lpthread
 endif
 
 libpulp_la_DEPENDENCIES= libpulp.versions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/lib/Makefile.in 
new/libpulp-0.3.15/lib/Makefile.in
--- old/libpulp-0.3.14/lib/Makefile.in  2025-04-30 17:33:54.000000000 +0200
+++ new/libpulp-0.3.15/lib/Makefile.in  2025-06-18 15:49:29.000000000 +0200
@@ -125,7 +125,8 @@
 @CPU_PPC64LE_TRUE@  arch/powerpc64le/patch.c
 
 @CPU_PPC64LE_TRUE@am__append_4 = \
-@CPU_PPC64LE_TRUE@  -l:ld64.so.2
+@CPU_PPC64LE_TRUE@  -l:ld64.so.2 \
+@CPU_PPC64LE_TRUE@  -lpthread
 
 subdir = lib
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/lib/arch/powerpc64le/patch.c 
new/libpulp-0.3.15/lib/arch/powerpc64le/patch.c
--- old/libpulp-0.3.14/lib/arch/powerpc64le/patch.c     2025-04-11 
19:16:32.000000000 +0200
+++ new/libpulp-0.3.15/lib/arch/powerpc64le/patch.c     2025-06-17 
01:15:51.000000000 +0200
@@ -49,6 +49,22 @@
 /** Size of the above object.  */
 extern unsigned int ulp_prologue_size;
 
+/** Global address of the new function address which is stored in the
+    prologue of the function, together with its code.  Should not be
+    accessed directly.  */
+extern unsigned long ulp_prologue_new_function_addr;
+
+/** Get the offset in which we store the new function address in the old
+    function's prologue.  */
+static unsigned long
+ulp_prologue_new_function_offset(void)
+{
+  return (unsigned char *) &ulp_prologue_new_function_addr - ulp_prologue;
+}
+
+#define ULP_PROLOGUE_NEW_FUNCTION_OFFSET(x)
+
+
 /** The NOP instruction.  */
 static const unsigned char gNop[] = { 0x00, 0x00, 0x00, 0x60 };
 
@@ -76,22 +92,16 @@
 {
   (void) len;
 
+  /* Assert that the prologue size don't overflow.  ulp_prologue_size is a
+     constant.  */
+  libpulp_crash_assert(ulp_prologue_size <= INSN_SIZE * PRE_NOPS_LEN);
+
   /* Create a copy of the prologue.  */
   unsigned char prolog[ulp_prologue_size];
   memcpy(prolog, prologue, sizeof(prolog));
 
-  unsigned char new_fentry_bytes[sizeof(void*)];
-  memcpy(new_fentry_bytes, &new_fentry, sizeof(new_fentry_bytes));
-
   /* Patch the code with the address of the function we want to be redirected. 
 */
-  prolog[32]  = new_fentry_bytes[6];
-  prolog[33]  = new_fentry_bytes[7];
-  prolog[36]  = new_fentry_bytes[4];
-  prolog[37]  = new_fentry_bytes[5];
-  prolog[40]  = new_fentry_bytes[2];
-  prolog[41]  = new_fentry_bytes[3];
-  prolog[44]  = new_fentry_bytes[0];
-  prolog[45]  = new_fentry_bytes[1];
+  memcpy(prolog + ulp_prologue_new_function_offset(), &new_fentry, sizeof(void 
*));
 
   /* Point to the prologue.  */
   char *fentry_prologue = old_fentry - INSN_SIZE * PRE_NOPS_LEN;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/lib/arch/powerpc64le/ulp_prologue.S 
new/libpulp-0.3.15/lib/arch/powerpc64le/ulp_prologue.S
--- old/libpulp-0.3.14/lib/arch/powerpc64le/ulp_prologue.S      2025-04-04 
17:17:07.000000000 +0200
+++ new/libpulp-0.3.15/lib/arch/powerpc64le/ulp_prologue.S      2025-06-17 
01:15:51.000000000 +0200
@@ -46,12 +46,17 @@
 trampoline_routine:
   .cfi_startproc
 
-  # Concatenate two registers from prologue.
-  rldimi %r6, %r5, 32, 0
+  # The address in LR is in the caller's prologue.  Move it to r6, so
+  # we can access the new function pointer stored in the prologue.
+  mflr  %r6
+  ld    %r6, (ulp_prologue_new_function_addr - .prologue_load_pc)(%r6)
 
   # Move the target function ptr to control register so we can free r6.
   mtctr %r6
 
+  # Reload LR which we saved on %r5
+  mtlr  %r5
+
   # Save all volatile registers
   # r5 & r6 are designated temp regs, having data already on stack.
   # After return from expand_ulp_stack, both regs construct values
@@ -259,11 +264,12 @@
   # Move to control register
   mtctr %r12
 
-  # Compute absolute address of target function 0x1122334455667788
-  lis   %r5,      0x1122
-  ori   %r5, %r5, 0x3344
-  lis   %r6,      0x5566
-  ori   %r6, %r6, 0x7788
+  # Save LR into R5, as getting the PC will clobber it.
+  mflr  %r5
+
+  # Load PC into LR
+  bl    .prologue_load_pc
+.prologue_load_pc:
 
   # Jump to trampoline_routine
   bctr
@@ -271,6 +277,15 @@
   # Execution is returned to the caller by the trampoline_routine, not here.
   # so no blr is necessary here.
 
+  # Variable holding the address of the new function.  Note that this prologue
+  # is copied to the target's function prologue, hence this must not be 
accessed
+  # directly.
+.global ulp_prologue_new_function_addr
+.type   ulp_prologue_new_function_addr, @object
+.size   ulp_prologue_new_function_addr, 8
+ulp_prologue_new_function_addr:
+  .zero 8
+
 ulp_prologue_end = .
        .long 0
        .byte 0,0,0,0,0,0,0,0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/tools/extract.c 
new/libpulp-0.3.15/tools/extract.c
--- old/libpulp-0.3.14/tools/extract.c  2024-06-17 15:49:26.000000000 +0200
+++ new/libpulp-0.3.15/tools/extract.c  2025-06-17 01:15:51.000000000 +0200
@@ -499,7 +499,11 @@
   int ret;
 
   json_object *root = json_object_from_file(path);
-  assert(root && "Unable to build root object.");
+
+  if (root == NULL) {
+    /* Unable to build root object, most likely not a JSON file.  */
+    return NULL;
+  }
 
   json_object *library = json_object_object_get(root, "library");
   if (!library) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libpulp-0.3.14/tools/packer.c 
new/libpulp-0.3.15/tools/packer.c
--- old/libpulp-0.3.14/tools/packer.c   2024-07-24 22:12:39.000000000 +0200
+++ new/libpulp-0.3.15/tools/packer.c   2025-06-17 01:15:51.000000000 +0200
@@ -616,6 +616,15 @@
   container_path = ulp->so_filename;
   container = ulp_so_info_open(container_path);
 
+  if (container == NULL) {
+    /* Failed to open it.  The file is probably not what we expected it to be,
+       or has missing pieces.  */
+    parse_error(loc,
+          "Unsupported container format. Check if it is a valid ELF or JSON.");
+    ret = 0;
+    goto dsc_clean;
+  }
+
   n = getline(&first, &len, parse_file);
   loc.line++;
   loc.col = 1;
@@ -691,6 +700,16 @@
       }
 
       target = ulp_so_info_open(target_path);
+
+      if (target == NULL) {
+        /* Failed to open it.  The file is probably not what we expected it to 
be,
+           or has missing pieces.  */
+        parse_error(loc,
+             "Unsupported target format. Check if it is a valid ELF or JSON.");
+        ret = 0;
+        goto dsc_clean;
+      }
+
       ulp->objs->name = strdup(target->name);
     }
     else {

Reply via email to