| 1) General cases
|
|
| Thanks for doing the audit!
|
| CASE 1: calls of the form
| * if (before48(a,b)) or
| * if (after48(b,a))
| are not ambiguous due to the definition of before48 (see above
link for details).
|
| Actually,
|
| if (before48(a, b))
|
| is ambiguous if and only if
|
| if (!before48(a, b))
|
| is ambiguous.
The new definition of `before48' is identical to the old one apart from all
those
pairs a,b whose distance is 2^47 - the ambiguous case, which is now included in
!before.
| Whether it's safe depends on the clause after the if
| statement, i.e.,
|
| if (before48(a, b))
| process_packet();
|
| would be safe while
|
| if (before48(a, b))
| drop_packet();
One could consider this in terms of the first as
if (!before48(a, b))
process_packet();
Thanks for the comments - I therefore went again through the list of cases. I
found two instances which are
of the form you described:
net/dccp/ccids/lib/packet_history.c-225-if (!list_empty(li_list)) {
net/dccp/ccids/lib/packet_history.c-226-
list_for_each_entry_safe(entry, next, rx_list, dccphrx_node) {
net/dccp/ccids/lib/packet_history.c-227-if (num_later
== 0) {
net/dccp/ccids/lib/packet_history.c:228:if
(after48(nonloss_seqno,
net/dccp/ccids/lib/packet_history.c-229-
entry-dccphrx_seqno)) {
net/dccp/ccids/lib/packet_history.c-230-
list_del_init(entry-dccphrx_node);
net/dccp/ccids/lib/packet_history.c-231-
dccp_rx_hist_entry_delete(hist, entry);
== This is part of the synchronous garbage collection for the RX history
(function dccp_rx_hist_add_packet).
We would have an ambiguity in the case where entry-dccphrx_seqno and
nonloss_seqno are 2^47 apart:
* with the old definition the entry would be cleared
* with the new definition the entry would not be cleared
I am arguing that this instance is benign: the entry would not be cleared
now; but the condition would be
satisfied the next time when dccp_rx_hist_add_packet is called - with a
higher value of nonloss_seqno. So
the difference is that in this special case the entry would be cleared
slightly later, but eventually it will.
net/dccp/ackvec.c:60: BUG_ON(before48(avr-dccpavr_ack_seqno,
net/dccp/ackvec.c-61- head-dccpavr_ack_seqno));
== As in the other instance of Ack Vectors, a sequence number distance of 2^47
is not within the scope of what Ack
Vectors are used for, it is a pathological case.
-
To unsubscribe from this list: send the line unsubscribe dccp in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html