From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755028AbcHCFPb (ORCPT ); Wed, 3 Aug 2016 01:15:31 -0400 Received: from mail-db5eur01on0133.outbound.protection.outlook.com ([104.47.2.133]:46568 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751883AbcHCFPW (ORCPT ); Wed, 3 Aug 2016 01:15:22 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=VDavydov@virtuozzo.com; From: Vladimir Davydov To: Andrew Morton CC: Johannes Weiner , Michal Hocko , , Subject: [PATCH v2 3/3] mm: memcontrol: add sanity checks for memcg->id.ref on get/put Date: Tue, 2 Aug 2016 18:00:50 +0300 Message-ID: <32402ace75b459c8523f5b237a62061e1df7a3b5.1470149524.git.vdavydov@virtuozzo.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM2PR09CA0004.eurprd09.prod.outlook.com (10.161.22.142) To AM5PR0801MB1860.eurprd08.prod.outlook.com (10.168.157.17) X-MS-Office365-Filtering-Correlation-Id: b1309a6c-ae0b-4d69-929b-08d3bae5d092 X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1860;2:34Vr8a7XfqVntnjYHWBXQBt89EqZe8VvtmOuDD58AmsUmgpe6+SWRksh71bbTTRccrAMcJ6cWDoqdCIUzw9GELsSjpHI7Q4AiZ5c8/EnJPV0FAw0aJOZWLeyaPvWvG1ZxATPsDHuFB4ajbz9S3LOfQR22i37eFwOnG20yJc4siZidVwhhKur/8mF5Um07p+A;3:oHpBew1211tCEtvwi6QUGsAuJeQJxlCKUdq5kPKl6TjaacdWBAD70ve3EIfEYBLEvaHQEh3Vw00Cgu47BjSlWBp/Nme6c9r3+SLGFyzwJDkpkkUngH5vVqx3KRmz1L5O X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1860; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1860;25:cyZ5yZEHmGsVgxp/bNhI0U780NWBjWN2mBJV8nRI6zJsc3opi8OTUqfjslJCdFeZ1tmNI4xwWegd/8Q+zsrsRCtqeY0mKYaoFoEbk6ZnzPRDA8p8He32lVpAT/zuwjIL0+zMsoRI0dHm3VTHlc7US9xJnoLkdMUE/uramY6a96g9fd/KpzP6Kd3237h9EBEax4wvM7PKyWJLtlstOkRPeHeWuyHPBG/f71NHDnMFmBczMn9psnG+PWYSOXmt6y9fHu09OVrBIFUIq7TDOOFJnXmnySdCV9npZy2bIfnWeLAmjCJNPulMsSs804dZmMBE/5zs6wGe0AXfqrjY8nwQQXihtg7SIj9pfrA8rtlpxBHh3Rk0YV8GKcy0lCR7IRMDSOc+yo4DbpEaShgqASTf+mvT5bMoDmAzyEyLqC5o06QwryYl+mREXlrxp/p5s1P4SwYs0q+uEWBIhjSu460Fl6EgYnmKKOj9RQRo7j/McX0EVPfeXwRATU79CRYKTW4j+4wLPOSUw8RqmkGEgP9P2YhDPHhnma/GgxAIL+Q7SewhIJrczZ33wvPNjTnwrnSVf/iGsC+bg1Ijzff/yxCWcw7kr4bRPsRkKAvYMApyPzPlenma6XaVDKOxiMr0ON+1bP7A6M4LEsJnA73CnfzycvTjwnH0trz8lBE7DSsQ7akiNJNlqhoUwf0EPBR0+7Ye;31:MtQXtrNPy6jBD19cXOLnnr890zqpW3Ses9XOn6ceiAixs+AIW7/9+sGsqNbEgXu99vwqSA6p3tKd/btE5ootTM/TJrlhvH9umJ0VX46X1tKOfnn6ABP/0xY/u0kNgFPO1jKpoW0aY8SLxnpRjMfOlSx8BCZ260ZwqX5Dj38EbPHazV0YgxP2uFBMeValsUUPwugxTMis95Jci0vSCgfq2FEErX11OfIS2t7O1H61UY4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(209352067349851); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041072)(6043046);SRVR:AM5PR0801MB1860;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1860; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1860;4:heHDieGE1t10bJngS034KpjsdsTIiurnLx5Stuo7oMy/2gIRnWqvsiqFGyWP2PAwaywZ5EOydazoqpi7P2p7BLNI0ZO4CTTkYeJRCKpHrTAFv6QfY0FJMdUU7Tgnp/WzbS+QZkljwZ6CoUukKesAzRZnfh8z5+lRSLfsSyuGT9k80s6YB23VqrotH9HP2VznP0WjVVOEOyHumUpNr906ZxtERIEysyq8qUazB16jwpAhZ0cHDn9ndIYobC4Nmcz7MgRljQag/PFhR8pNMRNxLatfTl2pCvFcPSOkgqRptQbZjTBSeMb8dmHTdoXnuxsRjv+xjMS//Mfi46S4yCbKllyidsZcXCTq3dPHbB9FyzMr4Wyagmrut7GrT2+7/A+j7UJrLGEAwUlJXM6goqKlw9K4uDCZhsDRFFzPf+afsJLuSGOUTe7m4TLjJsJE/F9A2d/Flqq1zpVS84F37OYGIT9n0iDGwwBXE+IqF2MM0QE= X-Forefront-PRVS: 0022134A87 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(105586002)(101416001)(33646002)(36756003)(47776003)(8676002)(86362001)(42186005)(229853001)(4326007)(106356001)(118296001)(2906002)(21086003)(305945005)(19580395003)(3846002)(92566002)(19580405001)(586003)(5003940100001)(7736002)(50466002)(50226002)(2950100001)(110136002)(77096005)(81156014)(6116002)(69596002)(81166006)(48376002)(80792005)(66066001)(97736004)(7846002)(50986999)(76176999)(68736007)(189998001);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1860;H:virtuozzo.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM5PR0801MB1860;23:7oapDmXBqo0M3wwHW943kGEQkP3/g6Xxcticzym?= =?us-ascii?Q?j5bHGXdcYD+rlcX6g//OsH07Eys8FNT2s54tjqeYvHc6dh9xPSYva6ImJmPM?= =?us-ascii?Q?T99t4rKxbgl9gQi6tpI+4HB63h01CcpndnrChAzr8/5VPRqTv2DRTpmlkFhG?= =?us-ascii?Q?+agqAEHeAfciW064VFQHeGx0jtXm2Mr6W/jGv0h8YywF+olB/euvx4t6rsgL?= =?us-ascii?Q?/1zZcE+ukosjEjW4liL86wZ6pzXAIaMgbpP72qV3TCeggSjO2HludFJXND9y?= =?us-ascii?Q?08nyLG0JAUSc3QNOzxEbHAME1AeJiruXkM++2PKI8bs9aWbdQs6GQU+gimce?= =?us-ascii?Q?jDGjwSAMGMmmPv/eTYRkPUZqTNT6EmigOdxT/BPO/T2eRRrurprAUaxqy9oL?= =?us-ascii?Q?bAOGyzs5/RZI12vQhf4t9k/jrFIbv+ZUqKhA5xigPgkPisc/g9VwqtI0ikhQ?= =?us-ascii?Q?qMu7hoyOz0uLO0wmDMpReXjGcA2CLN9OZJTQgjiicTt/opOydCSPaZAD2QLH?= =?us-ascii?Q?vvg1P9oZuX/xZ8wr7dEfDE3ifgcIuyWSeKPVRKL2CRvqvpIvRbYllz/zUb5l?= =?us-ascii?Q?+ZgZry5DOmwPt7/O7QjA6GQb3zEc8eN0Va+Xa3QYImRtZhZof2fPiWeOf4dm?= =?us-ascii?Q?5JnLwg4tx4Vr4/70mtQKtHyafK2Oxcq85olj4X2BjJJK53iS4X6NEB9pTIO9?= =?us-ascii?Q?GwOrUWrozZTHFu8b7OCDNuHW9b0+tfKaZ5FEH03Ww5oiUv+nJyvr7kBUJGH1?= =?us-ascii?Q?tM8SUip3zq3J9InOMt4FU0vZAJqEi+6GxcB4qNaRyHQvMYEB2OavkZZdKtqg?= =?us-ascii?Q?0K2PP2hr3HRHEL6xpthsuiAgC6SmDh6tb7CxsY3g2jNin+X1BR0N1nabYawB?= =?us-ascii?Q?d8e2EZHeaWw73MI5mYTjYAbU3V9hs5bW4EqmzPyG0GTU1EThdJ9gxY6K3zE+?= =?us-ascii?Q?cgJVHtpWrVQIgBjYRXcXLaY1Nj98uhWZZii4K4nfqv+2+fRmfYBV85bh0WTG?= =?us-ascii?Q?pfYExuj0suX4hs7mursKnx2HYjLognhop9dabrmMw5ibCiEyZhQFmMjjMxFV?= =?us-ascii?Q?X+3LGy0u925OMMB8zGiap38XTS96rBGDRJVkVo2cg2WJMF3wITW9sSURVfNZ?= =?us-ascii?Q?TJt7Sq+Enx5JV22sgS1C5fHklubfFH0t/?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1860;6:KDShgAmUQpNOIIkJRw2KlvF1MX0Xd12KZYGmWp0TGuH0fqrcKKPp9cRcroWel5gS4wNGZ25n1Oz1vuAL4n6EieQUHFrpyxjyKb2fqp3xKsHU5Nqwn1NEc5Jt8uLrfrMzlCHb/x5kyZFw2YxStjodkk3CDN/oAJZ9ITYuST8nZPCuI7xxievPER8K+5A0M8LDo4egkqbCFsa+XXLlGtKdIWPs3kqzNhORtgBXBvRTh1E4MHhQROW/u0dlSBcw9f12cOIYIUMrux4JiGcdFqZQo0TkSqoH6g/Ee9DJ4ryatk43KEHpy8R/6hFSj9hlhBkF;5:M5HyIRtv+XToh6Oe9eGzdrp2MEfzRKlPsjQJiafPRnE0W8HB0KPZKLLbMzjWMoXvI5yI2B6QZWiAxlqRRUCsD/2Jp0lZIYfNF1NXtmBDOFX63sVRl2Tyithv0zCa7k5AWlVOiYZhoiHnEzZi2AsY0Q==;24:VnSrrEj+GSwQNp4YEu5J6Fo8ItcjrQ/J6Bc+m8ImLUy/hjPp0mT3y/chWybtcAAAYCrDC2u37KqC4M0bTQ4QmGjc4ueyoZqCt5+H54sM/Ns=;7:cnbCAR/i8GXPma/dH8H5gjQb+Esx47/ID0/Z9dfHFQ0Z86jsP/c5CRimKP2Kxr5BeeyStg/niQXOXEpjb0kyKiGY7uszkesIzv4J99VBn8xgPwbVAlZJI02z9Gca1KfbeSl3tbMVyuiVZ3wMaURt5s7UKrYM+iidFXvOj6GujiV2HhNHVL8rsU+OnHGr30WqDGIknL1bIH0zVJQIhfzND7GNAzFjYPpM28vUcecEJA0dtqFWZXjshEtJNQDvd71/ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1860;20:EMPQjgLQjahG+OVlw/Y4V+DfzZZda1voXKkGsnpuzW35yrEA0HcC0NWdJZzB5uGrNmld15ldaQhIU2TAHQdgQleE+1KfFA+PqG58Gfq1DWhvGonqi1YnqH4OErA0iBlPqwc2tPp8qeKgSJBofIum7DRFO55g3MlzsbmAz99QFKs=;23:rkTc1pJ9km+BehRKtYmvvzVxcMZYviM7Sg4Ndy9sxnP+PEspCIQoVbd/IXtWESmr6hJbPS1v5SqKTX5Mm0FwbXDTPOnqfrionrBwf1K1FXo5VF+KnYecDP40R5tt9lSk5VHgyFlaoD/zPCzfS6U+TWzrhMNMospOr6B079vn13KIex/WK3Tky+2hwOqYKKS/ X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2016 15:00:59.5432 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1860 X-OriginatorOrg: virtuozzo.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Vladimir Davydov --- mm/memcontrol.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 67109d556a4a..32b2f33865f9 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4033,6 +4033,7 @@ static DEFINE_IDR(mem_cgroup_idr); static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n) { + VM_BUG_ON(atomic_read(&memcg->id.ref) <= 0); atomic_add(n, &memcg->id.ref); } @@ -4056,6 +4057,7 @@ static struct mem_cgroup *mem_cgroup_id_get_active(struct mem_cgroup *memcg) static void mem_cgroup_id_put_many(struct mem_cgroup *memcg, unsigned int n) { + VM_BUG_ON(atomic_read(&memcg->id.ref) < n); if (atomic_sub_and_test(n, &memcg->id.ref)) { idr_remove(&mem_cgroup_idr, memcg->id.id); memcg->id.id = 0; @@ -4176,6 +4178,7 @@ static struct mem_cgroup *mem_cgroup_alloc(void) INIT_LIST_HEAD(&memcg->cgwb_list); #endif idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); + atomic_set(&memcg->id.ref, 1); return memcg; fail: if (memcg->id.id > 0) @@ -4245,7 +4248,6 @@ fail: static int mem_cgroup_css_online(struct cgroup_subsys_state *css) { /* Online state pins memcg ID, memcg ID pins CSS */ - mem_cgroup_id_get(mem_cgroup_from_css(css)); css_get(css); return 0; } -- 2.1.4