From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0077.outbound.protection.outlook.com [104.47.2.77]) by dpdk.org (Postfix) with ESMTP id 89CC55F14 for ; Tue, 2 Oct 2018 19:26:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5tJVVwiLZH8luEtGFXaQw3GrhNnhrf+Yv6kz4POvKwc=; b=OatMb9i18numQCeQFoNwGSIpDx9Nkj+C7AOBU+yHIzodF+ekD8rwlkiEBQnSWJHbFYN5zSBwI0xvFBQMVBljoS+rYYWQIBwxWLLfllQdG8W3A3Qqi4ztupEKI9EsdZlFpuPbvd2UnOU20pFe4FqZ+IGJOoQ0u4O3cdPLfJw5YwA= Received: from AM6PR08MB3672.eurprd08.prod.outlook.com (20.177.115.29) by AM6PR08MB3158.eurprd08.prod.outlook.com (52.135.164.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.25; Tue, 2 Oct 2018 17:26:54 +0000 Received: from AM6PR08MB3672.eurprd08.prod.outlook.com ([fe80::f423:e46a:a03c:e928]) by AM6PR08MB3672.eurprd08.prod.outlook.com ([fe80::f423:e46a:a03c:e928%2]) with mapi id 15.20.1185.024; Tue, 2 Oct 2018 17:26:54 +0000 From: Honnappa Nagarahalli To: Yipeng Wang , "bruce.richardson@intel.com" CC: "konstantin.ananyev@intel.com" , "dev@dpdk.org" , "sameh.gobriel@intel.com" , Honnappa Nagarahalli , nd Thread-Topic: [PATCH v5 1/4] hash: fix race condition in iterate Thread-Index: AQHUWfDfPRZLA+yEYU6wFamPYozx0qUMNemw Date: Tue, 2 Oct 2018 17:26:54 +0000 Message-ID: References: <1537993618-92630-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-2-git-send-email-yipeng1.wang@intel.com> In-Reply-To: <1538418902-154892-2-git-send-email-yipeng1.wang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM6PR08MB3158; 6:L101ENe44Ti+pNPNnwVtWMOwEJL6i1uP+427lisp9MDZbxe6+PrQaeu68gdOEvizEC9l71WkLgFj7LzN+JMqm47bv+AMuJl0PzaY9mYxua6Q9G+a0cIY53zx36SDenHGJqw73aNJxlkQYV7un08JHz9BHafjOcabE0WpnDrkolRFYsM780g+HDF0ACUip8uSaIUQYy1ERsivyKRCjTKXwBGgaBwy1SMIMO3Bz5Hr+WdHs9Y3eR1f5JKYQjMdK9z6P5H3GRRmJOvwZnS42hSIVs0fKZlH+KDbra5KMwdTJlMlD5CM0Pdcm7/BknVcM52SLjzfK8EClorHgANu2+1MlMns6pZqNbueSNQTajB7cdS8mebFBUXPwLtO95fGvx+FcI8VQeH2pRISfEB/WSKDKO11ymY/hodod46P5MvLZXH7vPn7IXCJ8ELBsIMgEtIe0WcqkkWIwfWrcHsD3iE8SA==; 5:HhTk7jnzvyR9J0ow6N3mlae+bUrUWD/bjMcJ0kST83WEBuQkUu/D/OHugzGrMB1ayZeUXjO0r7+0vKcE6YX2e1qs+dMNxK/38UL2+V03k6U5vg7wlJgkaqgCaQngg6GqihY8sn9wYiLuWbkdr29bTQVgXWWJiGYXayTI6A5sMpg=; 7:6wIw+Zh2ZkU+ZcWHH2CtZpn5oY67nhDN7kbWsa0rFuQSXql6OOnmtP9aooxi7Wg6nTBl26sHONNsv23y4uYVx9KxiAKQHOMHamOdo029xM0dAQuID4e/iiiCQoSDsZlcoFRhZbSYQ/4UXEuNlV+NVM32RaBrO9bNOqnOuFsyffw694Tg86VEnfJ1z4547sk1KYJq3fMr5QPIlWf7/E+d1vrzFTIR7M2CX2D3ItqP/mOxeBbtRO+YWcYpMp49oitW x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: a9d75f0a-8bbc-4ce7-c248-08d6288c3f50 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534182)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM6PR08MB3158; x-ms-traffictypediagnostic: AM6PR08MB3158: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699)(180628864354917); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051); SRVR:AM6PR08MB3158; BCL:0; PCL:0; RULEID:; SRVR:AM6PR08MB3158; x-forefront-prvs: 0813C68E65 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(396003)(346002)(366004)(376002)(13464003)(199004)(189003)(446003)(7736002)(11346002)(476003)(53546011)(99286004)(5660300001)(186003)(72206003)(97736004)(486006)(26005)(2900100001)(14454004)(478600001)(86362001)(305945005)(55016002)(54906003)(102836004)(53936002)(6506007)(7696005)(14444005)(229853002)(76176011)(2906002)(256004)(6436002)(9686003)(6116002)(8936002)(68736007)(8676002)(81156014)(316002)(71190400001)(4326008)(110136005)(71200400001)(6246003)(74316002)(3846002)(33656002)(25786009)(66066001)(105586002)(106356001)(81166006)(5250100002)(2501003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB3158; H:AM6PR08MB3672.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: tjQOLIVpl3g1kyQKznoHJZawlNrmJPE7UQKucai2tIp/6xPNTyO6fa4g1BbpQs8uUq3Rmgt+hfAbpqBznhHpxFjtwc5V98C6u4uV7KCbF92Seil2t2eqdnCvDDSRtj2mkxNwNqTmMQZ5FqCADQ8YO+tJdbkqj97wvx31S4mRrFcCG14C88ZRER2ojDzMuTprfcrnkJUTqlnsPnXFcIQIcuuY/zvMJoJAvDTn/VkvY4sKepT0l9W9sDBOyLbip+RDi5oJY++dIl4v/2G9SUpA3NSLOj0mT1agpW3uxCmlv+BKZQASX9he7ymNQ6EZR4AbP52v0ZLwIoL3zDKgmEZsZi0+EPOj70yL13oMkY7mW8M= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9d75f0a-8bbc-4ce7-c248-08d6288c3f50 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Oct 2018 17:26:54.1199 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3158 Subject: Re: [dpdk-dev] [PATCH v5 1/4] hash: fix race condition in iterate X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Oct 2018 17:26:55 -0000 > -----Original Message----- > From: Yipeng Wang > Sent: Monday, October 1, 2018 1:35 PM > To: bruce.richardson@intel.com > Cc: konstantin.ananyev@intel.com; dev@dpdk.org; > yipeng1.wang@intel.com; Honnappa Nagarahalli > ; sameh.gobriel@intel.com > Subject: [PATCH v5 1/4] hash: fix race condition in iterate >=20 > In rte_hash_iterate, the reader lock did not protect the while loop which > checks empty entry. This created a race condition that the entry may > become empty when enters the lock, then a wrong key data value would be > read out. >=20 > This commit reads out the position in the while condition, which makes su= re > that the position will not be changed to empty before entering the lock. >=20 > Fixes: f2e3001b53ec ("hash: support read/write concurrency") > Cc: stable@dpdk.org >=20 > Signed-off-by: Yipeng Wang > Reported-by: Honnappa Nagarahalli > --- > lib/librte_hash/rte_cuckoo_hash.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) >=20 > diff --git a/lib/librte_hash/rte_cuckoo_hash.c > b/lib/librte_hash/rte_cuckoo_hash.c > index f7b86c8..da8ddf4 100644 > --- a/lib/librte_hash/rte_cuckoo_hash.c > +++ b/lib/librte_hash/rte_cuckoo_hash.c > @@ -1318,7 +1318,7 @@ rte_hash_iterate(const struct rte_hash *h, const > void **key, void **data, uint32 > idx =3D *next % RTE_HASH_BUCKET_ENTRIES; >=20 > /* If current position is empty, go to the next one */ > - while (h->buckets[bucket_idx].key_idx[idx] =3D=3D EMPTY_SLOT) { > + while ((position =3D h->buckets[bucket_idx].key_idx[idx]) =3D=3D > EMPTY_SLOT) > +{ > (*next)++; > /* End of table */ > if (*next =3D=3D total_entries) > @@ -1326,9 +1326,8 @@ rte_hash_iterate(const struct rte_hash *h, const > void **key, void **data, uint32 > bucket_idx =3D *next / RTE_HASH_BUCKET_ENTRIES; > idx =3D *next % RTE_HASH_BUCKET_ENTRIES; > } > + > __hash_rw_reader_lock(h); > - /* Get position of entry in key table */ > - position =3D h->buckets[bucket_idx].key_idx[idx]; > next_key =3D (struct rte_hash_key *) ((char *)h->key_store + > position * h->key_entry_size); > /* Return key and data */ > -- > 2.7.4 This looks good. I can rework my patch too. I will leave the decision to yo= u. Reviewed-by: Honnappa Nagarahalli