| .. | .. |
|---|
| 1156 | 1156 | return res; |
|---|
| 1157 | 1157 | |
|---|
| 1158 | 1158 | inlen = svc_getnl(argv); |
|---|
| 1159 | | - if (inlen > (argv->iov_len + rqstp->rq_arg.page_len)) |
|---|
| 1159 | + if (inlen > (argv->iov_len + rqstp->rq_arg.page_len)) { |
|---|
| 1160 | + kfree(in_handle->data); |
|---|
| 1160 | 1161 | return SVC_DENIED; |
|---|
| 1162 | + } |
|---|
| 1161 | 1163 | |
|---|
| 1162 | 1164 | pages = DIV_ROUND_UP(inlen, PAGE_SIZE); |
|---|
| 1163 | 1165 | in_token->pages = kcalloc(pages, sizeof(struct page *), GFP_KERNEL); |
|---|
| 1164 | | - if (!in_token->pages) |
|---|
| 1166 | + if (!in_token->pages) { |
|---|
| 1167 | + kfree(in_handle->data); |
|---|
| 1165 | 1168 | return SVC_DENIED; |
|---|
| 1169 | + } |
|---|
| 1166 | 1170 | in_token->page_base = 0; |
|---|
| 1167 | 1171 | in_token->page_len = inlen; |
|---|
| 1168 | 1172 | for (i = 0; i < pages; i++) { |
|---|
| 1169 | 1173 | in_token->pages[i] = alloc_page(GFP_KERNEL); |
|---|
| 1170 | 1174 | if (!in_token->pages[i]) { |
|---|
| 1175 | + kfree(in_handle->data); |
|---|
| 1171 | 1176 | gss_free_in_token_pages(in_token); |
|---|
| 1172 | 1177 | return SVC_DENIED; |
|---|
| 1173 | 1178 | } |
|---|