aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/lockd/host.c3
-rw-r--r--fs/lockd/xdr.c4
-rw-r--r--fs/lockd/xdr4.c4
-rw-r--r--include/linux/lockd/xdr.h8
4 files changed, 10 insertions, 9 deletions
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index ed103387964d..dc41e46ef74c 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 */
454void nlm_host_rebooted(const struct nlm_reboot *info) 454void 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 1f226290c67c..4cc7d01a1eb5 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 50c493a8ad8e..61d1714a470e 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 6b5199263858..6338866222a8 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 */
85struct nlm_reboot { 85struct 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/*