lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 21 May 2015 11:18:49 +0200
From:	Jesper Dangaard Brouer <brouer@...hat.com>
To:	Cong Wang <cwang@...pensource.com>
Cc:	netdev <netdev@...r.kernel.org>,
	Daniel Borkmann <borkmann@...earbox.net>,
	Alexei Starovoitov <ast@...mgrid.com>,
	Robert Olsson <robert@...julf.se>,
	Ben Greear <greearb@...delatech.com>, brouer@...hat.com
Subject: Re: [net-next PATCH 06/10] pktgen: new pktgen helper functions for
 samples scripts

On Wed, 20 May 2015 14:23:17 -0700
Cong Wang <cwang@...pensource.com> wrote:

> On Tue, May 19, 2015 at 2:36 PM, Jesper Dangaard Brouer
> <brouer@...hat.com> wrote:
> > +
> > +# More generic replacement for pgset(), that does not depend on global
> > +# variable for proc file.
> > +function proc_cmd() {
> > +    local result
> > +    local proc_file=$1
> > +    # after shift, the remaining args are contained in $@
> > +    shift
> > +    local proc_ctrl=${PROC_DIR}/$proc_file
> > +    if [[ ! -e "$proc_ctrl" ]]; then
> > +       err 3 "proc file:$proc_ctrl does not exists (dev added to thread?)"
> > +    else
> > +       if [[ ! -w "$proc_ctrl" ]]; then
> > +           err 4 "proc file:$proc_ctrl not writable, not root?!"
> > +       fi
> > +    fi
> > +
> > +    if [[ "$DEBUG" == "yes" ]]; then
> > +       echo "cmd: $@ > $proc_ctrl"
> > +    fi
> > +    # Quoting of "$@" is important for space expansion
> > +    echo "$@" > "$proc_ctrl"
> > +    local status=$?

(For later, notice, extraction of $? here)

> > +
> > +    result=`cat $proc_ctrl | fgrep "Result: OK:"`
> 
> Nit: useless usage of cat, grep/fgrep accepts a file name.

True, I just copied it from the old pgset().  I also don't think
"fgrep" is really needed.

Replacing with:
  result=$(grep "Result: OK:" $proc_ctrl)

> 
> > +    if [[ "$result" == "" ]]; then
> 
> You can test $?

No, unfortunately not... this is because I'm also using the function
for /proc/net/pktgen/pgctrl which does not contain a "Result:" line.

Thus, I can reuse this function for pgctrl, by letting it pass this
test. And pgctrl didn't even return errors on false input (fixed in this
patchset), which made any feedback from pgctrl futile.


(RANT)
Do notice pktgen proc API of reading "Result: OK:" is broken in more
ways ... which I'm trying to handle here.

On some proc-input pktgen does not return an error, but writes the error
message in the proc file.  Thus, we MUST parse/grep "Result".

On some proc-input pktgen only returns and error, and does NOT update
the "result" output.  Thus, the result can contain a "Result: OK:"
from a previous command.  This was not detected by old pgset().

This is why I'm extracting status=$? earlier.


This new proc write function catches a very common configuration
sequence of input correct dst IP but wrong MAC addr.

See:
 # echo -e "dst 1.2.3.4.5.6" > eth4@0 ; cat eth4@0 | grep Result
 Result: OK: dst_min=1.2.3.4.5.6
 # echo -e "dst_mac in:va:id " > eth4@0 ; cat eth4@0 | grep Result
 -bash: echo: write error: Invalid argument
 Result: OK: dst_min=1.2.3.4.5.6



> > +       cat $proc_ctrl | fgrep Result: >&2
> > +    fi
> > +    if (( $status != 0 )); then
> > +       err 5 "Write error($status) occured cmd: \"$@ > $proc_ctrl\""
> 
> Typo: occurred

True, annoyingly I already fixed it in the backward compat pgset().

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Sr. Network Kernel Developer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ