From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752913AbcERMCq (ORCPT ); Wed, 18 May 2016 08:02:46 -0400 Received: from mail-am1on0144.outbound.protection.outlook.com ([157.56.112.144]:54112 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751899AbcERMCo (ORCPT ); Wed, 18 May 2016 08:02:44 -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 v2] net: sock: move ->sk_shutdown out of bitfields. Date: Wed, 18 May 2016 15:03:15 +0300 Message-ID: <1463572995-17432-1-git-send-email-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR06CA0011.eurprd06.prod.outlook.com (10.162.116.149) To AM5PR0801MB1300.eurprd08.prod.outlook.com (10.167.216.151) X-MS-Office365-Filtering-Correlation-Id: cadf629e-4534-4034-b9d5-08d37f14503c X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1300;2:yb96NxZ4j8lNeWHnRwKPLNBr6jmdWm5XDl/VTmDxbi1xXhwsYFw3QMic2Owty/fvtv3Q7jVzd9nfwZCtY9ChbHZl7eu240VN8aKVm47TEa6LwEAxCEA1dynRHLjnuYmRDF/jQkZddyI2LdeE/FMSo/Bp05BrY16cutxooOKzweTrOcW8caAh1KGBv9ktcpGf;3:/BPvLwfHQ2gueFBgAVNGXcjPbuuM0f04Fl3lGA583OnYUlO+g1zMYgiX9RwLRH8SGwsh4g339krcDqp2LkU6X6XP6B3IDYY1lLSERNAH5+V9rXpAmQQj2zeqsQsX8iil X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1300; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1300;25:uKJ+Vr3uoeuCKSRBQLBBc/6M0So5laTQa0Qwp7ndMH2a8sXBUdQ+IQGg4ceTVx0q6oBpfSjC5ytq+LqEBSnqEDedwrWf8TVKyZuXbqO1KCwjrdm4ELczWj8GvGmCH8jZ3/+Zj0J6gfO3HWNdJObTAyt5wzmrIo7y9zv1uP7964lLc6rJItsi0mPoSe7Ncn9UHptd5sSNgJitaSrhAseNUKmnHZF/Al9wcETlcB3ILKXi032NtR78G+daTX3rlbm8n2j2MmYC9XpWR2MKagtrPzwZkM5dHLmAfsoRUMJ0H1m4xZSKFjYEUZ2YdDBgOzcnvdq1m1c16qINZRUqGrM99U8qNpES835xQNYTvXAvg+BiNO8zrVkFi5dcTyM09Uj7lXAjfuMfD8rLXLx0sPzcIjllei8wwRM2mkKsBzn2SI/LL28d66vwhGc1qyCbCW1Nz9WIMmmxP0pb5sG1bzziAbWggAauDr7b7mCtLdH10353K74pA3UcoJnq6BjWWTuz0hMhIs0iWLpMQWD4huqfnkEjo/EsO8wBlkDGlOjp2teQbIa3qP+q+WNluW1pCYt1KIjE1MxL69aI/3hT1JCNu67C/SiEia7ln2xRG4tVVRHbUNBdz3EglgoDTkDVpPj+27cYcCusFnJtuFKQ4Z6GZb/MiNV1rVW2hu+OOaHEKoCCMpJUn0y5AsNDOumYaljfFY8HEjPrQ2S5SEW6S7CNPf0ld3HGuqF5Liuu44EwiQokIz5KmIzmi+BHm/8vPB+k 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:AM5PR0801MB1300;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1300; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1300;4:3b6qUYJFHcOdfr6hBx9AqNCAtt2gY4GQ7E/INS70mLlH/y4NpMlEqXyCA5lt7roM62Co9BN43TneazU8OSzAUNMhI69Bs9STae3+snxMSbjs6k+4b8yKl8ra17aB8qMmM8LKTEUPfGpda1mpThfFcXVIWcJ2NVdhURCdmWIaRTarPWnqUVAF7wE0jKq2Jeus8RzVl41Cbwgqvfs+IGZfpxyw0MOqnsT5MVcPTtt72MhLvZ6PqJrEnRwct/hKkDDQMMePGSSq1Bv7zgeRKc+OUQcOgWFFshGEgGVqsdJLoTMAhAm+Ytzaw/DRJsEOhlD8AI5JF9IaDOZZsWMyA9QuZwY1VcNhc3Pj+GTEDGUkFL/L0DNzcAWTPs0WylZ3Ko7fEXk9GzWRPCL2csF3vUbhp1z1H/dND7WYgfWPC2GVeRY= X-Forefront-PRVS: 0946DC87A1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(66066001)(53416004)(50226002)(229853001)(2950100001)(33646002)(110136002)(5003940100001)(586003)(189998001)(6116002)(107886002)(47776003)(42186005)(76506005)(77096005)(5004730100002)(8676002)(4326007)(5008740100001)(19580395003)(50986999)(2906002)(19580405001)(92566002)(4001430100002)(81166006)(48376002)(36756003)(50466002)(86362001)(76176999);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1300;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM5PR0801MB1300;23:SuMz0IxxGApInC0kHo3hCqDydMk6xz7nguVFjy7?= =?us-ascii?Q?SDjzlpuzFjbeOiEgFw7Ax6VDkSLfwYcdMjXIUJbCRMw+2lOSnLlFR9SIPhTQ?= =?us-ascii?Q?hnHvt73Echb4eULKlisHeLBdN7bcWp9W7SJ0RActx0A+vPbukinlfTtn7HMg?= =?us-ascii?Q?RoxR1mjTv0z6k8X8FhwPWV7a8E3ETphU2K4DzZDLnTvCstsLYQmjlKpxNAwc?= =?us-ascii?Q?OY9FunIKTcBBeNdqdEaeiiiM3hDBm+EBrMmv+cAROFilPZW8ivvL5upzM/TZ?= =?us-ascii?Q?9FgG5l7QstBC2n+JpTf3MvU9khbWZsHKhGqq1k0VMplRX99eBY88oUIsrenM?= =?us-ascii?Q?BZtnV+9nsie9+PqbbBWKw9qFcLrRahSQZiEZWh9Hzs0Mej/rEpBaMBEqNJvN?= =?us-ascii?Q?dzB1ffTmOZk8Vd/E2oOIjKHr+AkSsuWzB26elXR82ifPl0t4wK2QYLaq2hsZ?= =?us-ascii?Q?RNK560lQu2q0RbbFKzpvjMWQ/9p1WivKBi18vqUdpzLGfWy2ljr320nEsiuj?= =?us-ascii?Q?qsoVWqZHi4Xg3Pc36HJBWlpz3su1Pe7AiyFR/qvepCqN1DJvweP7GtWLdrgj?= =?us-ascii?Q?v4Vg3qAXIobeJ0EmUOcxd9FuQJ2Fch/dwKoXPlL2jw2orbC3JRy//nZ4MGdg?= =?us-ascii?Q?nKhZfwzUdE9F279ksKohFZ/g6ASRp31zzlGfvthGapp1hhwKsse+2arV4NT3?= =?us-ascii?Q?cHAtlKbHUFyF+CM3UItgaOWnrURW9cyxdkHWKXjEdBaiUe/gVvRz37KMwkpF?= =?us-ascii?Q?oyYJ05rlmiNoZDvcoz+myBVxXD7e7K3vlSsZAlVjWgdDz61oOk1vhWRjLlxG?= =?us-ascii?Q?xLO+NgoATH45Ga+n7rySNp5CdMafH2Y1Cte4z4nvXz8TgMHPamnu7JV8mUbJ?= =?us-ascii?Q?QO/495YLoZ8OcW37R0FIXRu5FEVK/l4OtVNFs26QsGpujzrH+FKgdkl+8ZaI?= =?us-ascii?Q?NmhSBsGv9QggOEljKHkIFU9+1PV6LX5YxGkEXInACdw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1300;5:rdIUXObLD371mccPgciVObI2gCkudiTUe0gvQzQxwWQ+LXfuWGtVxqupD5jXOU/f6b0mtzaBw4fsCwnxVaOEpzQu64n8QZVoiOU071y7fo1wMe3MDTBkCWiPv35RtTduQybqyPekNqlPKw8uoN4iow==;24:DLpUsrf6/CVQVLrAOU8o8xpQlmXV0NVgbTQlFESkyW4IQT+2577qX5vTD/nGF41C6VUIwwXPkuAbhRg125zWCtMLXj73Gnb2CyPGV2+3LQs=;7:xUtSRZpLX5HNDN0UFjXqDqHmcrG+/dFzkGcNLi+BsYYkJ7Gfl1q3zlBc3M3aAFj9sfOaLfHHg6f6aDqBG77ilIvFA9hOyslXUvIjgJMNmDYtXF3+aRrApLVLiWV8RYyVOzpGPrEjTje/co28FtINx1xGVR2SuTclxL5cAMJS4QgwkKwClBU0LYjvI33EBRrN;20:72Ii8/YEpKpVsaniwREulQF5bmKS7+VYs/q3MHjYkixVZn5kW80EsBYMvuGODB2s1p3vc3qBwRwArKn+UmRp/fXwZMI8SCnZBIjEyMOilGzcXW/UA8KBulMQuR+IKU0HWXjJ+mRBtZbbakW+1RgtzFbZJASqwI1fhpovKGrjUQo= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2016 12:02:40.2695 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1300 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 --- include/net/sock.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/net/sock.h b/include/net/sock.h index c9c8b19..04dc131 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -383,8 +383,7 @@ struct sock { int sk_sndbuf; struct sk_buff_head sk_write_queue; kmemcheck_bitfield_begin(flags); - unsigned int sk_shutdown : 2, - sk_no_check_tx : 1, + unsigned int sk_no_check_tx : 1, sk_no_check_rx : 1, sk_userlocks : 4, sk_protocol : 8, @@ -418,6 +417,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