Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754115Ab3JJCX0 (ORCPT ); Wed, 9 Oct 2013 22:23:26 -0400 Received: from cdptpa-outbound-snat.email.rr.com ([107.14.166.226]:46972 "EHLO cdptpa-oedge-vip.email.rr.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752045Ab3JJCXZ (ORCPT ); Wed, 9 Oct 2013 22:23:25 -0400 Date: Wed, 9 Oct 2013 22:23:23 -0400 From: Steven Rostedt To: Andrey Konovalov Cc: Dave Jones , linux-kernel@vger.kernel.org, fweisbec@gmail.com, mingo@redhat.com, Dmitry Vyukov , Kostya Serebryany Subject: Re: Potential out-of-bounds in ftrace_regex_release Message-ID: <20131009222323.04fd1a0d@gandalf.local.home> In-Reply-To: References: <20131002185723.GA32614@redhat.com> <1380745082.12351.6.camel@pippen.local.home> <20131002223437.GA15728@redhat.com> X-Mailer: Claws Mail 3.9.2 (GTK+ 2.24.20; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-RR-Connecting-IP: 107.14.168.118:25 X-Cloudmark-Score: 0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1410 Lines: 43 On Wed, 9 Oct 2013 14:05:26 +0400 Andrey Konovalov wrote: > So I still think that the bug is in 'trage_get_user()': > Checking that 'parser->idx < parser->size - 1' is not performed in 'if > (isspace(ch))' section, so 'parser->idx' becomes equal to > 'parser->size' after 'parser->buffer[parser->idx++] = ch;'. > (However in 'while (cnt && !isspace(ch))' loop checking is performed.) Yep, you are correct. I put in some printk's and did same writing to the set_events file and was able to prove that I could get that "0" written into the +1 overflow boundary. Can you try this patch to see if it fixes it for you. Thanks, -- Steve diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d5f7c4d..063a92b 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -843,9 +843,12 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf, if (isspace(ch)) { parser->buffer[parser->idx] = 0; parser->cont = false; - } else { + } else if (parser->idx < parser->size - 1) { parser->cont = true; parser->buffer[parser->idx++] = ch; + } else { + ret = -EINVAL; + goto out; } *ppos += read; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/