1. 22 Jan, 2025 4 commits
    • longpanda's avatar
      1.1.00 release · ff7ee9c1
      longpanda authored
      ff7ee9c1
    • Liangbin Lian's avatar
      loader/linux: Ensure the newc pathname is NULL-terminated (#3082) · f43461a1
      Liangbin Lian authored
      
      
      Per "man 5 cpio", the namesize in the cpio header includes the trailing
      NUL byte of the pathname and the pathname is followed by NUL bytes, but
      the current implementation ignores the trailing NUL byte when making
      the newc header. Although make_header() tries to pad the pathname string,
      the padding won't happen when strlen(name) + sizeof(struct newc_head)
      is a multiple of 4, and the non-NULL-terminated pathname may lead to
      unexpected results.
      
      Assume that a file is created with 'echo -n aaaa > /boot/test12' and
      loaded by grub2:
      
          linux /boot/vmlinuz
          initrd newc:test12:/boot/test12 /boot/initrd
      
      The initrd command eventually invoked grub_initrd_load() and sent
      't''e''s''t''1''2' to make_header() to generate the header:
      
      00000070  30 37 30 37 30 31 33 30  31 43 41 30 44 45 30 30  |070701301CA0DE00|
      00000080  30 30 38 31 41 34 30 30  30 30 30 33 45 38 30 30  |0081A4000003E800|
      00000090  30 30 30 30 36 34 30 30  30 30 30 30 30 31 36 33  |0000640000000163|
      000000a0  37 36 45 34 35 32 30 30  30 30 30 30 30 34 30 30  |76E4520000000400|
      000000b0  30 30 30 30 30 38 30 30  30 30 30 30 31 33 30 30  |0000080000001300|
      000000c0  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30  |0000000000000000|
      000000d0  30 30 30 30 30 36 30 30  30 30 30 30 30 30 74 65  |00000600000000te|
                                                                        ^namesize
      000000e0  73 74 31 32 61 61 61 61  30 37 30 37 30 31 30 30  |st12aaaa07070100|
                         ^^ end of the pathname
      
      Since strlen("test12") + sizeof(struct newc_head) is 116 = 29 * 4,
      make_header() didn't pad the pathname, and the file content followed
      "test12" immediately. This violates the cpio format and may trigger such
      error during linux boot:
      
          Initramfs unpacking failed: ZSTD-compressed data is trunc
      
      To avoid the potential problems, this commit counts the trailing NUL byte
      in when calling make_header() and adjusts the initrd size accordingly.
      
      Now the header becomes
      
      00000070  30 37 30 37 30 31 33 30  31 43 41 30 44 45 30 30  |070701301CA0DE00|
      00000080  30 30 38 31 41 34 30 30  30 30 30 33 45 38 30 30  |0081A4000003E800|
      00000090  30 30 30 30 36 34 30 30  30 30 30 30 30 31 36 33  |0000640000000163|
      000000a0  37 36 45 34 35 32 30 30  30 30 30 30 30 34 30 30  |76E4520000000400|
      000000b0  30 30 30 30 30 38 30 30  30 30 30 30 31 33 30 30  |0000080000001300|
      000000c0  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30  |0000000000000000|
      000000d0  30 30 30 30 30 37 30 30  30 30 30 30 30 30 74 65  |00000700000000te|
                                                                        ^namesize
      000000e0  73 74 31 32 00 00 00 00  61 61 61 61 30 37 30 37  |st12....aaaa0707|
                            ^^ end of the pathname
      
      Besides the trailing NUL byte, make_header() pads 3 more NUL bytes, and
      the user can safely read the pathname without a further check.
      
      To conform to the cpio format, the headers for "TRAILER!!!" are also
      adjusted to include the trailing NUL byte, not ignore it.
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
      Signed-off-by: default avatarGary Lin <glin@suse.com>
      Co-authored-by: default avatarGary Lin <glin@suse.com>
      f43461a1
    • longpanda's avatar
      377e3fb7
    • longpanda's avatar
      support eweOS ISO (#3068) · f62bd1be
      longpanda authored
      f62bd1be
  2. 16 Nov, 2024 3 commits
  3. 08 Jun, 2024 5 commits
  4. 25 May, 2024 1 commit
  5. 23 May, 2024 1 commit
  6. 22 May, 2024 1 commit
  7. 19 May, 2024 18 commits
  8. 14 May, 2024 1 commit
  9. 12 May, 2024 3 commits
  10. 06 Apr, 2024 2 commits
  11. 24 Jan, 2024 1 commit