From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753326Ab2H2Qtb (ORCPT ); Wed, 29 Aug 2012 12:49:31 -0400 Received: from mail4-relais-sop.national.inria.fr ([192.134.164.105]:35228 "EHLO mail4-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751149Ab2H2Qta (ORCPT ); Wed, 29 Aug 2012 12:49:30 -0400 X-IronPort-AV: E=Sophos;i="4.80,335,1344204000"; d="scan'208";a="154160464" From: Julia Lawall To: linux-kernel@vger.kernel.org Cc: kernel-janitors@vger.kernel.org Subject: [PATCH 0/7] fix error return code Date: Wed, 29 Aug 2012 18:49:10 +0200 Message-Id: <1346258957-7649-1-git-send-email-Julia.Lawall@lip6.fr> X-Mailer: git-send-email 1.7.8.6 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org These patches fix cases where the return code appears to be unintentially nonnegative. The complete semantic match that finds the problem is as follows: (http://coccinelle.lip6.fr/) // @ok exists@ identifier f,ret,i; expression e; constant c; @@ f(...) { <+... ( return -c@i; | ret = -c@i; ... when != ret = e return ret; | if (ret < 0) { ... return ret; } ) ...+> } @r exists@ identifier ret,l,ok.f; expression e1,e2,e3; statement S; position p1,p2,p3; @@ f(...) { ... when any ( if@p1 (\(ret < 0\|ret != 0\)) { ... return ret; } | ret@p1 = 0 ) ... when != ret = e1 when != &ret ( if (<+... ret = e3 ...+>) S | if (<+... &ret ...+>) S | if@p2(...) { ... when != ret = e2 when forall return@p3 ret; } ) ... when any } @bad exists@ position r.p1,r.p2; statement S1,S2; identifier r.ret; expression e1; @@ ( if@p1 (\(ret < 0\|ret != 0\)) S1 | ret@p1 = 0 ) ... when any ret = e1 ... when any if@p2(...) S2 @bad2@ position r.p1,r.p2; identifier r.ret; expression e1; statement S2; @@ ret@p1 = 0 ... when != if (...) { ... ret = e1 ... return ret; } when any if@p2(...) S2 @script:python depends on !bad && !bad2@ p1 << r.p1; p2 << r.p2; p3 << r.p3; @@ cocci.print_main("",p1) cocci.print_secs("",p2) cocci.print_secs("",p3) //