[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