diff options
| -rw-r--r-- | fs/nfs/callback_xdr.c | 8 | ||||
| -rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayout.c | 5 | ||||
| -rw-r--r-- | fs/nfs/nfs4xdr.c | 33 |
3 files changed, 12 insertions, 34 deletions
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index eb094c6011d8..e732a65db546 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c | |||
| @@ -582,12 +582,8 @@ out: | |||
| 582 | 582 | ||
| 583 | static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) | 583 | static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) |
| 584 | { | 584 | { |
| 585 | __be32 *p; | 585 | if (unlikely(xdr_stream_encode_opaque(xdr, str, len) < 0)) |
| 586 | 586 | return cpu_to_be32(NFS4ERR_RESOURCE); | |
| 587 | p = xdr_reserve_space(xdr, 4 + len); | ||
| 588 | if (unlikely(p == NULL)) | ||
| 589 | return htonl(NFS4ERR_RESOURCE); | ||
| 590 | xdr_encode_opaque(p, str, len); | ||
| 591 | return 0; | 587 | return 0; |
| 592 | } | 588 | } |
| 593 | 589 | ||
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 6104696325be..7b5f37f5ddf1 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c | |||
| @@ -1949,10 +1949,7 @@ static int ff_layout_encode_ioerr(struct xdr_stream *xdr, | |||
| 1949 | static void | 1949 | static void |
| 1950 | encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) | 1950 | encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) |
| 1951 | { | 1951 | { |
| 1952 | __be32 *p; | 1952 | WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0); |
| 1953 | |||
| 1954 | p = xdr_reserve_space(xdr, len); | ||
| 1955 | xdr_encode_opaque_fixed(p, buf, len); | ||
| 1956 | } | 1953 | } |
| 1957 | 1954 | ||
| 1958 | static void | 1955 | static void |
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index e9255cb453e6..5f0a6fcd0030 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
| @@ -924,34 +924,22 @@ static __be32 *reserve_space(struct xdr_stream *xdr, size_t nbytes) | |||
| 924 | 924 | ||
| 925 | static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) | 925 | static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) |
| 926 | { | 926 | { |
| 927 | __be32 *p; | 927 | WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0); |
| 928 | |||
| 929 | p = xdr_reserve_space(xdr, len); | ||
| 930 | xdr_encode_opaque_fixed(p, buf, len); | ||
| 931 | } | 928 | } |
| 932 | 929 | ||
| 933 | static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) | 930 | static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) |
| 934 | { | 931 | { |
| 935 | __be32 *p; | 932 | WARN_ON_ONCE(xdr_stream_encode_opaque(xdr, str, len) < 0); |
| 936 | |||
| 937 | p = reserve_space(xdr, 4 + len); | ||
| 938 | xdr_encode_opaque(p, str, len); | ||
| 939 | } | 933 | } |
| 940 | 934 | ||
| 941 | static void encode_uint32(struct xdr_stream *xdr, u32 n) | 935 | static void encode_uint32(struct xdr_stream *xdr, u32 n) |
| 942 | { | 936 | { |
| 943 | __be32 *p; | 937 | WARN_ON_ONCE(xdr_stream_encode_u32(xdr, n) < 0); |
| 944 | |||
| 945 | p = reserve_space(xdr, 4); | ||
| 946 | *p = cpu_to_be32(n); | ||
| 947 | } | 938 | } |
| 948 | 939 | ||
| 949 | static void encode_uint64(struct xdr_stream *xdr, u64 n) | 940 | static void encode_uint64(struct xdr_stream *xdr, u64 n) |
| 950 | { | 941 | { |
| 951 | __be32 *p; | 942 | WARN_ON_ONCE(xdr_stream_encode_u64(xdr, n) < 0); |
| 952 | |||
| 953 | p = reserve_space(xdr, 8); | ||
| 954 | xdr_encode_hyper(p, n); | ||
| 955 | } | 943 | } |
| 956 | 944 | ||
| 957 | static void encode_nfs4_seqid(struct xdr_stream *xdr, | 945 | static void encode_nfs4_seqid(struct xdr_stream *xdr, |
| @@ -4294,15 +4282,12 @@ out_overflow: | |||
| 4294 | 4282 | ||
| 4295 | static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len) | 4283 | static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len) |
| 4296 | { | 4284 | { |
| 4297 | __be32 *p; | 4285 | ssize_t ret = xdr_stream_decode_opaque_fixed(xdr, buf, len); |
| 4298 | 4286 | if (unlikely(ret < 0)) { | |
| 4299 | p = xdr_inline_decode(xdr, len); | 4287 | print_overflow_msg(__func__, xdr); |
| 4300 | if (likely(p)) { | 4288 | return -EIO; |
| 4301 | memcpy(buf, p, len); | ||
| 4302 | return 0; | ||
| 4303 | } | 4289 | } |
| 4304 | print_overflow_msg(__func__, xdr); | 4290 | return 0; |
| 4305 | return -EIO; | ||
| 4306 | } | 4291 | } |
| 4307 | 4292 | ||
| 4308 | static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid) | 4293 | static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid) |
