All of lore.kernel.org
 help / color / mirror / Atom feed
* [cocci] coccinelle is skipping include files?
@ 2022-10-19 23:36 Kees Cook
  2022-10-20  4:43 ` Julia Lawall
  0 siblings, 1 reply; 5+ messages in thread
From: Kees Cook @ 2022-10-19 23:36 UTC (permalink / raw)
  To: Julia Lawall; +Cc: cocci, Darrick J. Wong

Hi!

I'm once against stumped by include file handling. Here's my .cocci
file:

// match memcpy() which has a flexible array struct as the destination
@memcpy_fas_dest@
identifier FAS;
struct FAS *PTR;
expression SRC, SIZE;
@@

        memcpy(
                PTR
        , SRC, SIZE)

@fas@
identifier memcpy_fas_dest.FAS;
identifier flex;
type T;
@@

*        struct FAS {
                ...
(
                T flex[1];
|
                T flex[0];
|
                T flex[];
)
        };

// match memcpy() which has a flexible array struct as the destination
@memcpy_hit depends on fas@
identifier memcpy_fas_dest.FAS;
struct FAS *memcpy_fas_dest.PTR;
expression SRC, SIZE;
@@

  memcpy(
*       PTR
  , SRC, SIZE)


The example I'm looking at is fs/xfs/xfs_bmap_item.c, which starts with:
#include "xfs.h"
#include "xfs_fs.h"
#include "xfs_format.h"
#include "xfs_log_format.h"
...


Here it is working, if I explicitly as for "xfs_log_format.h" to be
included:

$ ARGS="--very-quiet \
	-I ./arch/x86/include \
	-I ./arch/x86/include/generated \
	-I ./include \
	-I ./arch/x86/include/uapi \
	-I ./arch/x86/include/generated/uapi \
	-I ./include/uapi \
	-I ./include/generated/uapi \
	--include ./include/linux/compiler-version.h \
	--include ./include/linux/kconfig.h \
	--jobs 36 --chunksize 1"
$ spatch $ARGS --all-includes --cocci-file t.cocci \
	--include fs/xfs/libxfs/xfs_log_format.h \
	fs/xfs/xfs_bmap_item.c
--- fs/xfs/xfs_bmap_item.c
+++ /tmp/cocci-output-742963-d11c3c-xfs_bmap_item.c
@@ -625,7 +625,6 @@ xfs_bui_copy_format(
        len = xfs_bui_log_format_sizeof(src_bui_fmt->bui_nextents);
 
        if (buf->i_len == len) {
-               memcpy(dst_bui_fmt, src_bui_fmt, len);
                return 0;
        }
        XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL);


But if I don't explicitly ask it to process
"fs/xfs/libxfs/xfs_log_format.h", it doesn't match,
no matter what "includes" option I try:

$ spatch $ARGS --all-includes --cocci-file t.cocci \
	fs/xfs/xfs_bmap_item.c
$ spatch $ARGS -recusrive-includes --cocci-file t.cocci \
	fs/xfs/xfs_bmap_item.c

Weirder yet, it doesn't seem to even _try_ to include the right headers.

$ strace -f -e openat \
	spatch $ARGS --all-includes --cocci-file t.cocci \
	fs/xfs/xfs_bmap_item.c \
	2>&1 | grep '\.h"' | grep xfs
openat(AT_FDCWD, "fs/xfs/xfs.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_mount.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_inode.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_trans.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_trans_priv.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_bmap_item.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_log.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_icache.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_error.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_log_priv.h", O_RDONLY|O_CLOEXEC) = 4

Using --recursive-includes open a massive amount of headers, but still
not fs/xfs/libxfs/xfs_log_format.h:

$ strace -f -e openat \
	spatch $ARGS --recursive-includes --cocci-file t.cocci \
	fs/xfs/xfs_bmap_item.c \
	2>&1 | grep '\.h"' | grep xfs
openat(AT_FDCWD, "fs/xfs/xfs.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_linux.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/kmem.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "./include/uapi/linux/dqblk_xfs.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/mrlock.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_stats.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_sysctl.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_iops.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_aops.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_super.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_buf.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_message.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_mount.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_inode.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_trans.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_trans_priv.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_bmap_item.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_log.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_icache.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_error.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_log_priv.h", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "fs/xfs/xfs_message.h", O_RDONLY|O_CLOEXEC) = 4

Any idea what is going on here?

Thanks!

-Kees

-- 
Kees Cook

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-10-24 19:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-19 23:36 [cocci] coccinelle is skipping include files? Kees Cook
2022-10-20  4:43 ` Julia Lawall
2022-10-20  5:18   ` Kees Cook
2022-10-20  5:23     ` Julia Lawall
2022-10-24 16:53       ` Kees Cook

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.