Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753919AbYCBXXY (ORCPT ); Sun, 2 Mar 2008 18:23:24 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756428AbYCBXXR (ORCPT ); Sun, 2 Mar 2008 18:23:17 -0500 Received: from zeniv.linux.org.uk ([195.92.253.2]:46273 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753308AbYCBXXQ (ORCPT ); Sun, 2 Mar 2008 18:23:16 -0500 Date: Sun, 2 Mar 2008 23:23:14 +0000 From: Al Viro To: Yoshinori Sato Cc: linux-kernel@vger.kernel.org, Linus Torvalds Subject: [RFC] breakage in 4223cc34365e4 (h8300: uaccess.h update) Message-ID: <20080302232314.GW27894@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.3i Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2384 Lines: 44 After that commit in asm-h8300/uaccess.h we have #define get_user(x, ptr) \ ({ \ int __gu_err = 0; \ uint32_t __gu_val = 0; \ ^^^^^^^^^^^^^^^^^ switch (sizeof(*(ptr))) { \ case 1: \ case 2: \ case 4: \ __gu_val = *(ptr); \ break; \ case 8: \ memcpy(&__gu_val, ptr, sizeof (*(ptr))); \ ^^^^^^^^^^^^^^^^ which, of course, is FUBAR whenever we actually hit that case - memcpy of 8 bytes into uint32_t is obviously wrong. Why don't we simply do #define get_user(x, ptr) \ ({ \ int __gu_err = 0; \ typeof(*(ptr)) __gu_val = *ptr; \ switch (sizeof(*(ptr))) { \ case 1: \ case 2: \ case 4: \ case 8: \ break; \ default: \ __gu_err = __get_user_bad(); \ break; \ } \ (x) = __gu_val; \ __gu_err; \ }) and be done with that, anyway? -- 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/