public inbox for b.a.t.m.a.n@lists.open-mesh.org
 help / color / mirror / Atom feed
* [B.A.T.M.A.N.] Logic bug in B.A.T.M.A.N. advanced driver
@ 2011-10-29 18:45 Thomas Jarosch
  2011-10-30 15:22 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix range check for expected packets Simon Wunderlich
  0 siblings, 1 reply; 3+ messages in thread
From: Thomas Jarosch @ 2011-10-29 18:45 UTC (permalink / raw)
  To: Marek Lindner; +Cc: netdev, b.a.t.m.a.n

Hi Marek,

Consider this code from "net/batman-adv/bitarray.c":

int bit_get_packet(void *priv, unsigned long *seq_bits,
		    int32_t seq_num_diff, int set_mark)
{
        ...

	if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE)
		|| (seq_num_diff < EXPECTED_SEQNO_RANGE)) {
		bat_dbg(DBG_BATMAN, bat_priv,
			"We missed a lot of packets (%i) !\n",
			seq_num_diff - 1);
		bit_reset_window(seq_bits);
		if (set_mark)
			bit_mark(seq_bits, 0);
		return 1;
	}
-----------------------------------

The defines from "main.h":
#define TQ_LOCAL_WINDOW_SIZE 64
#define EXPECTED_SEQNO_RANGE	65536


So that if() statement will translate to:

-----------------------------------
	if ((seq_num_diff >= 64)
		|| (seq_num_diff < 65536)) {
-----------------------------------

and this will always evaluate to true.

Detected by "cppcheck":
"[net/batman-adv/bitarray.c:157]: (warning) Mutual exclusion over ||
always evaluates to true. Did you intend to use && instead?"

Cheers,
Thomas

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-10-30 20:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-29 18:45 [B.A.T.M.A.N.] Logic bug in B.A.T.M.A.N. advanced driver Thomas Jarosch
2011-10-30 15:22 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix range check for expected packets Simon Wunderlich
2011-10-30 20:58   ` Marek Lindner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox