* ss filter problem
@ 2016-03-29 19:32 Phil Sutter
2016-03-29 20:05 ` Vadim Kochan
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
0 siblings, 2 replies; 6+ messages in thread
From: Phil Sutter @ 2016-03-29 19:32 UTC (permalink / raw)
To: Vadim Kochan; +Cc: Stephen Hemminger, netdev
Hi,
I am trying to fix a bug in ss filter code, but feel quite lost right
now. The issue is this:
| ss -nl -f inet '( sport = :22 )'
prints not only listening sockets (as requested by -l flag), but
established ones as well (reproduce by opening ssh connection to
127.0.0.1 before calling above).
In contrast, the following both don't show the established sockets:
| ss -nl '( sport = :22 )'
| ss -nl -f inet
My investigation led me to see that current_filter.states is altered
after ssfilter_parse() returns, and using gdb with a watchpoint I was
able to identify parse_hostcond() to be the bad guy: In line 1560, it
calls filter_af_set() after checking for fam != AF_UNSPEC (which is the
case, since fam = preferred_family and the latter is changed to AF_INET
when parsing '-f inet' parameter).
This whole jumping back and forth confuses me quite effectively. Since
you did some fixes in the past already, are you possibly able to point
out where/how this tiny mess has to be fixed?
I guess in an ideal world we would translate '-l' to 'state listen', '-f
inet' to 'src inet:*' and pass everything ANDed together to
ssfilter_parse(). Or maybe that would make things even worse. ;)
Cheers, Phil
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: ss filter problem
2016-03-29 19:32 ss filter problem Phil Sutter
@ 2016-03-29 20:05 ` Vadim Kochan
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
1 sibling, 0 replies; 6+ messages in thread
From: Vadim Kochan @ 2016-03-29 20:05 UTC (permalink / raw)
To: Phil Sutter, Vadim Kochan, Stephen Hemminger, netdev
Hi Phil,
On Tue, Mar 29, 2016 at 09:32:42PM +0200, Phil Sutter wrote:
> Hi,
>
> I am trying to fix a bug in ss filter code, but feel quite lost right
> now. The issue is this:
>
> | ss -nl -f inet '( sport = :22 )'
>
> prints not only listening sockets (as requested by -l flag), but
> established ones as well (reproduce by opening ssh connection to
> 127.0.0.1 before calling above).
>
> In contrast, the following both don't show the established sockets:
>
> | ss -nl '( sport = :22 )'
> | ss -nl -f inet
>
> My investigation led me to see that current_filter.states is altered
> after ssfilter_parse() returns, and using gdb with a watchpoint I was
> able to identify parse_hostcond() to be the bad guy: In line 1560, it
> calls filter_af_set() after checking for fam != AF_UNSPEC (which is the
> case, since fam = preferred_family and the latter is changed to AF_INET
> when parsing '-f inet' parameter).
Yes, after removing of fam != AF_UNSPEC body - it works, because
it does not overwrite specified states (-l) from command line, but I
can't say what it may affect else, I will try to investigate it better.
>
> This whole jumping back and forth confuses me quite effectively. Since
> you did some fixes in the past already, are you possibly able to point
> out where/how this tiny mess has to be fixed?
>
> I guess in an ideal world we would translate '-l' to 'state listen', '-f
> inet' to 'src inet:*' and pass everything ANDed together to
> ssfilter_parse(). Or maybe that would make things even worse. ;)
>
> Cheers, Phil
I thought I fixed & tested well ss filter, but seems it would be good to
have good automation testing.
Regards,
Vadim Kochan
^ permalink raw reply [flat|nested] 6+ messages in thread
* [iproute PATCH 0/2] Minor ss filter fix and review
2016-03-29 19:32 ss filter problem Phil Sutter
2016-03-29 20:05 ` Vadim Kochan
@ 2016-04-13 20:07 ` Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 1/2] ss: Drop silly assignment Phil Sutter
` (2 more replies)
1 sibling, 3 replies; 6+ messages in thread
From: Phil Sutter @ 2016-04-13 20:07 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Vadim Kochan, netdev
While looking for a solution to the problem described in patch 2/2, I
discovered the overly complicated assignment in filter_states_set() which
is simplified in patch 1/2.
Phil Sutter (2):
ss: Drop silly assignment
ss: Fix accidental state filter override
misc/ss.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--
2.8.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [iproute PATCH 1/2] ss: Drop silly assignment
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
@ 2016-04-13 20:07 ` Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 2/2] ss: Fix accidental state filter override Phil Sutter
2016-04-19 14:57 ` [iproute PATCH 0/2] Minor ss filter fix and review Stephen Hemminger
2 siblings, 0 replies; 6+ messages in thread
From: Phil Sutter @ 2016-04-13 20:07 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Vadim Kochan, netdev
An expression of the form '(a | b) & b' will evaluate to the value of b
for any value of a or b.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
misc/ss.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/ss.c b/misc/ss.c
index 38cf3312a746e..d6090018c5dbb 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -267,7 +267,7 @@ static void filter_default_dbs(struct filter *f)
static void filter_states_set(struct filter *f, int states)
{
if (states)
- f->states = (f->states | states) & states;
+ f->states = states;
}
static void filter_merge_defaults(struct filter *f)
--
2.8.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [iproute PATCH 2/2] ss: Fix accidental state filter override
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 1/2] ss: Drop silly assignment Phil Sutter
@ 2016-04-13 20:07 ` Phil Sutter
2016-04-19 14:57 ` [iproute PATCH 0/2] Minor ss filter fix and review Stephen Hemminger
2 siblings, 0 replies; 6+ messages in thread
From: Phil Sutter @ 2016-04-13 20:07 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Vadim Kochan, netdev
Passing a filter expression and selecting an address family using the
'-f' flag would overwrite the state filter by accident. Therefore
calling e.g. 'ss -nl -f inet '(sport = :22)' would not only print
listening sockets (as requested by '-l' flag) but connected ones, as
well.
Fix this by reusing the formerly ineffective call to filter_states_set()
to restore the state filter as it was before the call to
filter_af_set().
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
misc/ss.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/misc/ss.c b/misc/ss.c
index d6090018c5dbb..544def3f08ea8 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1556,9 +1556,10 @@ void *parse_hostcond(char *addr, bool is_port)
out:
if (fam != AF_UNSPEC) {
+ int states = f->states;
f->families = 0;
filter_af_set(f, fam);
- filter_states_set(f, 0);
+ filter_states_set(f, states);
}
res = malloc(sizeof(*res));
--
2.8.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [iproute PATCH 0/2] Minor ss filter fix and review
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 1/2] ss: Drop silly assignment Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 2/2] ss: Fix accidental state filter override Phil Sutter
@ 2016-04-19 14:57 ` Stephen Hemminger
2 siblings, 0 replies; 6+ messages in thread
From: Stephen Hemminger @ 2016-04-19 14:57 UTC (permalink / raw)
To: Phil Sutter; +Cc: Vadim Kochan, netdev
On Wed, 13 Apr 2016 22:07:03 +0200
Phil Sutter <phil@nwl.cc> wrote:
> While looking for a solution to the problem described in patch 2/2, I
> discovered the overly complicated assignment in filter_states_set() which
> is simplified in patch 1/2.
>
> Phil Sutter (2):
> ss: Drop silly assignment
> ss: Fix accidental state filter override
>
> misc/ss.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
Applied
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-04-19 14:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-29 19:32 ss filter problem Phil Sutter
2016-03-29 20:05 ` Vadim Kochan
2016-04-13 20:07 ` [iproute PATCH 0/2] Minor ss filter fix and review Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 1/2] ss: Drop silly assignment Phil Sutter
2016-04-13 20:07 ` [iproute PATCH 2/2] ss: Fix accidental state filter override Phil Sutter
2016-04-19 14:57 ` [iproute PATCH 0/2] Minor ss filter fix and review Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).