[SCM] Samba Shared Repository - branch master updated

Ralph Böhme slow at samba.org
Fri Oct 14 13:39:01 UTC 2022


The branch, master has been updated
       via  7e0e3f47cd6 s4/lib/registry: Fix use after free with popt 1.19
       via  4b15d8c2a5c s3/utils: Fix use after free with popt 1.19
       via  e82699fcca3 s3/utils: Fix use after free with popt 1.19
       via  31d3d10b260 s3/utils: Add missing poptFreeContext
       via  ff003fc87b8 s3/param: Fix use after free with popt-1.19
       via  d26d3d9bff6 s3/rpcclient: Duplicate string returned from poptGetArg
      from  266bcedc18e s4:messaging: let imessaging_client_init() use imessaging_init_discard_incoming()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7e0e3f47cd67e4cadc101691cd14837f45d9506a
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 11:53:53 2022 +0100

    s4/lib/registry: Fix use after free with popt 1.19
    
    popt1.19 fixes a leak that exposes a use as free,
    make sure we duplicate return of poptGetArg if
    poptFreeContext is called before we use it.
    
    ==6357== Command: ./bin/regpatch file
    ==6357==
    Can't load /home/npower/samba-back/INSTALL_DIR/etc/smb.conf - run testparm to debug it
    ==6357== Syscall param openat(filename) points to unaddressable byte(s)
    ==6357==    at 0x4BFE535: open (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4861432: reg_diff_load (patchfile.c:345)
    ==6357==    by 0x4861CD3: reg_diff_apply (patchfile.c:542)
    ==6357==    by 0x10ADF9: main (regpatch.c:114)
    ==6357==  Address 0x70f79d0 is 0 bytes inside a block of size 5 free'd
    ==6357==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF38B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x4AF45D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ADCF: main (regpatch.c:111)
    ==6357==  Block was alloc'd at
    ==6357==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF52EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ACBD: main (regpatch.c:79)
    ==6357==
    ==6357== Invalid read of size 1
    ==6357==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4B5D50F: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B7E719: __vasprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4AD32F0: __dbgtext_va (debug.c:1904)
    ==6357==    by 0x4AD33F2: dbgtext (debug.c:1925)
    ==6357==    by 0x4861515: reg_diff_load (patchfile.c:353)
    ==6357==    by 0x4861CD3: reg_diff_apply (patchfile.c:542)
    ==6357==    by 0x10ADF9: main (regpatch.c:114)
    ==6357==  Address 0x70f79d0 is 0 bytes inside a block of size 5 free'd
    ==6357==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF38B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x4AF45D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ADCF: main (regpatch.c:111)
    ==6357==  Block was alloc'd at
    ==6357==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF52EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ACBD: main (regpatch.c:79)
    ==6357==
    ==6357== Invalid read of size 1
    ==6357==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4B5D50F: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B7E719: __vasprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4AD32F0: __dbgtext_va (debug.c:1904)
    ==6357==    by 0x4AD33F2: dbgtext (debug.c:1925)
    ==6357==    by 0x4861515: reg_diff_load (patchfile.c:353)
    ==6357==    by 0x4861CD3: reg_diff_apply (patchfile.c:542)
    ==6357==    by 0x10ADF9: main (regpatch.c:114)
    ==6357==  Address 0x70f79d1 is 1 bytes inside a block of size 5 free'd
    ==6357==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF38B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x4AF45D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ADCF: main (regpatch.c:111)
    ==6357==  Block was alloc'd at
    ==6357==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF52EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ACBD: main (regpatch.c:79)
    ==6357==
    ==6357== Invalid read of size 1
    ==6357==    at 0x4B83DD0: _IO_default_xsputn (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B5D39E: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B7E719: __vasprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4AD32F0: __dbgtext_va (debug.c:1904)
    ==6357==    by 0x4AD33F2: dbgtext (debug.c:1925)
    ==6357==    by 0x4861515: reg_diff_load (patchfile.c:353)
    ==6357==    by 0x4861CD3: reg_diff_apply (patchfile.c:542)
    ==6357==    by 0x10ADF9: main (regpatch.c:114)
    ==6357==  Address 0x70f79d0 is 0 bytes inside a block of size 5 free'd
    ==6357==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF38B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x4AF45D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ADCF: main (regpatch.c:111)
    ==6357==  Block was alloc'd at
    ==6357==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF52EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ACBD: main (regpatch.c:79)
    ==6357==
    ==6357== Invalid read of size 1
    ==6357==    at 0x4B83DDF: _IO_default_xsputn (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B5D39E: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4B7E719: __vasprintf_internal (in /usr/lib64/libc.so.6)
    ==6357==    by 0x4AD32F0: __dbgtext_va (debug.c:1904)
    ==6357==    by 0x4AD33F2: dbgtext (debug.c:1925)
    ==6357==    by 0x4861515: reg_diff_load (patchfile.c:353)
    ==6357==    by 0x4861CD3: reg_diff_apply (patchfile.c:542)
    ==6357==    by 0x10ADF9: main (regpatch.c:114)
    ==6357==  Address 0x70f79d2 is 2 bytes inside a block of size 5 free'd
    ==6357==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF38B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x4AF45D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ADCF: main (regpatch.c:111)
    ==6357==  Block was alloc'd at
    ==6357==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6357==    by 0x4AF52EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6357==    by 0x10ACBD: main (regpatch.c:79)
    ==6357==
    Error reading registry patch file `file'
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Ralph Böhme <slow at samba.org>
    Autobuild-Date(master): Fri Oct 14 13:38:55 UTC 2022 on sn-devel-184

commit 4b15d8c2a5c8547b84e7926fed9890b5676b8bc3
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 11:45:13 2022 +0100

    s3/utils: Fix use after free with popt 1.19
    
    popt1.19 fixes a leak that exposes a use as free,
    make sure we duplicate return of poptGetArg if
    poptFreeContext is called before we use it.
    
    ==6055== Command: ./bin/testparm /etc/samba/smb.conf
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4C1E50F: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1EB74: buffered_vfprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C119E9: fprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x10EBFA: main (testparm.c:862)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4C1E50F: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1EB74: buffered_vfprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C119E9: fprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x10EBFA: main (testparm.c:862)
    ==6055==  Address 0x72dab71 is 1 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4C44DD0: _IO_default_xsputn (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1E39E: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1EB74: buffered_vfprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C119E9: fprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x10EBFA: main (testparm.c:862)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4C44DDF: _IO_default_xsputn (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1E39E: __vfprintf_internal (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C1EB74: buffered_vfprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x4C119E9: fprintf (in /usr/lib64/libc.so.6)
    ==6055==    by 0x10EBFA: main (testparm.c:862)
    ==6055==  Address 0x72dab72 is 2 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    Load smb config files from /etc/samba/smb.conf
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927E1C: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x48B5D37: talloc_sub_basic (substitute.c:303)
    ==6055==    by 0x4889B98: lp_load_ex (loadparm.c:4004)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927E1C: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x48B5D37: talloc_sub_basic (substitute.c:303)
    ==6055==    by 0x4889B98: lp_load_ex (loadparm.c:4004)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab71 is 1 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 8
    ==6055==    at 0x484D3AE: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x48B5D37: talloc_sub_basic (substitute.c:303)
    ==6055==    by 0x4889B98: lp_load_ex (loadparm.c:4004)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 2
    ==6055==    at 0x484D400: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x48B5D37: talloc_sub_basic (substitute.c:303)
    ==6055==    by 0x4889B98: lp_load_ex (loadparm.c:4004)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab80 is 16 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x484D430: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x48B5D37: talloc_sub_basic (substitute.c:303)
    ==6055==    by 0x4889B98: lp_load_ex (loadparm.c:4004)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab82 is 18 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927E1C: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x4B5974B: add_to_file_list (loadparm.c:1023)
    ==6055==    by 0x4889BD4: lp_load_ex (loadparm.c:4011)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927E1C: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x4B5974B: add_to_file_list (loadparm.c:1023)
    ==6055==    by 0x4889BD4: lp_load_ex (loadparm.c:4011)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab71 is 1 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 8
    ==6055==    at 0x484D3AE: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x4B5974B: add_to_file_list (loadparm.c:1023)
    ==6055==    by 0x4889BD4: lp_load_ex (loadparm.c:4011)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab70 is 0 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 2
    ==6055==    at 0x484D400: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x4B5974B: add_to_file_list (loadparm.c:1023)
    ==6055==    by 0x4889BD4: lp_load_ex (loadparm.c:4011)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab80 is 16 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    ==6055== Invalid read of size 1
    ==6055==    at 0x484D430: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4927DC2: __talloc_strlendup (talloc.c:2457)
    ==6055==    by 0x4927E32: talloc_strdup (talloc.c:2470)
    ==6055==    by 0x4B5974B: add_to_file_list (loadparm.c:1023)
    ==6055==    by 0x4889BD4: lp_load_ex (loadparm.c:4011)
    ==6055==    by 0x488A29E: lp_load_with_registry_shares (loadparm.c:4237)
    ==6055==    by 0x10EC06: main (testparm.c:864)
    ==6055==  Address 0x72dab82 is 18 bytes inside a block of size 20 free'd
    ==6055==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB28B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x4BB35D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EBAC: main (testparm.c:854)
    ==6055==  Block was alloc'd at
    ==6055==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==6055==    by 0x4BB42EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==6055==    by 0x10EB2E: main (testparm.c:830)
    ==6055==
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit e82699fcca3716d9ed0450263fd83f948de8ffbe
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 11:35:51 2022 +0100

    s3/utils: Fix use after free with popt 1.19
    
    popt1.19 fixes a leak that exposes a use as free,
    make sure we duplicate return of poptGetArg if
    poptFreeContext is called before we use it.
    
    ==5914== Invalid read of size 1
    ==5914==    at 0x4FDF740: strlcpy (in /usr/lib64/libbsd.so.0.11.6)
    ==5914==    by 0x49E09A9: tdbsam_getsampwnam (pdb_tdb.c:583)
    ==5914==    by 0x49D94E5: pdb_getsampwnam (pdb_interface.c:340)
    ==5914==    by 0x10DED1: print_user_info (pdbedit.c:372)
    ==5914==    by 0x111413: main (pdbedit.c:1324)
    ==5914==  Address 0x73b6750 is 0 bytes inside a block of size 7 free'd
    ==5914==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5914==    by 0x4C508B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5914==    by 0x4C515D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5914==    by 0x1113E6: main (pdbedit.c:1323)
    ==5914==  Block was alloc'd at
    ==5914==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5914==    by 0x4C522EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5914==    by 0x110AE5: main (pdbedit.c:1137)
    ==5914==
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 31d3d10b260f05080ca0a3cf9434aa4704d60739
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 11:26:24 2022 +0100

    s3/utils: Add missing poptFreeContext
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit ff003fc87b8164610dfd6572347c05308c4b2fd7
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 11:23:37 2022 +0100

    s3/param: Fix use after free with popt-1.19
    
    popt1.19 fixes a leak that exposes a use as free,
    make sure we duplicate return of poptGetArg if
    poptFreeContext is called before we use it.
    
    ==5325== Invalid read of size 1
    ==5325==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859E1C: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x48C0D37: talloc_sub_basic (substitute.c:303)
    ==5325==    by 0x4894B98: lp_load_ex (loadparm.c:4004)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b0 is 0 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 1
    ==5325==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859E1C: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x48C0D37: talloc_sub_basic (substitute.c:303)
    ==5325==    by 0x4894B98: lp_load_ex (loadparm.c:4004)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b1 is 1 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 8
    ==5325==    at 0x484D3AE: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x48C0D37: talloc_sub_basic (substitute.c:303)
    ==5325==    by 0x4894B98: lp_load_ex (loadparm.c:4004)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b0 is 0 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 2
    ==5325==    at 0x484D400: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x48C0D37: talloc_sub_basic (substitute.c:303)
    ==5325==    by 0x4894B98: lp_load_ex (loadparm.c:4004)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8c0 is 16 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 1
    ==5325==    at 0x484D430: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x48C0D37: talloc_sub_basic (substitute.c:303)
    ==5325==    by 0x4894B98: lp_load_ex (loadparm.c:4004)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8c2 is 18 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 1
    ==5325==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859E1C: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x4B3B74B: add_to_file_list (loadparm.c:1023)
    ==5325==    by 0x4894BD4: lp_load_ex (loadparm.c:4011)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b0 is 0 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 1
    ==5325==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859E1C: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x4B3B74B: add_to_file_list (loadparm.c:1023)
    ==5325==    by 0x4894BD4: lp_load_ex (loadparm.c:4011)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b1 is 1 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 8
    ==5325==    at 0x484D3AE: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x4B3B74B: add_to_file_list (loadparm.c:1023)
    ==5325==    by 0x4894BD4: lp_load_ex (loadparm.c:4011)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8b0 is 0 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 2
    ==5325==    at 0x484D400: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x4B3B74B: add_to_file_list (loadparm.c:1023)
    ==5325==    by 0x4894BD4: lp_load_ex (loadparm.c:4011)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8c0 is 16 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    ==5325== Invalid read of size 1
    ==5325==    at 0x484D430: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4859DC2: __talloc_strlendup (talloc.c:2457)
    ==5325==    by 0x4859E32: talloc_strdup (talloc.c:2470)
    ==5325==    by 0x4B3B74B: add_to_file_list (loadparm.c:1023)
    ==5325==    by 0x4894BD4: lp_load_ex (loadparm.c:4011)
    ==5325==    by 0x489529E: lp_load_with_registry_shares (loadparm.c:4237)
    ==5325==    by 0x10ABD7: main (test_lp_load.c:98)
    ==5325==  Address 0x72da8c2 is 18 bytes inside a block of size 20 free'd
    ==5325==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B8F8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x4B905D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB8E: main (test_lp_load.c:90)
    ==5325==  Block was alloc'd at
    ==5325==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==5325==    by 0x4B912EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==5325==    by 0x10AB49: main (test_lp_load.c:74)
    ==5325==
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit d26d3d9bff61f796c9c9ab54990ea078f575ab1e
Author: Noel Power <noel.power at suse.com>
Date:   Fri Oct 14 10:03:17 2022 +0100

    s3/rpcclient: Duplicate string returned from poptGetArg
    
    popt1.19 fixes a leak that exposes a use as free,
    make sure we duplicate return of poptGetArg if
    poptFreeContext is called before we use it.
    
    ==4407== Invalid read of size 1
    ==4407==    at 0x146263: main (rpcclient.c:1262)
    ==4407==  Address 0x7b67cd0 is 0 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    ==4407==
    ==4407== Invalid read of size 1
    ==4407==    at 0x14627D: main (rpcclient.c:1263)
    ==4407==  Address 0x7b67cd0 is 0 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    ==4407==
    ==4407== Invalid read of size 1
    ==4407==    at 0x4849782: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x4980E1C: talloc_strdup (talloc.c:2470)
    ==4407==    by 0x488CD96: dcerpc_parse_binding (binding.c:320)
    ==4407==    by 0x1462B1: main (rpcclient.c:1267)
    ==4407==  Address 0x7b67cd0 is 0 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    ==4407==
    ==4407== Invalid read of size 1
    ==4407==    at 0x4849794: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x4980E1C: talloc_strdup (talloc.c:2470)
    ==4407==    by 0x488CD96: dcerpc_parse_binding (binding.c:320)
    ==4407==    by 0x1462B1: main (rpcclient.c:1267)
    ==4407==  Address 0x7b67cd1 is 1 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    ==4407==
    ==4407== Invalid read of size 8
    ==4407==    at 0x484D3AE: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x4980DC2: __talloc_strlendup (talloc.c:2457)
    ==4407==    by 0x4980E32: talloc_strdup (talloc.c:2470)
    ==4407==    by 0x488CD96: dcerpc_parse_binding (binding.c:320)
    ==4407==    by 0x1462B1: main (rpcclient.c:1267)
    ==4407==  Address 0x7b67cd0 is 0 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    ==4407==
    ==4407== Invalid read of size 1
    ==4407==    at 0x484D430: memmove (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x4980DC2: __talloc_strlendup (talloc.c:2457)
    ==4407==    by 0x4980E32: talloc_strdup (talloc.c:2470)
    ==4407==    by 0x488CD96: dcerpc_parse_binding (binding.c:320)
    ==4407==    by 0x1462B1: main (rpcclient.c:1267)
    ==4407==  Address 0x7b67cd8 is 8 bytes inside a block of size 10 free'd
    ==4407==    at 0x484617B: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B2E8B8: poptResetContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x5B2F5D4: poptFreeContext (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x146227: main (rpcclient.c:1251)
    ==4407==  Block was alloc'd at
    ==4407==    at 0x48437B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==4407==    by 0x5B302EE: poptGetNextOpt (in /usr/lib64/libpopt.so.0.0.2)
    ==4407==    by 0x1461BC: main (rpcclient.c:1219)
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15205
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/param/test_lp_load.c          | 2 +-
 source3/rpcclient/rpcclient.c         | 2 +-
 source3/utils/mdsearch.c              | 1 +
 source3/utils/pdbedit.c               | 2 +-
 source3/utils/testparm.c              | 6 +++---
 source4/lib/registry/tools/regpatch.c | 2 +-
 6 files changed, 8 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/param/test_lp_load.c b/source3/param/test_lp_load.c
index 2c6a5c8891b..03be4118efd 100644
--- a/source3/param/test_lp_load.c
+++ b/source3/param/test_lp_load.c
@@ -82,7 +82,7 @@ int main(int argc, const char **argv)
 	}
 
 	if (poptPeekArg(pc)) {
-		config_file = poptGetArg(pc);
+		config_file = talloc_strdup(frame, poptGetArg(pc));
 	} else {
 		config_file = get_dyn_CONFIGFILE();
 	}
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c
index 4042d0d60be..27fe5d705c6 100644
--- a/source3/rpcclient/rpcclient.c
+++ b/source3/rpcclient/rpcclient.c
@@ -1238,7 +1238,7 @@ out_free:
 	/* Get server as remaining unparsed argument.  Print usage if more
 	   than one unparsed argument is present. */
 
-	server = poptGetArg(pc);
+	server = talloc_strdup(frame, poptGetArg(pc));
 
 	if (!server || poptGetArg(pc)) {
 		poptPrintHelp(pc, stderr, 0);
diff --git a/source3/utils/mdsearch.c b/source3/utils/mdsearch.c
index ac0b75fca51..ab48e366a0a 100644
--- a/source3/utils/mdsearch.c
+++ b/source3/utils/mdsearch.c
@@ -242,6 +242,7 @@ int main(int argc, char **argv)
 	return 0;
 
 fail:
+	poptFreeContext(pc);
 	TALLOC_FREE(frame);
 	return 1;
 }
diff --git a/source3/utils/pdbedit.c b/source3/utils/pdbedit.c
index 4fdcc3ee428..eb4f3072df8 100644
--- a/source3/utils/pdbedit.c
+++ b/source3/utils/pdbedit.c
@@ -1150,7 +1150,7 @@ int main(int argc, const char **argv)
 	poptGetArg(pc); /* Drop argv[0], the program name */
 
 	if (user_name == NULL)
-		user_name = poptGetArg(pc);
+		user_name = talloc_strdup(frame, poptGetArg(pc));
 
 	setparms =	(backend ? BIT_BACKEND : 0) +
 			(verbose ? BIT_VERBOSE : 0) +
diff --git a/source3/utils/testparm.c b/source3/utils/testparm.c
index 9555b436260..c751c06dcc9 100644
--- a/source3/utils/testparm.c
+++ b/source3/utils/testparm.c
@@ -843,13 +843,13 @@ static void do_per_share_checks(int s)
 	}
 
 	if (poptPeekArg(pc)) {
-		config_file = poptGetArg(pc);
+		config_file = talloc_strdup(frame, poptGetArg(pc));
 	} else {
 		config_file = get_dyn_CONFIGFILE();
 	}
 
-	cname = poptGetArg(pc);
-	caddr = poptGetArg(pc);
+	cname = talloc_strdup(frame, poptGetArg(pc));
+	caddr = talloc_strdup(frame, poptGetArg(pc));
 
 	poptFreeContext(pc);
 
diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c
index 2be78d143ef..eafaff6cf99 100644
--- a/source4/lib/registry/tools/regpatch.c
+++ b/source4/lib/registry/tools/regpatch.c
@@ -101,7 +101,7 @@ int main(int argc, char **argv)
 		return 1;
 	}
 
-	patch = poptGetArg(pc);
+	patch = talloc_strdup(mem_ctx, poptGetArg(pc));
 	if (patch == NULL) {
 		poptPrintUsage(pc, stderr, 0);
 		TALLOC_FREE(mem_ctx);


-- 
Samba Shared Repository



More information about the samba-cvs mailing list