Message ID | 20170120205821.8577-1-simon.marchi@ericsson.com |
---|---|
State | New, archived |
Headers |
Received: (qmail 35507 invoked by alias); 20 Jan 2017 21:00:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <gdb-patches.sourceware.org> List-Unsubscribe: <mailto:gdb-patches-unsubscribe-##L=##H@sourceware.org> List-Subscribe: <mailto:gdb-patches-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/gdb-patches/> List-Post: <mailto:gdb-patches@sourceware.org> List-Help: <mailto:gdb-patches-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 6054 invoked by uid 89); 20 Jan 2017 21:00:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-HELO: sessmg23.ericsson.net Received: from sessmg23.ericsson.net (HELO sessmg23.ericsson.net) (193.180.251.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 20 Jan 2017 21:00:24 +0000 Received: from ESESSHC013.ericsson.se (Unknown_Domain [153.88.183.57]) by (Symantec Mail Security) with SMTP id E7.06.25710.56A72885; Fri, 20 Jan 2017 22:00:22 +0100 (CET) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.57) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 20 Jan 2017 21:58:36 +0100 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from elxcz23q12-y4.ca.am.ericsson.se (192.75.88.130) by AM3PR07MB386.eurprd07.prod.outlook.com (2a01:111:e400:8820::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.6; Fri, 20 Jan 2017 20:58:33 +0000 From: Simon Marchi <simon.marchi@ericsson.com> To: <gdb-patches@sourceware.org> CC: Simon Marchi <simon.marchi@ericsson.com> Subject: [PATCH] Fix Py_DECREF being executed without holding the GIL in fnpy_call Date: Fri, 20 Jan 2017 15:58:21 -0500 Message-ID: <20170120205821.8577-1-simon.marchi@ericsson.com> MIME-Version: 1.0 Content-Type: text/plain X-ClientProxiedBy: BN6PR1001CA0006.namprd10.prod.outlook.com (2603:10b6:405:28::19) To AM3PR07MB386.eurprd07.prod.outlook.com (2a01:111:e400:8820::12) X-MS-Office365-Filtering-Correlation-Id: 30cc4de0-c213-4d27-c96d-08d441771903 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM3PR07MB386; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 3:RMvIm9N1YGAnigb1jWMU1dSdXetcdngIxlm0l0dIE9nMEi7q3r7wQCaRJ4lqMb5N58OmYM3f269DmCxNaIN+llaoMvtoS82L+O/gJgAtlJ0hpRV8hLUz9rGgMetDVl4UMdwI+ZwGOXEUvp3vmvtiUMl50jJLem+BR0j4Z+9LTosoKwRPdlKbjFYdG4a52i2IPuRPMpHyLxqDQ4Au/lYYEh78dnkuZ4NIPtlDyZmLwylu1rUEWw4K3Up7FOWCqN3srBMVaOI25UwelThdY8DVUA== X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 25:81vJ7Icv5qgT6/2vnJQWy1uJl8ptRAXI/Sci40B8mEK7zOWPgsuVx5JSv94bFZYOPlyCVDOiMdAYApp0cI7DY7c45GlgIlyrr5WsbaN0KYWyePJdjX7gPqS2GAsl3XdvFHz6slq0hYQEBX5PfU/k/OhtAUJe4CtNpeWf0iOwjEb4iFqgCC33psHNz8GroUa2ITdEMrqiTGgbf1sbDgYbjLR8sL+Ai/yRcJY7vW2vkSocy3tlDeBUj4Na4J6+5oeSDeigBZufsvv/GVm8WySulG+iLH20iQoiEpug5a6wllTp29TumWAj327GHeHtTdMcGDk0fnx68fUiBE4ZmpeuJIYPU0rm8eK48d15+PJIbFVzkxtPFZUn3RNlbO9rx712ugms62nn2q86Va+slpnVVtLQzBXy3Rii1wA1aQ9TaZPjWO0vEj4LU8b65jEiAV2tf9k8qF56JLDhdX3a7mSt08XP/8Sk+aSH1GH6FTaX1e4XErcqnqPUAC9iv3Y1QCXsFnsCDiu/fIzgJU4gchf/HOUF01ariteth7A5RyOJVJn9TXd9NdWDV+nByNRSWhZh5jEmire2DuMpqr2Lf+UfYDrd8g/PYFmMfjN3dbnLcsCySfNL5DtOfG/5jtN8p12G1nVpoBUXBzC7l7WQ+QeB6rAW1Y3o7GK18E/uKAe9ab7lEIvvNCHoansEnMK30uvFPMmeNKyWpD2aA2bRYpAu4zxlW8ZzQQ6fzzb/sW6F+DNNKQ1+pfEji8JTVb6FbHsqZoYCt3ibn+r7QuewH3v60Q== X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 31:Md/VdpIIu9IsHUEP5mckYpXhkJ/ZRugOZdlNmQxTaszFwBoubAdzsrkv+WZ/z/YHbUPlNzApwAmlXtd0EI0poyJCzcL6deZrtQzKlqLCQzJTaasv3P/wEo6S+VSj6Aui0rVKXFffEZ5dspMp4edixcyI/4eTMD79lizsh3XWexWZjfaV+I1QLNHNP86aa6TQ0rfOo04WqvB5Wy1oa/jC4SFIUpz9ta66Aawy03daKWEdp5K+DwbagWZA1BlQebS0+9vArgCgKZGQMPJ89hut8Q==; 20:zvbj+aZ45/2JZVf+Uvl5o2J/wm7Hw08z1ysFNRBxHvZEZuyz6QrZYpRYz5e1FJczaTjn1mg65YO7cMMh9tZNBjW23lUSPDCRwrwbhYpLN10G5Ox7sUPSIw9ovXKp497jsfaRPv35WGm1frsGu76RCt+2nfO+DWpNN4uUmmhwtEm9x5BGRb2tqTbbioAD2h/bRfD5dFZMz96lL/puw0wRV6Fcf7OBXy+nlItAS91qtOrXum7DSDEtsAkF8ixTUnvBiaGnX/ZWDHo8odTCLxSUjXmJMGw6M+ENXsVwldHQbfBKIJyAFKjDFR2kW200ePNKtSvsZJ8HuXqYoBFucCDHo3hDy0GEJDN6l6QZ8zotLhgkYhOSBITNcamvNzJGnjdIVtomd5zr1gbAyxEJc6jDuk9q4kI9bdv/GzDnd/jr+kjXhNLBVJBsGSZ4cectXJXpQj/9o6SpDuexaBqjh+zBrAdqQ2GhzRSSG/P7cd13pfbtcsanf6MG0m/7Zz40sBsC X-Microsoft-Antispam-PRVS: <AM3PR07MB3860BFDBF2C89DCCF8EEAF4ED710@AM3PR07MB386.eurprd07.prod.outlook.com> X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123564025)(20161123560025)(20161123562025)(20161123555025)(6072148); SRVR:AM3PR07MB386; BCL:0; PCL:0; RULEID:; SRVR:AM3PR07MB386; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 4:y6SKuyEjMWDK5NB0HJ8psCEEQiQY/2XcR6hnZWjEyZuB+lsGrX9X3U96pVnOuKkuQdgfHZQvX7UGHlDvCJ6p5Q6WOtLJbkA+VLOH5u29MgxWgtYX1895YLAvqThEcX9cZ3twmBgLd5q8BQrLdec7IEkgQ3wyMhnnq2F1PDwtG3Erb0g4HtqqtjXEKWhtf2sA+S9a9XxL+r8PFuDHHdm6W7qu/iY1/ZQeUlv6Ve4RAtJv7GT7LKMK6TT4jesOEMGJj12nkvqZVJuENo2fgNh7qjEJ2USz6j/tM9LdArCgSR32JCMl0+6VrEIg6DM5FHY6TAw3LjcvreLwB+QbjEh9FRRef9DlYArvm1BN9tiqRZ1FyGvMOdQ/7gN5napq3zUJ1VnyI/JojdKUJFnl0P+tj0FupeT5ex2rVhfyv7ZhNOh400DQ0l8PBKquppDEhoOu2B4+ujyiq8dXccRxUmRwr3AJGxDm9WcgsywIyzpYjqYehG/TLel2xlxpBfrPfrVmjw/ZRbKoWJtu1138oJaPAr12cXcFxzMaM1pPbfgP5Zx/CAjqeqYAu4wl/q4ZLtAnZKLqxYr7y5P2pvqp+jf2pQ== X-Forefront-PRVS: 01930B2BA8 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(54534003)(53936002)(189998001)(6116002)(47776003)(86362001)(105586002)(450100001)(5003940100001)(106356001)(2351001)(4326007)(107886002)(6512007)(3846002)(6506006)(4001430100002)(66066001)(1076002)(50226002)(33646002)(7736002)(81166006)(42186005)(81156014)(48376002)(305945005)(6486002)(101416001)(8676002)(5660300001)(2906002)(50466002)(110136003)(6666003)(50986999)(97736004)(38730400001)(92566002)(36756003)(6916009)(68736007); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR07MB386; H:elxcz23q12-y4.ca.am.ericsson.se; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM3PR07MB386; 23:h7Le+8gDIyFZp14cvIY3IEn6atyTvvAsKC4BY5x1px?= =?us-ascii?Q?s86sJEP/0jHCvW0gVbWy1Phn+c3NDKW3MzHYcPMBx5wXetj8WC5CVTejfJe/?= =?us-ascii?Q?GFUHfu7GHClEODTwKRpBdgSKVgL9hKIlT7uaqSuzDcfsgApwKJvVUUY7+T7N?= =?us-ascii?Q?nnMGsWzA/Zs1BEmBx62kpzIPLhzTamerEB3+Hrq1VLtzTaVDQv7dznbkprSb?= =?us-ascii?Q?qqFCvZkn8CaeXveP1PFdBz/7+f5SxYfhTjR69OxJA6DsdkhMdSUaMyGoRI9y?= =?us-ascii?Q?EPStI2rxQFS6ou+GbUZbGz//WuwRm4Ob7HfpA7qv5SmLFDukNyvJbtnkTslI?= =?us-ascii?Q?dUnp8YFO/oVlHV8kTkCNUK8d90vmRwlIX/DADy23UM+2cKnPzzk5j4ZUTlGu?= =?us-ascii?Q?N0d9zrfBumVi7adn/hJs/fv8YtA3ioSxHmHoYrSZ7xdM8dDo/ZTuRFj6YOFS?= =?us-ascii?Q?J8XO3WIbEPW6qTr6jZ8oEgnG0VZHsCuhylI2aGWYj4Ddq33KZF5RsFm7QHVQ?= =?us-ascii?Q?qYiNjHc0v9AZTLn2umv5p0ZRhm7Uva+4c7KimhgGRjmKfCCkwHA/wQrsNggg?= =?us-ascii?Q?aa+flb9cAP4jLsoZOLFAVRVBS9HKPhOg2eTfjTx9A9BW+oyqbd4pg9GvZNX4?= =?us-ascii?Q?Scy5FGWd2CLVsYTJWpeolXlGwHQwZaASNxA/WeVYXZ+OpnQLmXuvJRm9KnVS?= =?us-ascii?Q?OJOrx93yaEghR6FDwvkrjx8APrqdX041QG7cFZGkx7n5YaiK2+yyQhY07Opy?= =?us-ascii?Q?laFqOEX+6YYoAWQxBovBDgKerZejPF5zoMSRocuVxaEnmYXtXy1+37j8pPFT?= =?us-ascii?Q?46ogHCZeCNDC8EjAk26XaZoMbqKiWh0j+GWNUGPOARJ1I1sBBUNu37uX9VOx?= =?us-ascii?Q?5MOUZot/3R+ldk/lTmDUs+07DabSG4JTct6i19KBuRV7cTBdozXO8dTMYX6L?= =?us-ascii?Q?hEYCAwxUemNI5B9Kxj8k+BjJklht4bIyy+Hj/uFAB33Q5c6sWqc+8Grw6Got?= =?us-ascii?Q?waBfoGqxZKcUmahmWNBxu6aG97Vl/zph+msWYRt8OnVzBOxmUfW07u3dywit?= =?us-ascii?Q?hKegSx6oUvXECOhMg7lKhZf3FLwQ5ww9daLlbGCVP21O61MJp48tGEfqgEwA?= =?us-ascii?Q?BFXDegJ5kl1AAIMNTVoY6ndas9cB2eqDky31cYPO83gQKcETDViw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 6:dpvdu82xRqTiLiOQMDjouTNr1HExj8v+pMseB3GFe8Vem4uGQXmtLp14gKmyVa49u8JbGp0XKxHXfXAvWr/q59I1XlhTv/dGocTijg5+GzRTPTO4LFmm7n1EgCR12BrBnTADApZdovhPzbLTxLBgCBLBiio42uE48hq0zUos5Qg9lM+zFdGBbpDZ2OCrWNyPfkfHqst/Ll+iXtVZvVg1a/2/7hFMyP9B6fiW8PuFf/ASLBLqiTK//jN4H+e+kGj8smDUwj9HEC5VgbisY1LcBBKDK2dqtIHc7Nsq2ihmjenQlxrQC1CNNcGjeUHNQM4DAWycwI0UHj//S36RyeYa7NzqP597y0tVfjU2m5l4U2O47wDyiDgiY1r+TBJD9X+vhjgL6zAOFem//lG1MXt1u8xZyBEs8kpxl8Y22ZbDAmM=; 5:cHuQG1f9mkmuGRRDNMN9I2xa5FtLjKf6SdYTmjpF6e6jGIpkUKBUwpprbA28zWx7lEBdFNRJylorxxC2AMQKSlbWg9z0HAjIjmZsqCyJ7WbVrAgkwD5EA56gXljABky8yaPHkyPWLyAcdDzUSs0xMQ==; 24:FYiQDe1FaOKqHT12D7kGoyFmIY5Ey3PHlJe39v8qYk5oSrJjZYFGfZUVLoktKtswRxt5epoKgzkrNCPLRHIpE4LzZcR3Hq5tr9qs5Q5FdN4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB386; 7:SFwH/ghCJvL6fUev314f6BSWG14RgN+lCM7zSWg5bbJPwE8UoTcP94nHg7GzfDJnI7ImfXKf3EF4BNHEqyDXhHf9q6N/pDQXSfivDdrhQp3egKfO479B56RE2zrsGZUhHIqBd6KcUII1AJ5fZYxN5gdLD0CWxIAemfCMsqyoIBZw8O1Zqg/oWRS1Yy0+i+hLPxLWrNlDSj9kpPHdSKqMVI/8mGg/E4G/eagA9Z4iWN0ggZcELu/o7gaZYbPOfjAhDWXzp+0vGkGJPlp97JaNiH7mGODYhVu4E26sv/KAJfI3oEEfXUKiWpinbagQ6yJxHNdPMXANFAWJlXSLQ47gTCO3pKx3un1q+OfnulfTVpuXmJmB3+Z/x/nd4j4fyECdw0uOFdidNgZvVtsy+wC9wbMSe6Io6UMruMTye2o/mPWtCVomzIoc425XAPGLF8Ztbi4MhXVnERzY6Q6TWfpmsw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2017 20:58:33.8241 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR07MB386 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes |
Commit Message
Simon Marchi
Jan. 20, 2017, 8:58 p.m. UTC
When the gdbpy_ref objects get destroyed, they call Py_DECREF to decrement the reference counter of the python object they hold a reference to. Any time we call into the Python API, we should be holding the GIL. The gdbpy_enter object does that for us in an RAII-fashion. However, if gdbpy_enter is declared after a gdbpy_ref object in a function, gdbpy_enter's destructor will be called (and the GIL will be released) before gdbpy_ref's destructor is called. Therefore, we will end up calling Py_DECREF without holding the GIL. This became obvious with Python 3.6, where memory management functions have asserts to make sure that the GIL is held. This was exposed by the py-as-string.exp and py-function.exp test cases. For example: (gdb) p $_as_string(enum_valid) Fatal Python error: Python memory allocator called without holding the GIL Current thread 0x00007f7f7b21c780 (most recent call first): [1] 18678 abort (core dumped) ./gdb -nx testsuite/outputs/gdb.python/py-as-string/py-as-string #0 0x00007ffff618bc37 in raise () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007ffff618f028 in abort () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x00007ffff6b104d6 in Py_FatalError (msg=msg@entry=0x7ffff6ba15b8 "Python memory allocator called without holding the GIL") at Python/pylifecycle.c:1457 #3 0x00007ffff6a37a68 in _PyMem_DebugCheckGIL () at Objects/obmalloc.c:1972 #4 0x00007ffff6a3804e in _PyMem_DebugFree (ctx=0x7ffff6e65290 <_PyMem_Debug+48>, ptr=0x24f8830) at Objects/obmalloc.c:1994 #5 0x00007ffff6a38e1d in PyMem_Free (ptr=<optimized out>) at Objects/obmalloc.c:442 #6 0x00007ffff6b866c6 in _PyFaulthandler_Fini () at ./Modules/faulthandler.c:1369 #7 0x00007ffff6b104bd in Py_FatalError (msg=msg@entry=0x7ffff6ba15b8 "Python memory allocator called without holding the GIL") at Python/pylifecycle.c:1431 #8 0x00007ffff6a37a68 in _PyMem_DebugCheckGIL () at Objects/obmalloc.c:1972 #9 0x00007ffff6a3804e in _PyMem_DebugFree (ctx=0x7ffff6e652c0 <_PyMem_Debug+96>, ptr=0x7ffff46b6040) at Objects/obmalloc.c:1994 #10 0x00007ffff6a38f55 in PyObject_Free (ptr=<optimized out>) at Objects/obmalloc.c:503 #11 0x00007ffff6a5f27e in unicode_dealloc (unicode=unicode@entry=0x7ffff46b6040) at Objects/unicodeobject.c:1794 #12 0x00007ffff6a352a9 in _Py_Dealloc (op=0x7ffff46b6040) at Objects/object.c:1786 #13 0x000000000063f28b in gdb_Py_DECREF (op=0x7ffff46b6040) at /home/emaisin/src/binutils-gdb/gdb/python/python-internal.h:192 #14 0x000000000063fa33 in gdbpy_ref_policy::decref (ptr=0x7ffff46b6040) at /home/emaisin/src/binutils-gdb/gdb/python/py-ref.h:35 #15 0x000000000063fa77 in gdb::ref_ptr<_object, gdbpy_ref_policy>::~ref_ptr (this=0x7fffffffcdf0, __in_chrg=<optimized out>) at /home/emaisin/src/binutils-gdb/gdb/common/gdb_ref_ptr.h:91 #16 0x000000000064d8b8 in fnpy_call (gdbarch=0x2b50010, language=0x115d2c0 <c_language_defn>, cookie=0x7ffff46b7468, argc=1, argv=0x7fffffffcf48) at /home/emaisin/src/binutils-gdb/gdb/python/py-function.c:145 The fix is to place the gdbpy_enter first in the function. I also cleaned up the comments a bit and removed the unnecessary initialization of the value variable. gdb/ChangeLog: * python/py-function.c (fnpy_call): Reorder declarations to have the gdbpy_enter object declared first. --- gdb/python/py-function.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c index 13c7a11485..6762a6d56e 100644 --- a/gdb/python/py-function.c +++ b/gdb/python/py-function.c @@ -59,14 +59,13 @@ static struct value * fnpy_call (struct gdbarch *gdbarch, const struct language_defn *language, void *cookie, int argc, struct value **argv) { - struct value *value = NULL; - /* 'result' must be set to NULL, this initially indicates whether - the function was called, or not. */ - gdbpy_ref result; - + /* The gdbpy_enter object needs to be placed first, so that it's the last to + be destroyed. */ gdbpy_enter enter_py (gdbarch, language); - + struct value *value; + gdbpy_ref result; gdbpy_ref args (convert_values_to_python (argc, argv)); + /* convert_values_to_python can return NULL on error. If we encounter this, do not call the function, but allow the Python -> error code conversion below to deal with the Python exception.