Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755291AbZAXHgv (ORCPT ); Sat, 24 Jan 2009 02:36:51 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750878AbZAXHgn (ORCPT ); Sat, 24 Jan 2009 02:36:43 -0500 Received: from mail-fx0-f20.google.com ([209.85.220.20]:61000 "EHLO mail-fx0-f20.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750848AbZAXHgm (ORCPT ); Sat, 24 Jan 2009 02:36:42 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; b=Rbz5AYwUiwO2xCek9fU6JD2YoyTaSTGTMk5QgQ1xarENO/3jcCuRqQb8M1UkVyXbes woIXbCZWWKhb164SzPlwNKNeJiW2iWbrPQsBhn6cKymDf3JirZp8zpoqGKQRFuTCsGba CuUqMR3Q1+KYc2TXTAy4tQo0kE24lHgy0NtT8= Date: Sat, 24 Jan 2009 10:36:38 +0300 From: Cyrill Gorcunov To: Hiroshi Shimamoto Cc: "H. Peter Anvin" , Ingo Molnar , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: Re: [RFC v2 -tip 3/3] x86: ia32_signal: use {get|put}_user_try and catch Message-ID: <20090124073638.GA8752@localhost> References: <4962CAAE.6090300@ct.jp.nec.com> <496476D0.5040607@zytor.com> <497A5737.8030408@ct.jp.nec.com> <497A57CE.3080602@ct.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <497A57CE.3080602@ct.jp.nec.com> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2992 Lines: 90 [Hiroshi Shimamoto - Fri, Jan 23, 2009 at 03:50:38PM -0800] | From: Hiroshi Shimamoto | | Impact: use new framework | | Use {get|put}_user_try, catch, and _ex in arch/x86/ia32/ia32_signal.c. | | Note: this patch contains "WARNING: line over 80 characters", because when | introducing new block I insert an indent to avoid mistakes by edit. | | Signed-off-by: Hiroshi Shimamoto | --- | arch/x86/ia32/ia32_signal.c | 365 +++++++++++++++++++++++-------------------- | 1 files changed, 195 insertions(+), 170 deletions(-) | | diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c | index 9dabd00..dd77ac0 100644 | --- a/arch/x86/ia32/ia32_signal.c | +++ b/arch/x86/ia32/ia32_signal.c | @@ -46,78 +46,83 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where); | ... | + put_user_try { | + /* If you change siginfo_t structure, please make sure that | + this code is fixed accordingly. | + It should never copy any pad contained in the structure | + to avoid security leaks, but must copy the generic | + 3 ints plus the relevant union member. */ | + put_user_ex(from->si_signo, &to->si_signo); | + put_user_ex(from->si_errno, &to->si_errno); | + put_user_ex((short)from->si_code, &to->si_code); | + | + if (from->si_code < 0) { | + put_user_ex(from->si_pid, &to->si_pid); | + put_user_ex(from->si_uid, &to->si_uid); | + put_user_ex(ptr_to_compat(from->si_ptr), &to->si_ptr); | + } else { | + /* | + * First 32bits of unions are always present: | + * si_pid === si_band === si_tid === si_addr(LS half) | + */ | + put_user_ex(from->_sifields._pad[0], | + &to->_sifields._pad[0]); | + switch (from->si_code >> 16) { | + case __SI_FAULT >> 16: | + break; | + case __SI_CHLD >> 16: | + put_user_ex(from->si_utime, &to->si_utime); | + put_user_ex(from->si_stime, &to->si_stime); | + put_user_ex(from->si_status, &to->si_status); | + /* FALL THROUGH */ | + default: Hi Hiroshi, may I ask why we use default here? | + case __SI_KILL >> 16: | + put_user_ex(from->si_uid, &to->si_uid); | + break; | + case __SI_POLL >> 16: | + put_user_ex(from->si_fd, &to->si_fd); | + break; | + case __SI_TIMER >> 16: | + put_user_ex(from->si_overrun, &to->si_overrun); | + put_user_ex(ptr_to_compat(from->si_ptr), | + &to->si_ptr); | + break; | + /* This is not generated by the kernel as of now. */ | + case __SI_RT >> 16: | + case __SI_MESGQ >> 16: | + put_user_ex(from->si_uid, &to->si_uid); | + put_user_ex(from->si_int, &to->si_int); | + break; | + } | } | - } | + } put_user_catch(err); | + | return err; | } | ... - Cyrill - -- 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/