Just a friendly reminder.

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to cups in Ubuntu.
https://bugs.launchpad.net/bugs/2099701

Title:
  SEGV in _ppdCacheAssignPresets

Status in cups package in Ubuntu:
  New

Bug description:
  Using custom fuzzing target, I found a bug in ppd-cache.c file in
  function _ppdCacheAssignPresets(). Trying to call function strstr by
  passing in ppd->nickname variable, which can be NULL, causes SEGV.

  Here is the stacktrace with ASAN sanitizer:

  ==1625051==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 
(pc 0x7ffff72cf1fd bp 0x00005561e601 sp 0x7fffffffd7c8 T0)
  ==1625051==The signal is caused by a READ memory access.
  ==1625051==Hint: address points to the zero page.
      #0 0x7ffff72cf1fd in __strstr_sse2_unaligned 
string/../sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S:41
      #1 0x555555672d93 in strstr 
(/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/fuzz_ppd+0x11ed93) (BuildId: 
af495084ca6afd81da9be6a9b9e35476c8cf80b0)
      #2 0x5555559fdfdf in _ppdCacheAssignPresets 
/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/cups/ppd-cache.c:2273:11
      #3 0x5555559f1040 in _ppdCacheCreateWithPPD 
/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/cups/ppd-cache.c:1789:5
      #4 0x55555573d0ff in fuzz_ppd 
/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/fuzz_ppd.c:167:8
      #5 0x55555573b1d5 in LLVMFuzzerTestOneInput 
/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/fuzz_ppd.c:25:3
      #6 0x555555b03619 in ExecuteFilesOnyByOne 
/home/as/Utils/AFLplusplus/utils/aflpp_driver/aflpp_driver.c:256:7
      #7 0x555555b03409 in LLVMFuzzerRunDriver 
/home/as/Utils/AFLplusplus/utils/aflpp_driver/aflpp_driver.c
      #8 0x555555b02f5b in main 
/home/as/Utils/AFLplusplus/utils/aflpp_driver/aflpp_driver.c:312:10
      #9 0x7ffff7246249 in __libc_start_call_main 
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
      #10 0x7ffff7246304 in __libc_start_main csu/../csu/libc-start.c:360:3
      #11 0x555555659050 in _start 
(/home/as/kfurman/fuzzing/cups/cups-ubuntu-test/fuzz_ppd+0x105050) (BuildId: 
af495084ca6afd81da9be6a9b9e35476c8cf80b0)

  ==1625051==Register values:
  rax = 0x0000000000000000  rbx = 0x000055555561e640  rcx = 0x000000000000b32c  
rdx = 0x000000000000006f  
  rdi = 0x0000000000000000  rsi = 0x000055555561e640  rbp = 0x000000005561e601  
rsp = 0x00007fffffffd7c8  
   r8 = 0x0000000000000001   r9 = 0x0000555555b134e0  r10 = 0x00000aaaaab6269c  
r11 = 0x00000000000088ba  
  r12 = 0x0000516000000441  r13 = 0x00000000ffffffff  r14 = 0x0000000000000000  
r15 = 0x000010007ea18200  
  AddressSanitizer can not provide additional info.
  SUMMARY: AddressSanitizer: SEGV 
string/../sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S:41 in 
__strstr_sse2_unaligned
  ==1625051==ABORTING

  This part of code comes from 9100-ppd-cache-add-auto-presets.patch.
  Possible workaround - add a check for NULL ppd->nickname variable before 
calling the strstr() function.

  Here is diff, which fixing this bug:

  diff --git a/debian/patches/9100-ppd-cache-add-auto-presets.patch 
b/debian/patches/9100-ppd-cache-add-auto-presets.patch
  index 6c150ffad..6ae0a0bd6 100644
  --- a/debian/patches/9100-ppd-cache-add-auto-presets.patch
  +++ b/debian/patches/9100-ppd-cache-add-auto-presets.patch
  @@ -427,7 +427,7 @@
   +       in our presets and set the member options to leave the
   +       control at the composite option */
   +
  -+      if (strstr(ppd->nickname, "Foomatic") &&
  ++      if (ppd->nickname && strstr(ppd->nickname, "Foomatic") &&
   +        !strncmp(option->choices[0].choice, "From", 4) &&
   +        ppdFindOption(ppd, option->choices[0].choice + 4))
   +      {

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/cups/+bug/2099701/+subscriptions


-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to