summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Vossen <rvossen@broadcom.com>2011-08-23 14:13:58 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-23 13:10:14 -0700
commit49d468f64d59016030c2835a423833e7b45ccce5 (patch)
tree5f446a8aa1aeb5ba2fc823face2455d0eae74556
parent183eeb985a2cdbf37c7850c5e8e99cc1cc26901f (diff)
downloadop-kernel-dev-49d468f64d59016030c2835a423833e7b45ccce5.zip
op-kernel-dev-49d468f64d59016030c2835a423833e7b45ccce5.tar.gz
staging: brcm80211: bugfix for exception on Sparc platforms
Problem would pop up during driver load on a Sun Fire V120 and manifested itself as an exception. This was caused by int* pointers provided to memcpy() that were not aligned on an int boundary. The pointer type provided to memcpy() is used by the compiler for optimization purposes. Fix was to cast the int* pointers to void* pointers. Bernhard R. Link and David S. Miller provided valuable feedback, thanks gents. Reviewed-by: Arend van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/staging/brcm80211/brcmsmac/main.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/staging/brcm80211/brcmsmac/main.c b/drivers/staging/brcm80211/brcmsmac/main.c
index c625c25..7e729d29 100644
--- a/drivers/staging/brcm80211/brcmsmac/main.c
+++ b/drivers/staging/brcm80211/brcmsmac/main.c
@@ -6111,9 +6111,12 @@ _brcms_c_ioctl(struct brcms_c_info *wlc, int cmd, void *arg, int len,
/* default argument is generic integer */
pval = arg ? (int *)arg : NULL;
- /* This will prevent the misaligned access */
+ /*
+ * This will prevent misaligned access. The (void *) cast prevents a
+ * memcpy alignment issue on e.g. Sparc64 platforms.
+ */
if (pval && (u32) len >= sizeof(val))
- memcpy(&val, pval, sizeof(val));
+ memcpy((void *)&val, (void *)pval, sizeof(val));
else
val = 0;
OpenPOWER on IntegriCloud