Skip to content

Commit

Permalink
bpf, samples: don't zero data when not needed
Browse files Browse the repository at this point in the history
Remove the zero initialization in the sample programs where appropriate.
Note that this is an optimization which is now possible, old programs
still doing the zero initialization are just fine as well. Also, make
sure we don't have padding issues when we don't memset() the entire
struct anymore.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
borkmann authored and davem330 committed Apr 15, 2016
1 parent 074f528 commit 02413ca
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 12 deletions.
10 changes: 6 additions & 4 deletions samples/bpf/offwaketime_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include <linux/version.h>
#include <linux/sched.h>

#define _(P) ({typeof(P) val = 0; bpf_probe_read(&val, sizeof(val), &P); val;})
#define _(P) ({typeof(P) val; bpf_probe_read(&val, sizeof(val), &P); val;})

#define MINBLOCK_US 1

Expand Down Expand Up @@ -61,7 +61,7 @@ SEC("kprobe/try_to_wake_up")
int waker(struct pt_regs *ctx)
{
struct task_struct *p = (void *) PT_REGS_PARM1(ctx);
struct wokeby_t woke = {};
struct wokeby_t woke;
u32 pid;

pid = _(p->pid);
Expand All @@ -75,17 +75,19 @@ int waker(struct pt_regs *ctx)

static inline int update_counts(void *ctx, u32 pid, u64 delta)
{
struct key_t key = {};
struct wokeby_t *woke;
u64 zero = 0, *val;
struct key_t key;

__builtin_memset(&key.waker, 0, sizeof(key.waker));
bpf_get_current_comm(&key.target, sizeof(key.target));
key.tret = bpf_get_stackid(ctx, &stackmap, STACKID_FLAGS);
key.wret = 0;

woke = bpf_map_lookup_elem(&wokeby, &pid);
if (woke) {
key.wret = woke->ret;
__builtin_memcpy(&key.waker, woke->name, TASK_COMM_LEN);
__builtin_memcpy(&key.waker, woke->name, sizeof(key.waker));
bpf_map_delete_elem(&wokeby, &pid);
}

Expand Down
4 changes: 1 addition & 3 deletions samples/bpf/tracex1_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,14 @@ int bpf_prog1(struct pt_regs *ctx)
/* attaches to kprobe netif_receive_skb,
* looks for packets on loobpack device and prints them
*/
char devname[IFNAMSIZ] = {};
char devname[IFNAMSIZ];
struct net_device *dev;
struct sk_buff *skb;
int len;

/* non-portable! works for the given kernel only */
skb = (struct sk_buff *) PT_REGS_PARM1(ctx);

dev = _(skb->dev);

len = _(skb->len);

bpf_probe_read(devname, sizeof(devname), dev->name);
Expand Down
4 changes: 2 additions & 2 deletions samples/bpf/tracex2_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ struct hist_key {
char comm[16];
u64 pid_tgid;
u64 uid_gid;
u32 index;
u64 index;
};

struct bpf_map_def SEC("maps") my_hist_map = {
Expand All @@ -82,7 +82,7 @@ int bpf_prog3(struct pt_regs *ctx)
long write_size = PT_REGS_PARM3(ctx);
long init_val = 1;
long *value;
struct hist_key key = {};
struct hist_key key;

key.index = log2l(write_size);
key.pid_tgid = bpf_get_current_pid_tgid();
Expand Down
6 changes: 3 additions & 3 deletions samples/bpf/tracex5_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct bpf_map_def SEC("maps") progs = {
SEC("kprobe/seccomp_phase1")
int bpf_prog1(struct pt_regs *ctx)
{
struct seccomp_data sd = {};
struct seccomp_data sd;

bpf_probe_read(&sd, sizeof(sd), (void *)PT_REGS_PARM1(ctx));

Expand All @@ -40,7 +40,7 @@ int bpf_prog1(struct pt_regs *ctx)
/* we jump here when syscall number == __NR_write */
PROG(__NR_write)(struct pt_regs *ctx)
{
struct seccomp_data sd = {};
struct seccomp_data sd;

bpf_probe_read(&sd, sizeof(sd), (void *)PT_REGS_PARM1(ctx));
if (sd.args[2] == 512) {
Expand All @@ -53,7 +53,7 @@ PROG(__NR_write)(struct pt_regs *ctx)

PROG(__NR_read)(struct pt_regs *ctx)
{
struct seccomp_data sd = {};
struct seccomp_data sd;

bpf_probe_read(&sd, sizeof(sd), (void *)PT_REGS_PARM1(ctx));
if (sd.args[2] > 128 && sd.args[2] <= 1024) {
Expand Down

0 comments on commit 02413ca

Please sign in to comment.