diff options
| -rw-r--r-- | fs/lockd/host.c | 3 | ||||
| -rw-r--r-- | fs/lockd/xdr.c | 4 | ||||
| -rw-r--r-- | fs/lockd/xdr4.c | 4 | ||||
| -rw-r--r-- | include/linux/lockd/xdr.h | 8 |
4 files changed, 10 insertions, 9 deletions
diff --git a/fs/lockd/host.c b/fs/lockd/host.c index ed103387964..dc41e46ef74 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c | |||
| @@ -453,9 +453,10 @@ void nlm_release_host(struct nlm_host *host) | |||
| 453 | */ | 453 | */ |
| 454 | void nlm_host_rebooted(const struct nlm_reboot *info) | 454 | void nlm_host_rebooted(const struct nlm_reboot *info) |
| 455 | { | 455 | { |
| 456 | __be32 *p = (__be32 *)&info->priv.data; | ||
| 456 | const struct sockaddr_in sin = { | 457 | const struct sockaddr_in sin = { |
| 457 | .sin_family = AF_INET, | 458 | .sin_family = AF_INET, |
| 458 | .sin_addr.s_addr = info->addr, | 459 | .sin_addr.s_addr = *p, |
| 459 | }; | 460 | }; |
| 460 | struct hlist_head *chain; | 461 | struct hlist_head *chain; |
| 461 | struct hlist_node *pos; | 462 | struct hlist_node *pos; |
diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c index 1f226290c67..4cc7d01a1eb 100644 --- a/fs/lockd/xdr.c +++ b/fs/lockd/xdr.c | |||
| @@ -349,8 +349,8 @@ nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp) | |||
| 349 | if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) | 349 | if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) |
| 350 | return 0; | 350 | return 0; |
| 351 | argp->state = ntohl(*p++); | 351 | argp->state = ntohl(*p++); |
| 352 | /* Preserve the address in network byte order */ | 352 | memcpy(&argp->priv.data, p, sizeof(argp->priv.data)); |
| 353 | argp->addr = *p++; | 353 | p += XDR_QUADLEN(SM_PRIV_SIZE); |
| 354 | return xdr_argsize_check(rqstp, p); | 354 | return xdr_argsize_check(rqstp, p); |
| 355 | } | 355 | } |
| 356 | 356 | ||
diff --git a/fs/lockd/xdr4.c b/fs/lockd/xdr4.c index 50c493a8ad8..61d1714a470 100644 --- a/fs/lockd/xdr4.c +++ b/fs/lockd/xdr4.c | |||
| @@ -356,8 +356,8 @@ nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp | |||
| 356 | if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) | 356 | if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) |
| 357 | return 0; | 357 | return 0; |
| 358 | argp->state = ntohl(*p++); | 358 | argp->state = ntohl(*p++); |
| 359 | /* Preserve the address in network byte order */ | 359 | memcpy(&argp->priv.data, p, sizeof(argp->priv.data)); |
| 360 | argp->addr = *p++; | 360 | p += XDR_QUADLEN(SM_PRIV_SIZE); |
| 361 | return xdr_argsize_check(rqstp, p); | 361 | return xdr_argsize_check(rqstp, p); |
| 362 | } | 362 | } |
| 363 | 363 | ||
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index 6b519926385..6338866222a 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h | |||
| @@ -83,10 +83,10 @@ struct nlm_res { | |||
| 83 | * statd callback when client has rebooted | 83 | * statd callback when client has rebooted |
| 84 | */ | 84 | */ |
| 85 | struct nlm_reboot { | 85 | struct nlm_reboot { |
| 86 | char * mon; | 86 | char *mon; |
| 87 | unsigned int len; | 87 | unsigned int len; |
| 88 | u32 state; | 88 | u32 state; |
| 89 | __be32 addr; | 89 | struct nsm_private priv; |
| 90 | }; | 90 | }; |
| 91 | 91 | ||
| 92 | /* | 92 | /* |
