Changeset fa24efa in mainline


Ignore:
Timestamp:
2013-10-04T22:55:10Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d65be39
Parents:
f1d04b2
Message:

make sure read() and write() respect DATA_XFER_LIMIT

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • abi/include/abi/ipc/ipc.h

    rf1d04b2 rfa24efa  
    5959/** Interrupt notification */
    6060#define IPC_CALL_NOTIF  (1 << 3)
     61
     62/**
     63 * Maximum buffer size allowed for IPC_M_DATA_WRITE and
     64 * IPC_M_DATA_READ requests.
     65 */
     66#define DATA_XFER_LIMIT  (64 * 1024)
    6167
    6268
  • kernel/generic/include/config.h

    rf1d04b2 rfa24efa  
    4747#define CONFIG_TASK_NAME_BUFLEN  32
    4848#define CONFIG_TASK_ARGUMENTS_BUFLEN 64
    49 
    50 /**
    51  * Maximum buffer size allowed for IPC_M_DATA_WRITE and IPC_M_DATA_READ
    52  * requests.
    53  */
    54 #define DATA_XFER_LIMIT  (64 * 1024)
    5549
    5650#ifndef __ASM__
  • uspace/lib/c/generic/vfs/vfs.c

    rf1d04b2 rfa24efa  
    342342}
    343343
    344 ssize_t read(int fildes, void *buf, size_t nbyte) 
     344ssize_t read(int fildes, void *buf, size_t nbyte)
    345345{
    346346        sysarg_t rc;
     
    348348        aid_t req;
    349349       
     350        if (nbyte > DATA_XFER_LIMIT)
     351                nbyte = DATA_XFER_LIMIT;
     352       
    350353        async_exch_t *exch = vfs_exchange_begin();
    351354       
    352355        req = async_send_1(exch, VFS_IN_READ, fildes, &answer);
    353         rc = async_data_read_start(exch, (void *)buf, nbyte);
     356        rc = async_data_read_start(exch, (void *) buf, nbyte);
    354357        if (rc != EOK) {
    355358                vfs_exchange_end(exch);
     
    377380        aid_t req;
    378381       
     382        if (nbyte > DATA_XFER_LIMIT)
     383                nbyte = DATA_XFER_LIMIT;
     384       
    379385        async_exch_t *exch = vfs_exchange_begin();
    380386       
    381387        req = async_send_1(exch, VFS_IN_WRITE, fildes, &answer);
    382         rc = async_data_write_start(exch, (void *)buf, nbyte);
     388        rc = async_data_write_start(exch, (void *) buf, nbyte);
    383389        if (rc != EOK) {
    384390                vfs_exchange_end(exch);
Note: See TracChangeset for help on using the changeset viewer.