@@ -150,10 +150,11 @@ static int xdp_umem_account_pages(struct xdp_umem *umem)
150
150
151
151
static int xdp_umem_reg (struct xdp_umem * umem , struct xdp_umem_reg * mr )
152
152
{
153
- u32 npgs_rem , chunk_size = mr -> chunk_size , headroom = mr -> headroom ;
154
153
bool unaligned_chunks = mr -> flags & XDP_UMEM_UNALIGNED_CHUNK_FLAG ;
155
- u64 npgs , addr = mr -> addr , size = mr -> len ;
156
- unsigned int chunks , chunks_rem ;
154
+ u32 chunk_size = mr -> chunk_size , headroom = mr -> headroom ;
155
+ u64 addr = mr -> addr , size = mr -> len ;
156
+ u32 chunks_rem , npgs_rem ;
157
+ u64 chunks , npgs ;
157
158
int err ;
158
159
159
160
if (chunk_size < XDP_UMEM_MIN_CHUNK_SIZE || chunk_size > PAGE_SIZE ) {
@@ -188,8 +189,8 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
188
189
if (npgs > U32_MAX )
189
190
return - EINVAL ;
190
191
191
- chunks = ( unsigned int ) div_u64_rem (size , chunk_size , & chunks_rem );
192
- if (chunks == 0 )
192
+ chunks = div_u64_rem (size , chunk_size , & chunks_rem );
193
+ if (! chunks || chunks > U32_MAX )
193
194
return - EINVAL ;
194
195
195
196
if (!unaligned_chunks && chunks_rem )
@@ -202,7 +203,7 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
202
203
umem -> headroom = headroom ;
203
204
umem -> chunk_size = chunk_size ;
204
205
umem -> chunks = chunks ;
205
- umem -> npgs = ( u32 ) npgs ;
206
+ umem -> npgs = npgs ;
206
207
umem -> pgs = NULL ;
207
208
umem -> user = NULL ;
208
209
umem -> flags = mr -> flags ;
0 commit comments