diff options
Diffstat (limited to 'net/ipv4/ip_options.c')
| -rw-r--r-- | net/ipv4/ip_options.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c index c3118e1cd3b..ec93335901d 100644 --- a/net/ipv4/ip_options.c +++ b/net/ipv4/ip_options.c @@ -14,6 +14,7 @@  #include <linux/slab.h>  #include <linux/types.h>  #include <asm/uaccess.h> +#include <asm/unaligned.h>  #include <linux/skbuff.h>  #include <linux/ip.h>  #include <linux/icmp.h> @@ -350,7 +351,7 @@ int ip_options_compile(struct net *net,  				goto error;  			}  			if (optptr[2] <= optlen) { -				__be32 *timeptr = NULL; +				unsigned char *timeptr = NULL;  				if (optptr[2]+3 > optptr[1]) {  					pp_ptr = optptr + 2;  					goto error; @@ -359,7 +360,7 @@ int ip_options_compile(struct net *net,  				      case IPOPT_TS_TSONLY:  					opt->ts = optptr - iph;  					if (skb) -						timeptr = (__be32*)&optptr[optptr[2]-1]; +						timeptr = &optptr[optptr[2]-1];  					opt->ts_needtime = 1;  					optptr[2] += 4;  					break; @@ -371,7 +372,7 @@ int ip_options_compile(struct net *net,  					opt->ts = optptr - iph;  					if (rt)  {  						memcpy(&optptr[optptr[2]-1], &rt->rt_spec_dst, 4); -						timeptr = (__be32*)&optptr[optptr[2]+3]; +						timeptr = &optptr[optptr[2]+3];  					}  					opt->ts_needaddr = 1;  					opt->ts_needtime = 1; @@ -389,7 +390,7 @@ int ip_options_compile(struct net *net,  						if (inet_addr_type(net, addr) == RTN_UNICAST)  							break;  						if (skb) -							timeptr = (__be32*)&optptr[optptr[2]+3]; +							timeptr = &optptr[optptr[2]+3];  					}  					opt->ts_needtime = 1;  					optptr[2] += 8; @@ -403,10 +404,10 @@ int ip_options_compile(struct net *net,  				}  				if (timeptr) {  					struct timespec tv; -					__be32  midtime; +					u32  midtime;  					getnstimeofday(&tv); -					midtime = htonl((tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC); -					memcpy(timeptr, &midtime, sizeof(__be32)); +					midtime = (tv.tv_sec % 86400) * MSEC_PER_SEC + tv.tv_nsec / NSEC_PER_MSEC; +					put_unaligned_be32(midtime, timeptr);  					opt->is_changed = 1;  				}  			} else {  |