SUNRPC: Use correct type in buffer length calculations
Use correct type signage in gss_krb5_remove_padding() when doing length calculations. Both xdr_buf.len and iov.iov_len are size_t, which is unsigned; so use an unsigned type for our temporary length variable to ensure we don't overflow it.. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
afde94f398
commit
67f97d83bf
|
@ -42,7 +42,7 @@ gss_krb5_remove_padding(struct xdr_buf *buf, int blocksize)
|
||||||
{
|
{
|
||||||
u8 *ptr;
|
u8 *ptr;
|
||||||
u8 pad;
|
u8 pad;
|
||||||
int len = buf->len;
|
size_t len = buf->len;
|
||||||
|
|
||||||
if (len <= buf->head[0].iov_len) {
|
if (len <= buf->head[0].iov_len) {
|
||||||
pad = *(u8 *)(buf->head[0].iov_base + len - 1);
|
pad = *(u8 *)(buf->head[0].iov_base + len - 1);
|
||||||
|
@ -53,9 +53,9 @@ gss_krb5_remove_padding(struct xdr_buf *buf, int blocksize)
|
||||||
} else
|
} else
|
||||||
len -= buf->head[0].iov_len;
|
len -= buf->head[0].iov_len;
|
||||||
if (len <= buf->page_len) {
|
if (len <= buf->page_len) {
|
||||||
int last = (buf->page_base + len - 1)
|
unsigned int last = (buf->page_base + len - 1)
|
||||||
>>PAGE_CACHE_SHIFT;
|
>>PAGE_CACHE_SHIFT;
|
||||||
int offset = (buf->page_base + len - 1)
|
unsigned int offset = (buf->page_base + len - 1)
|
||||||
& (PAGE_CACHE_SIZE - 1);
|
& (PAGE_CACHE_SIZE - 1);
|
||||||
ptr = kmap_atomic(buf->pages[last], KM_USER0);
|
ptr = kmap_atomic(buf->pages[last], KM_USER0);
|
||||||
pad = *(ptr + offset);
|
pad = *(ptr + offset);
|
||||||
|
|
Loading…
Reference in New Issue