Revision 2f726488 nbd.c
b/nbd.c | ||
---|---|---|
404 | 404 |
return ret; |
405 | 405 |
} |
406 | 406 |
|
407 |
int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset, off_t *offset, bool readonly) |
|
407 |
int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset, |
|
408 |
off_t *offset, bool readonly, uint8_t *data, int data_size) |
|
408 | 409 |
{ |
409 |
#ifndef _REENTRANT |
|
410 |
static uint8_t data[1024 * 1024]; // keep this off of the stack |
|
411 |
#else |
|
412 |
uint8_t data[1024 * 1024]; |
|
413 |
#endif |
|
414 | 410 |
uint8_t buf[4 + 4 + 8 + 8 + 4]; |
415 | 411 |
uint32_t magic; |
416 | 412 |
uint32_t type; |
... | ... | |
449 | 445 |
return -1; |
450 | 446 |
} |
451 | 447 |
|
452 |
if (len > sizeof(data)) {
|
|
453 |
LOG("len (%u) is larger than max len (%lu)",
|
|
454 |
len, (unsigned long)sizeof(data));
|
|
448 |
if (len > data_size) {
|
|
449 |
LOG("len (%u) is larger than max len (%u)", |
|
450 |
len, data_size);
|
|
455 | 451 |
errno = EINVAL; |
456 | 452 |
return -1; |
457 | 453 |
} |
Also available in: Unified diff