[PATCH v1] print the raw kernel version when using -Xraw
shankarapailoor
shankarapailoor at gmail.com
Tue Dec 11 01:12:32 UTC 2018
Wow i thought the commit messages were all on new lines. At least
that's what my editor showed. Super sorry!
On Mon, Dec 10, 2018 at 7:10 PM Dmitry V. Levin <ldv at altlinux.org> wrote:
>
> On Sun, Dec 09, 2018 at 07:44:02AM -0800, shankarapailoor wrote:
> > From 295a8bb4474ed0125e993537dbd2cde9518ae7b6 Mon Sep 17 00:00:00 2001
> > From: Shankara Pailoor <shankarapailoor at gmail.com>
> > Date: Sun, 9 Dec 2018 07:41:43 -0800
> > Subject: [PATCH v1] bpf: change kern_version field to properly handle -Xraw
> > and -Xverbose print_kernel_version.c: add function to print kernel version
> > defs.h: Likewise Makefile.am: Likewise tests/kern_version-Xabbrev.c: New test
> > tests/kern_version-Xraw.c: New test tests/kern_version-Xverbose.c: New test
> > tests/kernel_version.c: New test tests/pure_executables.list: Likewise
> > tests/gen_tests.in: Likewise tests/.gitignore: Likewise
>
> How do you read this? :)
>
> > ---
> > Makefile.am | 1 +
> > bpf.c | 7 +-
> > defs.h | 1 +
> > print_kernel_version.c | 51 ++++++++++++++
> > tests/.gitignore | 4 ++
> > tests/gen_tests.in | 4 ++
> > tests/kernel_version-Xabbrev.c | 1 +
> > tests/kernel_version-Xraw.c | 2 +
> > tests/kernel_version-Xverbose.c | 2 +
> > tests/kernel_version.c | 118 ++++++++++++++++++++++++++++++++
> > tests/pure_executables.list | 4 ++
> > 11 files changed, 190 insertions(+), 5 deletions(-)
> > create mode 100644 print_kernel_version.c
> > create mode 100644 tests/kernel_version-Xabbrev.c
> > create mode 100644 tests/kernel_version-Xraw.c
> > create mode 100644 tests/kernel_version-Xverbose.c
> > create mode 100644 tests/kernel_version.c
>
> .git/rebase-apply/patch:111: trailing whitespace.
> tprintf("KERNEL_VERSION(%lu, %lu, %lu)",
> .git/rebase-apply/patch:145: trailing whitespace.
> kernel_version-Xabbrev -a16 -Xabbrev -v -e trace=bpf
> error: 2 lines add whitespace errors.
>
> > diff --git a/Makefile.am b/Makefile.am
> > index cfcbe7c9..3e29f9a6 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -245,6 +245,7 @@ strace_SOURCES = \
> > prctl.c \
> > print_aio_sigset.c \
> > print_dev_t.c \
> > + print_kernel_version.c \
> > print_group_req.c \
> > print_fields.h \
> > print_ifindex.c \
>
> Please keep the list sorted.
>
> > diff --git a/bpf.c b/bpf.c
> > index e5dc4eeb..d8f39441 100644
> > --- a/bpf.c
> > +++ b/bpf.c
> > @@ -292,11 +292,8 @@ BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)
> > /* kern_version field was added in Linux commit v4.1-rc1~84^2~50. */
> > if (len <= offsetof(struct BPF_PROG_LOAD_struct, kern_version))
> > break;
> > - tprintf(", kern_version=KERNEL_VERSION(%u, %u, %u)",
> > - attr.kern_version >> 16,
> > - (attr.kern_version >> 8) & 0xFF,
> > - attr.kern_version & 0xFF);
> > -
> > + tprintf(", kern_version=");
> > + print_kernel_version(attr.kern_version);
>
> Please use tprints for printing formatless strings.
>
> > diff --git a/tests/.gitignore b/tests/.gitignore
> > index 58729054..3184532c 100644
> > --- a/tests/.gitignore
> > +++ b/tests/.gitignore
> > @@ -192,6 +192,10 @@ is_linux_mips_n64
> > kcmp
> > kcmp-y
> > kern_features
> > +kernel_version
> > +kernel_version-Xraw
> > +kernel_version-Xverbose
> > +kernel_version-Xabbrev
> > kexec_file_load
> > kexec_load
> > keyctl
>
> Please keep this list sorted.
>
> > diff --git a/tests/gen_tests.in b/tests/gen_tests.in
> > index 7374add8..1b97cdfa 100644
> > --- a/tests/gen_tests.in
> > +++ b/tests/gen_tests.in
> > @@ -181,6 +181,10 @@ ipc_shm-Xraw +ipc.sh -Xraw -a19
> > ipc_shm-Xverbose +ipc.sh -Xverbose -a36
> > kcmp -a22
> > kcmp-y -a22 -y -e trace=kcmp
> > +kernel_version -a16 -v -e trace=bpf
> > +kernel_version-Xraw -a16 -Xraw -v -e trace=bpf
> > +kernel_version-Xverbose -a16 -Xverbose -v -e trace=bpf
> > +kernel_version-Xabbrev -a16 -Xabbrev -v -e trace=bpf
> > kern_features -a16
> > kexec_file_load -s9
> > kexec_load -s9
>
> Likewise.
>
> > diff --git a/tests/pure_executables.list b/tests/pure_executables.list
> > index a4e9020a..2577597b 100755
> > --- a/tests/pure_executables.list
> > +++ b/tests/pure_executables.list
> > @@ -153,6 +153,10 @@ ipc_shm-Xverbose
> > kcmp
> > kcmp-y
> > kern_features
> > +kernel_version
> > +kernel_version-Xraw
> > +kernel_version-Xverbose
> > +kernel_version-Xabbrev
> > kexec_file_load
> > kexec_load
> > keyctl
>
> Likewise.
>
> > --- /dev/null
> > +++ b/tests/kernel_version.c
> > @@ -0,0 +1,118 @@
> > +/*
> > + * Check kernel_version decoding.
>
> It's kernel version, not kernel_version.
>
> > + *
> > + * Copyright (c) 2015-2017 Dmitry V. Levin <ldv at altlinux.org>
> > + * Copyright (c) 2015-2018 The strace developers.
>
> "The strace developers" includes me, so the first line is redundant,
> no need to drag it into new code.
>
> > + * All rights reserved.
> > + *
> > + * Redistribution and use in source and binary forms, with or without
> > + * modification, are permitted provided that the following conditions
> > + * are met:
> > + * 1. Redistributions of source code must retain the above copyright
> > + * notice, this list of conditions and the following disclaimer.
> > + * 2. Redistributions in binary form must reproduce the above copyright
> > + * notice, this list of conditions and the following disclaimer in the
> > + * documentation and/or other materials provided with the distribution.
> > + * 3. The name of the author may not be used to endorse or promote products
> > + * derived from this software without specific prior written permission.
> > + *
> > + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
> > + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> > + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
> > + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
> > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
> > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
> > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> > + */
> > +#include "tests.h"
>
> Please ad an empty line after the copyright header.
>
> > +
> > +#include <stddef.h>
> > +#include <stdio.h>
> > +#include <stdint.h>
> > +#include <string.h>
> > +#include <unistd.h>
> > +
> > +#include <asm/unistd.h>
> > +#include "scno.h"
> > +
> > +#ifdef HAVE_LINUX_BPF_H
> > +# include <linux/bpf.h>
> > +#endif
> > +
> > +#include "bpf_attr.h"
> > +#include "print_fields.h"
> > +
> > +#include "xlat.h"
> > +#include "xlat/bpf_commands.h"
> > +
> > +#define CMD_STR(x) #x
> > +static const char *errstr;
> > +
> > +static void
> > +print_bpf_attr()
>
> My compiler complains about this when -Wold-style-definition is used
> (this option is configured to be enabled by default when you use fresh
> gcc).
>
> $ echo 'void print_bpf_attr(){}' |gcc -Wold-style-definition -c -xc - -o/dev/null
> <stdin>: In function ‘print_bpf_attr’:
> <stdin>:1:6: warning: old-style function definition [-Wold-style-definition]
>
> > +{
> > +#if XLAT_RAW
> > + printf("{prog_type=0x15"
> > +#else
> > + printf("{prog_type=0x15 /* BPF_PROG_TYPE_??? */"
> > +#endif
> > + ", insn_cnt=3134983661"
> > + ", insns=NULL"
> > + ", license=NULL"
> > + ", log_level=24"
> > + ", log_size=3141592653"
> > + ", log_buf=NULL"
> > +#if XLAT_RAW
> > + ", kern_version=0xcafef00d"
> > +#elif XLAT_VERBOSE
> > + ", kern_version=0xcafef00d"
> > + " /* KERNEL_VERSION(51966, 240, 13) */"
> > +#else
> > + ", kern_version=KERNEL_VERSION(51966, 240, 13)"
> > +#endif
> > + ", prog_flags=0"
> > + ", prog_name=\"\""
> > + ", prog_ifindex=0"
> > + ", expected_attach_type="
> > +#if XLAT_RAW
> > + "0}"
> > +#elif XLAT_VERBOSE
> > + "0 /* BPF_CGROUP_INET_INGRESS */}"
> > +#else /* XLAT_ABBREV */
> > + "BPF_CGROUP_INET_INGRESS}"
> > +#endif
> > + );
> > +}
> > +
> > +int
> > +main(void)
> > +{
> > + long ret;
> > + struct BPF_PROG_LOAD_struct prog = {
> > + .prog_type = 21,
> > + .insn_cnt = 0xbadc0ded,
> > + .insns = 0,
> > + .license = 0,
> > + .log_level = 24,
> > + .log_size = 3141592653U,
> > + .log_buf = 0,
> > + .kern_version = 0xcafef00d,
> > + .prog_flags = 0,
> > + };
> > + ret = syscall(__NR_bpf, BPF_PROG_LOAD, &prog, sizeof(prog));
> > + errstr = sprintrc(ret);
> > +#if XLAT_RAW
> > + printf("bpf(%#x, ", BPF_PROG_LOAD);
> > +#elif XLAT_VERBOSE
> > + printf("bpf(%#x /* %s */, ", BPF_PROG_LOAD, CMD_STR(BPF_PROG_LOAD));
> > +#else
> > + printf("bpf(%s, ", CMD_STR(BPF_PROG_LOAD));
> > +#endif
> > + print_bpf_attr();
> > + printf(", %lu) = %s\n", sizeof(prog), errstr);
>
> On 32-bit architectures this leads to
>
> tests/kernel_version.c:115:14: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'unsigned int' [-Wformat=]
>
> I think you can safely assume that unsigned int is enough for sizeof(prog).
>
>
> --
> ldv
> --
> Strace-devel mailing list
> Strace-devel at lists.strace.io
> https://lists.strace.io/mailman/listinfo/strace-devel
--
Regards,
Shankara Pailoor
More information about the Strace-devel
mailing list