From: "J. Bruce Fields" <bfields@fieldses.org>
To: "david m. richter" <richterd@gmail.com>
Cc: Chuck Lever <chuck.lever@oracle.com>,
Trond Myklebust <trond.myklebust@fys.uio.no>,
linux-nfs@vger.kernel.org, Manoj Naik <manoj@almaden.ibm.com>
Subject: Re: [PATCH] nfs: Fix misparsing of nfsv4 fs_locations attribute
Date: Fri, 16 May 2008 15:53:26 -0400 [thread overview]
Message-ID: <20080516195326.GD14228@fieldses.org> (raw)
In-Reply-To: <1d07ca700805101807s7c034b08sc531993aa81010b2-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Sat, May 10, 2008 at 09:07:23PM -0400, david m. richter wrote:
> On Sat, May 10, 2008 at 7:50 PM, Chuck Lever <chuck.lever@oracle.com> wrote:
> > On May 10, 2008, at 10:32 AM, Trond Myklebust wrote:
> >>
> >> On Fri, 2008-05-09 at 19:29 -0700, Chuck Lever wrote:
> >>>
> >>> Should you use in4_pton() instead?
> >>
> >> Can we rather convert this to use nfs_parse_server_address? We don't
> >> need 10 different ways to parse text addresses...
> >
> > I'm OK with that, as long as there isn't a technical problem with using
> > in4_pton().
>
> nfs_parse_server_address() uses in4_pton(), it just also groks ipv6.
This is all a bit orthogonal to the actual bug, as all those functions
want null-terminated strings too.
We could apply the below (compile-tested only) and then add ipv6 support
and converting to nfs_parse_server_address() in a subsequent patch.
--b.
>From 530b441f2239d8bcedf9456c3c570d9c179cb406 Mon Sep 17 00:00:00 2001
From: J. Bruce Fields <bfields@citi.umich.edu>
Date: Fri, 9 May 2008 15:10:56 -0700
Subject: [PATCH] nfs: Fix misparsing of nfsv4 fs_locations attribute
The code incorrectly assumes here that the server name (or ip address)
is null-terminated. This can cause referrals to fail in some cases.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
---
fs/nfs/nfs4namespace.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c
index 5f9ba41..40a0209 100644
--- a/fs/nfs/nfs4namespace.c
+++ b/fs/nfs/nfs4namespace.c
@@ -93,14 +93,21 @@ static int nfs4_validate_fspath(const struct vfsmount *mnt_parent,
return 0;
}
+#define MAX_IPADDR_STRLEN 40
/*
* Check if the string represents a "valid" IPv4 address
*/
-static inline int valid_ipaddr4(const char *buf)
+static inline int valid_ipaddr4(const struct nfs4_string *buf)
{
int rc, count, in[4];
+ char str[MAX_IPADDR_STRLEN];
- rc = sscanf(buf, "%d.%d.%d.%d", &in[0], &in[1], &in[2], &in[3]);
+ if (buf->len >= MAX_IPADDR_STRLEN)
+ return -EINVAL;
+ memcpy(str, buf->data, buf->len);
+ str[buf->len] = '\0';
+
+ rc = sscanf(str, "%d.%d.%d.%d", &in[0], &in[1], &in[2], &in[3]);
if (rc != 4)
return -EINVAL;
for (count = 0; count < 4; count++) {
@@ -178,7 +185,7 @@ static struct vfsmount *nfs_follow_referral(const struct vfsmount *mnt_parent,
};
if (location->servers[s].len <= 0 ||
- valid_ipaddr4(location->servers[s].data) < 0) {
+ valid_ipaddr4(&location->servers[s]) < 0) {
s++;
continue;
}
--
1.5.5.rc1
next prev parent reply other threads:[~2008-05-16 19:53 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-09 1:19 referrals J. Bruce Fields
2008-05-09 5:10 ` referrals Trond Myklebust
2008-05-09 15:27 ` referrals J. Bruce Fields
2008-05-09 16:52 ` referrals J. Bruce Fields
2008-05-09 17:12 ` referrals J. Bruce Fields
2008-05-09 23:59 ` [PATCH] nfs: Fix misparsing of nfsv4 fs_locations attribute J. Bruce Fields
2008-05-10 0:15 ` Benny Halevy
2008-05-10 1:06 ` J. Bruce Fields
2008-05-10 2:29 ` Chuck Lever
2008-05-10 17:32 ` Trond Myklebust
2008-05-10 23:50 ` Chuck Lever
2008-05-11 1:07 ` david m. richter
[not found] ` <1d07ca700805101807s7c034b08sc531993aa81010b2-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 19:53 ` J. Bruce Fields [this message]
2008-05-17 2:25 ` Chuck Lever
2008-05-18 15:22 ` Chuck Lever
2008-05-20 2:47 ` J. Bruce Fields
2008-05-20 16:54 ` Chuck Lever
2008-05-20 19:32 ` Trond Myklebust
2008-05-20 19:38 ` Chuck Lever
2008-05-20 19:42 ` Trond Myklebust
-- strict thread matches above, loose matches on Subject: below --
2008-08-14 22:30 J. Bruce Fields
2008-08-15 16:59 ` Chuck Lever
2008-08-15 22:00 ` Chuck Lever
2008-08-20 20:08 ` J. Bruce Fields
2008-08-20 20:19 ` Chuck Lever
[not found] ` <76bd70e30808201319j7b59de5gc912fcd01594e8-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-20 20:47 ` J. Bruce Fields
2008-08-20 21:19 ` Chuck Lever
[not found] ` <76bd70e30808201419g5171d7eob7e6b57dd735e07d-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-20 21:29 ` J. Bruce Fields
2008-08-20 22:07 ` Chuck Lever
[not found] ` <76bd70e30808201507l44c85d08o3ec4e8eeb7edda5e-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-20 23:30 ` J. Bruce Fields
2008-08-21 2:00 ` Chuck Lever
[not found] ` <76bd70e30808201900r699ca044o884584ecedc6a799-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-21 20:46 ` J. Bruce Fields
2008-08-21 22:22 ` Chuck Lever
[not found] ` <76bd70e30808211522k7cb6846fs4e371c8003320fe7-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-21 22:54 ` J. Bruce Fields
2008-08-21 23:05 ` Chuck Lever
[not found] ` <76bd70e30808211605j3c32cc44v440c19e5fe81bdc9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-08-22 18:25 ` Chuck Lever
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080516195326.GD14228@fieldses.org \
--to=bfields@fieldses.org \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=manoj@almaden.ibm.com \
--cc=richterd@gmail.com \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.