| .. | .. |
|---|
| 153 | 153 | |
|---|
| 154 | 154 | static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr) |
|---|
| 155 | 155 | { |
|---|
| 156 | | - u32 npgs_rem, chunk_size = mr->chunk_size, headroom = mr->headroom; |
|---|
| 157 | 156 | bool unaligned_chunks = mr->flags & XDP_UMEM_UNALIGNED_CHUNK_FLAG; |
|---|
| 158 | | - u64 npgs, addr = mr->addr, size = mr->len; |
|---|
| 159 | | - unsigned int chunks, chunks_rem; |
|---|
| 157 | + u32 chunk_size = mr->chunk_size, headroom = mr->headroom; |
|---|
| 158 | + u64 addr = mr->addr, size = mr->len; |
|---|
| 159 | + u32 chunks_rem, npgs_rem; |
|---|
| 160 | + u64 chunks, npgs; |
|---|
| 160 | 161 | int err; |
|---|
| 161 | 162 | |
|---|
| 162 | 163 | if (chunk_size < XDP_UMEM_MIN_CHUNK_SIZE || chunk_size > PAGE_SIZE) { |
|---|
| .. | .. |
|---|
| 191 | 192 | if (npgs > U32_MAX) |
|---|
| 192 | 193 | return -EINVAL; |
|---|
| 193 | 194 | |
|---|
| 194 | | - chunks = (unsigned int)div_u64_rem(size, chunk_size, &chunks_rem); |
|---|
| 195 | | - if (chunks == 0) |
|---|
| 195 | + chunks = div_u64_rem(size, chunk_size, &chunks_rem); |
|---|
| 196 | + if (!chunks || chunks > U32_MAX) |
|---|
| 196 | 197 | return -EINVAL; |
|---|
| 197 | 198 | |
|---|
| 198 | 199 | if (!unaligned_chunks && chunks_rem) |
|---|
| .. | .. |
|---|
| 205 | 206 | umem->headroom = headroom; |
|---|
| 206 | 207 | umem->chunk_size = chunk_size; |
|---|
| 207 | 208 | umem->chunks = chunks; |
|---|
| 208 | | - umem->npgs = (u32)npgs; |
|---|
| 209 | + umem->npgs = npgs; |
|---|
| 209 | 210 | umem->pgs = NULL; |
|---|
| 210 | 211 | umem->user = NULL; |
|---|
| 211 | 212 | umem->flags = mr->flags; |
|---|