Changeset ae66564 in mainline


Ignore:
Timestamp:
2016-09-17T15:26:25Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5a97302
Parents:
560b81c
Message:

Add reference to frame only if the action was initiated by the kernel

Location:
kernel/generic
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/sysipc.h

    r560b81c rae66564  
    4040#include <typedefs.h>
    4141
    42 extern int ipc_req_internal(int, ipc_data_t *);
     42extern int ipc_req_internal(int, ipc_data_t *, sysarg_t);
    4343
    4444extern sysarg_t sys_ipc_call_async_fast(sysarg_t, sysarg_t, sysarg_t,
  • kernel/generic/src/ipc/ops/pagein.c

    r560b81c rae66564  
    4646static int answer_preprocess(call_t *answer, ipc_data_t *olddata)
    4747{
     48        /*
     49         * We only do the special handling below if the call was initiated by
     50         * the kernel. Otherwise a malicious task could use this mechanism to
     51         * hold memory frames forever.
     52         */
     53        if (!answer->priv)
     54                return EOK;
     55
    4856        if (!IPC_GET_RETVAL(answer->data)) {
     57
    4958                pte_t pte;
    5059                uintptr_t frame;
  • kernel/generic/src/ipc/sysipc.c

    r560b81c rae66564  
    265265 * @param phoneid     Phone handle for the call.
    266266 * @param data[inout] Structure with request/reply data.
     267 * @param priv        Value to be stored in call->priv.
    267268 *
    268269 * @return EOK on success.
     
    270271 *
    271272 */
    272 int ipc_req_internal(int phoneid, ipc_data_t *data)
     273int ipc_req_internal(int phoneid, ipc_data_t *data, sysarg_t priv)
    273274{
    274275        phone_t *phone;
     
    277278       
    278279        call_t *call = ipc_call_alloc(0);
     280        call->priv = priv;
    279281        memcpy(call->data.args, data->args, sizeof(data->args));
    280282       
  • kernel/generic/src/mm/backend_user.c

    r560b81c rae66564  
    125125        IPC_SET_ARG5(data, pager_info->id3);
    126126
    127         int rc = ipc_req_internal(pager_info->pager, &data);
     127        int rc = ipc_req_internal(pager_info->pager, &data, (sysarg_t) true);
    128128
    129129        if (rc != EOK) {
Note: See TracChangeset for help on using the changeset viewer.