From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754605Ab3EVN1i (ORCPT ); Wed, 22 May 2013 09:27:38 -0400 Received: from mx0.aculab.com ([213.249.233.131]:44825 "HELO mx0.aculab.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1752792Ab3EVN1h (ORCPT ); Wed, 22 May 2013 09:27:37 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Subject: RE: [PATCH v2] rcu: fix a race in hlist_nulls_for_each_entry_rcu macro Date: Wed, 22 May 2013 14:27:12 +0100 Message-ID: In-Reply-To: <1369225837.3301.324.camel@edumazet-glaptop> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v2] rcu: fix a race in hlist_nulls_for_each_entry_rcu macro Thread-Index: Ac5W6DQN85yJV0YASzyghJ7mgM8jQwABus9A References: <519B38EC.90401@yandex-team.ru> <20130521120906.GD3578@linux.vnet.ibm.com> <1369143885.3301.221.camel@edumazet-glaptop> <519B8908.9080007@yandex-team.ru> <1369150693.3301.233.camel@edumazet-glaptop> <519BB90B.6080706@yandex-team.ru> <1369188080.3301.268.camel@edumazet-glaptop> <1369201765.3301.299.camel@edumazet-glaptop> <519CB2D8.103@yandex-team.ru> <1369225837.3301.324.camel@edumazet-glaptop> From: "David Laight" To: "Eric Dumazet" , "Roman Gushchin" Cc: , "Dipankar Sarma" , , , , "David S. Miller" , "Alexey Kuznetsov" , "James Morris" , "Hideaki YOSHIFUJI" , "Patrick McHardy" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id r4MDRkoW028522 > So yes, the patch appears to fix the bug, but it sounds not logical to > me. I was confused because the copy of the code I found was different (it has some checks for reusaddr - which force a function call in the loop). The code being compiled is: begin: result = NULL; badness = -1; udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) { score = compute_score2(sk, net, saddr, sport, daddr, hnum, dif); if (score > badness) { result = sk; badness = score; if (score == SCORE2_MAX) goto exact_match; } } /* * if the nulls value we got at the end of this lookup is * not the expected one, we must restart lookup. * We probably met an item that was moved to another chain. */ if (get_nulls_value(node) != slot2) goto begin; Which is entirely inlined - so the compiler is allowed to assume that no other code modifies any of the data. Hence it is allowed to cache the list head value. Indeed it could convert the last line to "for (;;);". A asm volatile ("":::"memory") somewhere would fix it. David {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 From: "David Laight" Subject: RE: [PATCH v2] rcu: fix a race in hlist_nulls_for_each_entry_rcu macro Date: Wed, 22 May 2013 14:27:12 +0100 Message-ID: References: <519B38EC.90401@yandex-team.ru> <20130521120906.GD3578@linux.vnet.ibm.com> <1369143885.3301.221.camel@edumazet-glaptop> <519B8908.9080007@yandex-team.ru> <1369150693.3301.233.camel@edumazet-glaptop> <519BB90B.6080706@yandex-team.ru> <1369188080.3301.268.camel@edumazet-glaptop> <1369201765.3301.299.camel@edumazet-glaptop> <519CB2D8.103@yandex-team.ru> <1369225837.3301.324.camel@edumazet-glaptop> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: , "Dipankar Sarma" , , , , "David S. Miller" , "Alexey Kuznetsov" , "James Morris" , "Hideaki YOSHIFUJI" , "Patrick McHardy" To: "Eric Dumazet" , "Roman Gushchin" Return-path: Received: from mx0.aculab.com ([213.249.233.131]:44826 "HELO mx0.aculab.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753042Ab3EVN1h (ORCPT ); Wed, 22 May 2013 09:27:37 -0400 Received: from mx0.aculab.com ([127.0.0.1]) by localhost (mx0.aculab.com [127.0.0.1]) (amavisd-new, port 10024) with SMTP id 12632-05 for ; Wed, 22 May 2013 14:27:32 +0100 (BST) Content-class: urn:content-classes:message In-Reply-To: <1369225837.3301.324.camel@edumazet-glaptop> Sender: netdev-owner@vger.kernel.org List-ID: PiBTbyB5ZXMsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGZpeCB0aGUgYnVnLCBidXQgaXQgc291bmRz IG5vdCBsb2dpY2FsIHRvDQo+IG1lLg0KDQpJIHdhcyBjb25mdXNlZCBiZWNhdXNlIHRoZSBjb3B5 IG9mIHRoZSBjb2RlIEkgZm91bmQgd2FzIGRpZmZlcmVudA0KKGl0IGhhcyBzb21lIGNoZWNrcyBm b3IgcmV1c2FkZHIgLSB3aGljaCBmb3JjZSBhIGZ1bmN0aW9uIGNhbGwgaW4gdGhlDQpsb29wKS4N Cg0KVGhlIGNvZGUgYmVpbmcgY29tcGlsZWQgaXM6DQoNCmJlZ2luOg0KCXJlc3VsdCA9IE5VTEw7 DQoJYmFkbmVzcyA9IC0xOw0KCXVkcF9wb3J0YWRkcl9mb3JfZWFjaF9lbnRyeV9yY3Uoc2ssIG5v ZGUsICZoc2xvdDItPmhlYWQpIHsNCgkJc2NvcmUgPSBjb21wdXRlX3Njb3JlMihzaywgbmV0LCBz YWRkciwgc3BvcnQsDQoJCQkJICAgICAgZGFkZHIsIGhudW0sIGRpZik7DQoJCWlmIChzY29yZSA+ IGJhZG5lc3MpIHsNCgkJCXJlc3VsdCA9IHNrOw0KCQkJYmFkbmVzcyA9IHNjb3JlOw0KCQkJaWYg KHNjb3JlID09IFNDT1JFMl9NQVgpDQoJCQkJZ290byBleGFjdF9tYXRjaDsNCgkJfQ0KCX0NCgkv Kg0KCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1 cCBpcw0KCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLg0K CSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hh aW4uDQoJICovDQoJaWYgKGdldF9udWxsc192YWx1ZShub2RlKSAhPSBzbG90MikNCgkJZ290byBi ZWdpbjsNCg0KV2hpY2ggaXMgZW50aXJlbHkgaW5saW5lZCAtIHNvIHRoZSBjb21waWxlciBpcyBh bGxvd2VkIHRvIGFzc3VtZQ0KdGhhdCBubyBvdGhlciBjb2RlIG1vZGlmaWVzIGFueSBvZiB0aGUg ZGF0YS4NCkhlbmNlIGl0IGlzIGFsbG93ZWQgdG8gY2FjaGUgdGhlIGxpc3QgaGVhZCB2YWx1ZS4N CkluZGVlZCBpdCBjb3VsZCBjb252ZXJ0IHRoZSBsYXN0IGxpbmUgdG8gImZvciAoOzspOyIuDQoN CkEgYXNtIHZvbGF0aWxlICgiIjo6OiJtZW1vcnkiKSBzb21ld2hlcmUgd291bGQgZml4IGl0Lg0K DQoJRGF2aWQNCg0K