: Fix a misalign access issue. (v2)
PATCH 1/1 : Fix a misalign access issue. (v2)
From: Graf Yang <[email protected]>
Replace u16ho with put/get_unaligned functions
Signed-off-by Graf Yang <[email protected]>
Cc Marcel Holtmann <[email protected]>
Cc David Miller <[email protected]>
Signed-off-by Bryan Wu <[email protected]>
--- include/net/irda/discovery.h | 3 --- net/irda/discovery.c | 8 +++++--- net/irda/irlmp.c | 5 +++-- net/irda/irnet/irnet_irda.c | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-)
include/net/irda/discovery.h +0 -3
@@ -57,9 +57,6 @@ typedef union {__u8 byte[2 ]; } __u16_host_order; -/* Same purpose, different application */ -#define u16ho (array) (* ((__u16 *) array)) -/* Types of discovery */ typedef enum { DISCOVERY_LOG, /* What's in our discovery log */
net/irda/discovery.c +5 -3
@@ -40,6 +40,8 @@#include <net/irda/discovery.h> +#include <asm/unaligned.h> +/* * Function irlmp_add_discovery (cachelog, discovery) *
@@ -87,7 +89,7 @@ void irlmp_add_discovery(hashbin_t *cachelog, discovery_t *new)*/ hashbin_remove_this (cachelog, (irda_queue_t *) node);/* Check if hints bits are unchanged */ -if (u16ho (node->data.hints) ==u16ho (new->data.hints)) +if (get_unaligned ((__u16 *)node->data.hints) ==get_unaligned ((__u16 *)new->data.hints))/* Set time of first discovery for this node */ new->firststamp = node->firststamp;kfree (node);
@@ -281,9 +283,9 @@ struct irda_device_info *irlmp_copy_discoveries(hashbin_t *log, int *pn,/* Mask out the ones we don't want : * We want to match the discovery mask, and to get only * the most recent one (unless we want old ones) */ -if ((u16ho (discovery->data.hints) & mask) && +if ((get_unaligned ((__u16 *)discovery->data.hints) & mask) && ((old_entries) || - ((jiffies - discovery->firststamp) < j_timeout)) ) { + ((jiffies - discovery->firststamp) < j_timeout))) {/* Create buffer as needed. * As this function get called a lot and most time * we don't have anything to put in the log (we are
net/irda/irlmp.c +3 -2
@@ -1062,7 +1062,8 @@ void irlmp_discovery_expiry(discinfo_t *expiries, int number)for (i =0 ; i < number; i++) {/* Check if we should notify client */ if ((client->expir_callback) && - (client->hint_mask.word &u16ho (expiries[i].hints) + (client->hint_mask.word & +get_unaligned ((__u16 *)expiries[i].hints) &0x7f7f ) ) client->expir_callback(&(expiries[i]), EXPIRY_TIMEOUT,
@@ -1086,7 +1087,7 @@ discovery_t *irlmp_get_discovery_response(void) IRDA_ASSERT(irlmp != NULL, return NULL;); -u16ho (irlmp->discovery_rsp.data.hints) = irlmp->hints.word; +put_unaligned (irlmp->hints.word, (__u16 *)irlmp->discovery_rsp.data.hints);/* * Set character set for device name (we use ASCII), and
net/irda/irnet/irnet_irda.c +2 -2
@@ -1673,7 +1673,7 @@ irnet_discovery_indication(discinfo_t * discovery,/* Notify the control channel */ irnet_post_event (NULL ,IRNET_DISCOVER , discovery->saddr, discovery->daddr, discovery->info, -u16ho (discovery->hints)); +get_unaligned ((__u16 *)discovery->hints));DEXIT (IRDA_OCB_TRACE ,"\n" ); }
@@ -1704,7 +1704,7 @@ irnet_expiry_indication(discinfo_t * expiry,/* Notify the control channel */ irnet_post_event (NULL ,IRNET_EXPIRE , expiry->saddr, expiry->daddr, expiry->info, -u16ho (expiry->hints)); +get_unaligned ((__u16 *)expiry->hints));DEXIT (IRDA_OCB_TRACE ,"\n" ); }
Signature · 1 line
1.5.5
David Miller
maintainerFrom: Bryan Wu <[email protected]>
Date: Tue, 13 May 2008 16:09:47 +0800
Quoted 8 lines
From: Graf Yang <[email protected]>
Replace u16ho with put/get_unaligned functions
Signed-off-by Graf Yang <[email protected]>Cc Marcel Holtmann <[email protected]>Cc David Miller <[email protected]>Signed-off-by Bryan Wu <[email protected]>
Marcel, please ACK this I'd like to apply it.
Thanks.
From: Bryan Wu <[email protected]>
Date: Tue, 13 May 2008 16:09:47 +0800
Quoted 4 lines
Replace u16ho with put/get_unaligned functions
Signed-off-by Graf Yang <[email protected]>Signed-off-by Bryan Wu <[email protected]>
Applied, thanks everyone.