]> git.baikalelectronics.ru Git - kernel.git/commit
jfs: Avoid field-overflowing memcpy()
authorKees Cook <keescook@chromium.org>
Mon, 21 Jun 2021 23:23:22 +0000 (16:23 -0700)
committerDave Kleikamp <dave.kleikamp@oracle.com>
Wed, 23 Jun 2021 14:21:52 +0000 (09:21 -0500)
commitc1738e4e2f57d2cc163fbfc79fd97a6c3ac50d52
treeb8ff7f89dd4370c2a3851c404b7f1a9d09dcb4a7
parente5d8d41d17fcd7b6a1e1c2219a99e5b3f4064cf4
jfs: Avoid field-overflowing memcpy()

In preparation for FORTIFY_SOURCE performing compile-time and run-time
field array bounds checking for memcpy(), memmove(), and memset(),
avoid intentionally writing across neighboring fields.

Introduce more unions to cover the full inline data section, so that the
entire 256 bytes can be addressed by memcpy() without thinking it is
crossing field boundaries. Additionally adjusts dir memcpy() to use
existing union names to get the same coverage.

diffoscope shows there are no binary differences before/after excepting
the name of the initcall, which is line number based:

$ diffoscope --exclude-directory-metadata yes before/fs after/fs
 --- before/fs
 +++ after/fs
 │   --- before/fs/jfs
 ├── +++ after/fs/jfs
 │ │   --- before/fs/jfs/super.o
 │ ├── +++ after/fs/jfs/super.o
 │ │ ├── readelf --wide --symbols {}
 │ │ │ @@ -2,15 +2,15 @@
 │ │ │  Symbol table '.symtab' contains 158 entries:
 │ │ │     Num:    Value          Size Type    Bind   Vis      Ndx Name
 ...
 │ │ │ -     5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    6 __initcall__kmod_jfs__319_1049_ini
 t_jfs_fs6
 │ │ │ +     5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    6 __initcall__kmod_jfs__319_1050_ini
 t_jfs_fs6
...

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
fs/jfs/jfs_dinode.h
fs/jfs/jfs_imap.c
fs/jfs/jfs_incore.h
fs/jfs/super.c