@@ -227,7 +227,9 @@ static int rxkad_secure_packet_encrypt(const struct rxrpc_call *call,
227
227
len &= ~(call -> conn -> size_align - 1 );
228
228
229
229
sg_init_table (sg , nsg );
230
- skb_to_sgvec (skb , sg , 0 , len );
230
+ err = skb_to_sgvec (skb , sg , 0 , len );
231
+ if (unlikely (err < 0 ))
232
+ goto out ;
231
233
skcipher_request_set_crypt (req , sg , sg , len , iv .x );
232
234
crypto_skcipher_encrypt (req );
233
235
@@ -324,7 +326,7 @@ static int rxkad_verify_packet_1(struct rxrpc_call *call, struct sk_buff *skb,
324
326
bool aborted ;
325
327
u32 data_size , buf ;
326
328
u16 check ;
327
- int nsg ;
329
+ int nsg , ret ;
328
330
329
331
_enter ("" );
330
332
@@ -342,7 +344,9 @@ static int rxkad_verify_packet_1(struct rxrpc_call *call, struct sk_buff *skb,
342
344
goto nomem ;
343
345
344
346
sg_init_table (sg , nsg );
345
- skb_to_sgvec (skb , sg , offset , 8 );
347
+ ret = skb_to_sgvec (skb , sg , offset , 8 );
348
+ if (unlikely (ret < 0 ))
349
+ return ret ;
346
350
347
351
/* start the decryption afresh */
348
352
memset (& iv , 0 , sizeof (iv ));
@@ -409,7 +413,7 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,
409
413
bool aborted ;
410
414
u32 data_size , buf ;
411
415
u16 check ;
412
- int nsg ;
416
+ int nsg , ret ;
413
417
414
418
_enter (",{%d}" , skb -> len );
415
419
@@ -434,7 +438,12 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,
434
438
}
435
439
436
440
sg_init_table (sg , nsg );
437
- skb_to_sgvec (skb , sg , offset , len );
441
+ ret = skb_to_sgvec (skb , sg , offset , len );
442
+ if (unlikely (ret < 0 )) {
443
+ if (sg != _sg )
444
+ kfree (sg );
445
+ return ret ;
446
+ }
438
447
439
448
/* decrypt from the session key */
440
449
token = call -> conn -> params .key -> payload .data [0 ];
0 commit comments