|  >            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

Reply via email to