From patchwork Tue Sep 7 13:55:00 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Namhyung Kim X-Patchwork-Id: 64012 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 66A97B6EFE for ; Tue, 7 Sep 2010 23:55:44 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756860Ab0IGNzP (ORCPT ); Tue, 7 Sep 2010 09:55:15 -0400 Received: from mail-pv0-f174.google.com ([74.125.83.174]:51691 "EHLO mail-pv0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756159Ab0IGNzM (ORCPT ); Tue, 7 Sep 2010 09:55:12 -0400 Received: by pvg2 with SMTP id 2so1743059pvg.19 for ; Tue, 07 Sep 2010 06:55:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=TYU22IGDsW1VZgPxP68HyQB2EMcgMFINZLqf9q1P1mU=; b=Xjwbq6sneGAgZ+d+HZGKbmrOIj7uSHxz/wJaWYQVIMXwUeJ1Ox87Wv1bHtUhFHXot2 04LSNJ6vm9A42on6y2Y72ypdrTYc17z3y/4yjnSsHr7Q+mgmZg5mQuhYXcbGOfYOHDOp Cz09STl1i/8geYPB7dGWQEQEGWocbmGbx7Vx8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=K4Tgl5hRQRZkJGiDNaTe4gkhLPtQnvhFOJMiojNSiC+7swsD2idnriYHoq9UjvM2Dh vFtKecTRwg3MVW/XrCDtbXv0n9qIl6QSJ8Jpkq/hif3fAEqYk7e6Lci3Km76YWLITXIh hDWzIm+xulyquDjjuXfXFh4J0UPxaZhEcJVJ0= Received: by 10.142.238.9 with SMTP id l9mr9078wfh.230.1283867710565; Tue, 07 Sep 2010 06:55:10 -0700 (PDT) Received: from localhost.localdomain ([211.202.140.224]) by mx.google.com with ESMTPS id t11sm5841072wfc.22.2010.09.07.06.55.06 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 07 Sep 2010 06:55:09 -0700 (PDT) From: Namhyung Kim To: "David S. Miller" , netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH] net: remove address space warnings in net/socket.c Date: Tue, 7 Sep 2010 22:55:00 +0900 Message-Id: <1283867700-24132-1-git-send-email-namhyung@gmail.com> X-Mailer: git-send-email 1.7.2.2 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Casts __kernel to __user pointer require __force markup, so add it. Also sock_get/setsockopt() takes @optval and/or @optlen arguments as user pointers but were taking kernel pointers, use new variables 'uoptval' and/or 'uoptlen' to fix it. These remove following warnings from sparse: net/socket.c:1922:46: warning: cast adds address space to expression () net/socket.c:3061:61: warning: incorrect type in argument 4 (different address spaces) net/socket.c:3061:61: expected char [noderef] *optval net/socket.c:3061:61: got char *optval net/socket.c:3061:69: warning: incorrect type in argument 5 (different address spaces) net/socket.c:3061:69: expected int [noderef] *optlen net/socket.c:3061:69: got int *optlen net/socket.c:3063:67: warning: incorrect type in argument 4 (different address spaces) net/socket.c:3063:67: expected char [noderef] *optval net/socket.c:3063:67: got char *optval net/socket.c:3064:45: warning: incorrect type in argument 5 (different address spaces) net/socket.c:3064:45: expected int [noderef] *optlen net/socket.c:3064:45: got int *optlen net/socket.c:3078:61: warning: incorrect type in argument 4 (different address spaces) net/socket.c:3078:61: expected char [noderef] *optval net/socket.c:3078:61: got char *optval net/socket.c:3080:67: warning: incorrect type in argument 4 (different address spaces) net/socket.c:3080:67: expected char [noderef] *optval net/socket.c:3080:67: got char *optval Signed-off-by: Namhyung Kim --- net/socket.c | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/net/socket.c b/net/socket.c index 2270b94..cb43f22 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1919,7 +1919,8 @@ SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags) * Afterwards, it will be a kernel pointer. Thus the compiler-assisted * checking falls down on this. */ - if (copy_from_user(ctl_buf, (void __user *)msg_sys.msg_control, + if (copy_from_user(ctl_buf, + (void __user __force *)msg_sys.msg_control, ctl_len)) goto out_freectl; msg_sys.msg_control = ctl_buf; @@ -3054,14 +3055,19 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen) { mm_segment_t oldfs = get_fs(); + char __user *uoptval; + int __user *uoptlen; int err; + uoptval = (char __user __force *) optval; + uoptlen = (int __user __force *) optlen; + set_fs(KERNEL_DS); if (level == SOL_SOCKET) - err = sock_getsockopt(sock, level, optname, optval, optlen); + err = sock_getsockopt(sock, level, optname, uoptval, uoptlen); else - err = sock->ops->getsockopt(sock, level, optname, optval, - optlen); + err = sock->ops->getsockopt(sock, level, optname, uoptval, + uoptlen); set_fs(oldfs); return err; } @@ -3071,13 +3077,16 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, char *optval, unsigned int optlen) { mm_segment_t oldfs = get_fs(); + char __user *uoptval; int err; + uoptval = (char __user __force *) optval; + set_fs(KERNEL_DS); if (level == SOL_SOCKET) - err = sock_setsockopt(sock, level, optname, optval, optlen); + err = sock_setsockopt(sock, level, optname, uoptval, optlen); else - err = sock->ops->setsockopt(sock, level, optname, optval, + err = sock->ops->setsockopt(sock, level, optname, uoptval, optlen); set_fs(oldfs); return err;