From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932790AbcERQxP (ORCPT ); Wed, 18 May 2016 12:53:15 -0400 Received: from mail-db3on0143.outbound.protection.outlook.com ([157.55.234.143]:62880 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932118AbcERQxN (ORCPT ); Wed, 18 May 2016 12:53:13 -0400 Authentication-Results: davemloft.net; dkim=none (message not signed) header.d=none;davemloft.net; dmarc=none action=none header.from=virtuozzo.com; From: Andrey Ryabinin To: "David S. Miller" CC: Hannes Frederic Sowa , Rainer Weikusat , Eric Dumazet , , , Andrey Ryabinin Subject: [PATCH v4] net: sock: move ->sk_shutdown out of bitfields. Date: Wed, 18 May 2016 19:19:27 +0300 Message-ID: <1463588367-16310-1-git-send-email-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1463585471.18194.123.camel@edumazet-glaptop3.roam.corp.google.com> References: <1463585471.18194.123.camel@edumazet-glaptop3.roam.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR02CA0039.eurprd02.prod.outlook.com (10.162.7.177) To DB6PR0801MB1304.eurprd08.prod.outlook.com (10.168.11.22) X-MS-Office365-Filtering-Correlation-Id: 839782c5-a622-4b19-5925-08d37f3823a8 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1304;2:iYSP9WI1FmuOPzR7LpVVQWGlet6AzyaesxrIdF7C2XkZewdNg87oDvM8Q6hiJWIWcH80ZuaNfoalI8DJnFj4kwGgW5nMrnLuoSUJT63Oj7MJ8PDMUqAsESLRDGisJ3VaKbG8sfPapT4B+2h4vsxnVyp5fAlUVXFh+CBCUibSZ54PpfVirIVLyfQgP76zZgZ6;3:rxw0fi8WIFzzv6OFJdnse3QTZi2lkIu4jFdHLoc04OhSKwA+WoX93V4AJOMwx4ZXZ1MTGbbpE6YMpOcQbX7uh9toEUYPntvPJT77iRzf7gH5kf5t77dDRCd/eabGY2pY X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1304; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1304;25:AGbu/xZMxXvbQBKvJUYL0uv/ELt0EdGHdTK8fZxFk7c7IQI1pzVnSmuRr+gnqU2q4Tii6vLo/zvPR6tG2qx4qI97QPYbEFkAOwQo2NgLSvtyvdLXzlwfgmpiKJLykyn7hqgMRtNlcQdsYn9CUB18RGVsAkqftRvPZJr37izLW/ABhetS3XlQNHFQXoohgOB6FJJ6V2SiSreSOpXcjbbTGUAAdyzia4NswbgHR8eq8mOa8s55xem2Mrkc8wZPA598JESm4ZGiw4BotZ7DjP1YNOA7P5jaNPjPtTEOhqPIKLyf62D7vy5X842ncj11osKXwUg8Wxfaj4brycYRJ7je5u1lXo73CwrKH7R693pnsHZFne/PamFl+ozDRwNQTWz54NTKygkv8QWPPfgd/cKqRFfHb4DxqD4LHYVR+czKPyv4kTpBFcHj/J56oU+3M7yOXz2dKJkKXTi4opFUrzJ6XTPGApE6ut8LnZ5XgEnWKMwJBNNdO+W9hh5Pt6f39aiTuWs/u3C9BMCTEcZ2QBv53sSVyiqkrwfMbnh8pWqxTcvZt/kKjh613fdph4+IDV0yiA//+Dl5YcsjiyKxzY1DY2xaJGTgKj4BusUPYUfRv3QaQ4S6sUz9wHL6msXQzaTAXZ/w+UyAMeK6/sPkYuvRJ1UMQBoVvgZvNZmESI5BJgkMZ0DmK7zMmPtnGIilWWOuBm/XtERscLM18qoRSASfVDG6xLtZHmbRbJmnCX/vee5KHCzs5yoxhD7jOklRNFrj X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046);SRVR:DB6PR0801MB1304;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1304; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1304;4:12xPpLUa6/cAP3wJGBrnirA9D0CwKQL/qjMm4PJtUdfi2P/uQRHQ6yaB1h26v/jqLhc2izK2cZH/85ISYLws4Xr3p1fsT/37Ts9ZMOKoxOkkeoBCDPh6EcP4nAlxpGZ2kbwLNuuW9LrDCq5maLB2wf8v0nCEXyOxSCF13lF15N2RwyldY8nWUhgQNN+CJ2zA0MrlpWKonXnPv1/3OLorUX/PIbpFGQFNAbzkeQECDgIIOIg8JnFYlVaxqIFOCOx76kBcLQQ7J79TlqikPXmHYxhXqYdCS26Hq/a4zQwspe0Og77AefgipcP4b+lLz0hSHaZbXc02xazxH3o5hgeCHNpbMOh57YXJuhBqXSamxOqmSmPafO3ItG+/CuUJeX13kf5N+bWqR4XPBpIqRx5D0SS+80eDxAZV4I8TwQl9KEU= X-Forefront-PRVS: 0946DC87A1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(5008740100001)(586003)(53416004)(48376002)(92566002)(189998001)(76506005)(42186005)(8676002)(6116002)(110136002)(107886002)(5004730100002)(50986999)(76176999)(81166006)(2950100001)(2906002)(229853001)(36756003)(19580405001)(19580395003)(86362001)(4001430100002)(77096005)(50226002)(4326007)(33646002)(66066001)(47776003)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1304;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1304;23:EVXTY5LwBqmDINJ0jkOJW/tcjFK54MEdUDXZt0vykwWrdkxm5WbCXBobH3WxZJsBOWXUMJk7KhVkdbXxHBU9FqguS9U1BqTQrF712TPFQhEE8AHKqMMB/UdeFZ1pXepzAn3XIUH4FHJCFCeYhPQShoJK3dwZlu3BSELrraCe67NStCI2gwSVERvlntEVfAN3wh4c33yFrkSAgzwhVbc7wCaHXAFOxVMFHwvKO6M2qD/lt9xBp+/Ix4tWfx9AiFe4/SvgvUP2npwJ2nX77nmG51lk0C+Mw9YOA0gotpuXD2yAFmW704tLGo9/M2s86/UhP9DjmTY7Q57GitauBq8N+Nf/V2QQg4eSajh5U1g6qgFZMrHm/Q1Z216lDwB2Od3W1r8O2MBk2iLlHfOs0BgOa4AJiU3D5gFmKPnNDcpd47v5CjiqLAaD03zRZk1fAHXEGwPl0oEq5BmB1TXCx5LFXDpjpiingGkCHUT5zRb0beJvzt2nUVYP4UUWS23bxmYLWeZ4FgJFLYSpcE1kQrLj08k6CGb6ZH0aRWn9bOJjtD8OKjbtVHv+MLvbuWl/2xdLt7GvHSSc5e2rmSVWaY4Ze67Q3xEWbIX5jscGSvRPiSAuzYd0xCzdZg66hHlKG90AJN0WpLx4nV1c5Wai55nAen1p8HlcioKDfBZSeuiCERlMLx3GaJcT+lvl0PmVxDWEreglGtnNIeQLxfmo+84boSe6WTZzN32ZKvCBekrWoKL6RnndPD+6VfxK6u1NnFcKxZyCVf6FEDvP0iWw+4Zg7gzByU412ZUmt7ePxjkw432MnMS0ETMu3HGzepTSCz5oOoUvs7ec1qBXOm/Aw9WkH7yYpjTU73rL4BQ1yJOrtE1am1byYKI3+7+ETfu2T/H+JVvd5NXFZfqtvDfukWp9ul8n1jTRnsHtT82I78t+Jko= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1304;5:bG5V7fWDvQBF00dJpk43ptEvv2kvm35GgFvbr1FGES/irfEsviYGzYnagSW6Zd1v2vXu7KL1wQ3th+PYuyHOAGqJPUysmiJrslQKZPSEEH4AvHOrpGbLJWEbxQjw0u/FnjyZbci90H+fViNKXQYZXw==;24:BHnIBbjG4zE5TjS60y/zSyLKECveoy+dYohO0PbT1f2jTcgRWBS2HUWQ/umLpNL3Dmg6/4OgYkuTxfznbcsUEwLsr2hRJIGp5kk1ml2hFd0=;7:/efGvCWTs+IOyrJznl73K9NP9RB1Tt3Uynu8R5HsuGOmxPLbLt6jQBdG9Hhuu7maQg6hFPXI3tvh8al4O7uklVihK6Tr4P+h/HD3XSyJBoH8zvDUCK3nEO9eHchkPmN5rUatuVyeFCh60IeZIA8LAdfKO1b3A25dPVKjmb///eIicDtxKWpxVvObyC5Cj7gL;20:E1IxhAURj1DP9TtVJjSAcvpqH01RkCI1OWXX000yFOSTodxKu3TTODK5F2j8LArFv0udzzIQXv43ACV5wUAtHhW2B2ScZ06PrBJP0gLOqPw1XNxjAtZQr78H9NhorBtbGXgI92Y3RBK/UM8bedlfv14R842RIMxDD9eDu6fcXSM= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2016 16:19:07.2190 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1304 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ->sk_shutdown bits share one bitfield with some other bits in sock struct, such as ->sk_no_check_[r,t]x, ->sk_userlocks ... sock_setsockopt() may write to these bits, while holding the socket lock. In case of AF_UNIX sockets, we change ->sk_shutdown bits while holding only unix_state_lock(). So concurrent setsockopt() and shutdown() may lead to corrupting these bits. Fix this by moving ->sk_shutdown bits out of bitfield into a separate byte. This will not change the 'struct sock' size since ->sk_shutdown moved into previously unused 16-bit hole. Signed-off-by: Andrey Ryabinin Suggested-by: Hannes Frederic Sowa --- Changes since v1: - move sk_shutdown into a separate byte instead of locking AF_UNIX sockets. Changes since v2: - reorder bitfields, so that sk_type/sk_protocol still fit in separate 2-bytes/byte. Changes since v3: - padding and comment per Eric. include/net/sock.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/net/sock.h b/include/net/sock.h index c9c8b19..649d2a8 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -382,8 +382,13 @@ struct sock { atomic_t sk_omem_alloc; int sk_sndbuf; struct sk_buff_head sk_write_queue; + + /* + * Because of non atomicity rules, all + * changes are protected by socket lock. + */ kmemcheck_bitfield_begin(flags); - unsigned int sk_shutdown : 2, + unsigned int sk_padding : 2, sk_no_check_tx : 1, sk_no_check_rx : 1, sk_userlocks : 4, @@ -391,6 +396,7 @@ struct sock { sk_type : 16; #define SK_PROTOCOL_MAX U8_MAX kmemcheck_bitfield_end(flags); + int sk_wmem_queued; gfp_t sk_allocation; u32 sk_pacing_rate; /* bytes per second */ @@ -418,6 +424,7 @@ struct sock { struct timer_list sk_timer; ktime_t sk_stamp; u16 sk_tsflags; + u8 sk_shutdown; u32 sk_tskey; struct socket *sk_socket; void *sk_user_data; -- 2.7.3