Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 79643
b: refs/heads/master
c: 9412b92
h: refs/heads/master
i:
  79641: 3125e3a
  79639: 9f0ae8d
v: v3
  • Loading branch information
Chuck Lever authored and Trond Myklebust committed Jan 30, 2008
1 parent 917f9c1 commit 252005d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 338320345b40eb7c63592f40d25cbd58ccf99548
refs/heads/master: 9412b92772c1d80ea8284583b6aad0260e13515f
30 changes: 24 additions & 6 deletions trunk/fs/nfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,26 @@ static int nfs_verify_server_address(struct sockaddr *addr)
return 0;
}

/*
* Parse string addresses passed in via a mount option,
* and construct a sockaddr based on the result.
*
* If address parsing fails, set the sockaddr's address
* family to AF_UNSPEC to force nfs_verify_server_address()
* to punt the mount.
*/
static void nfs_parse_server_address(char *value,
struct sockaddr *sap)
{
struct sockaddr_in *ap = (void *)sap;

ap->sin_family = AF_INET;
if (in4_pton(value, -1, (u8 *)&ap->sin_addr.s_addr, '\0', NULL))
return;

sap->sa_family = AF_UNSPEC;
}

/*
* Error-check and convert a string of mount options from user space into
* a data structure
Expand Down Expand Up @@ -963,9 +983,8 @@ static int nfs_parse_mount_options(char *raw,
string = match_strdup(args);
if (string == NULL)
goto out_nomem;
mnt->nfs_server.address.sin_family = AF_INET;
mnt->nfs_server.address.sin_addr.s_addr =
in_aton(string);
nfs_parse_server_address(string, (struct sockaddr *)
&mnt->nfs_server.address);
kfree(string);
break;
case Opt_clientaddr:
Expand All @@ -984,9 +1003,8 @@ static int nfs_parse_mount_options(char *raw,
string = match_strdup(args);
if (string == NULL)
goto out_nomem;
mnt->mount_server.address.sin_family = AF_INET;
mnt->mount_server.address.sin_addr.s_addr =
in_aton(string);
nfs_parse_server_address(string, (struct sockaddr *)
&mnt->mount_server.address);
kfree(string);
break;

Expand Down

0 comments on commit 252005d

Please sign in to comment.