Changeset 5a5269d in mainline for kernel/generic/include


Ignore:
Timestamp:
2019-07-02T12:03:55Z (6 years ago)
Author:
GitHub <noreply@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
98c4c16
Parents:
aca97582
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2019-07-02 12:03:55)
git-committer:
GitHub <noreply@…> (2019-07-02 12:03:55)
Message:

Change type of uspace pointers in kernel from pointer type to numeric (#170)

From kernel's perspective, userspace addresses are not valid pointers,
and can only be used in calls to copy_to/from_uspace().
Therefore, we change the type of those arguments and variables to
uspace_addr_t which is an alias for sysarg_t.

This allows the compiler to catch accidental direct accesses to
userspace addresses.

Additionally, to avoid losing the type information in code,
a macro uspace_ptr(type) is used that translates to uspace_addr_t.
I makes no functional difference, but allows keeping the type information
in code in case we implement some sort of static checking for it in the future.

However, ccheck doesn't like that, so instead of using uspace_ptr(char),
we use uspace_ptr_char which is defined as
#define uspace_ptr_char uspace_ptr(char).

Location:
kernel/generic/include
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/console/console.h

    raca97582 r5a5269d  
    7171extern wchar_t getc(indev_t *indev);
    7272extern size_t gets(indev_t *indev, char *buf, size_t buflen);
    73 extern sys_errno_t sys_kio(int cmd, const void *buf, size_t size);
     73extern sys_errno_t sys_kio(int cmd, uspace_addr_t buf, size_t size);
    7474
    7575extern void grab_console(void);
  • kernel/generic/include/ddi/ddi.h

    raca97582 r5a5269d  
    6363extern void pio_unmap(void *, void *, size_t);
    6464
    65 extern sys_errno_t sys_physmem_map(uintptr_t, size_t, unsigned int, void *,
     65extern sys_errno_t sys_physmem_map(uintptr_t, size_t, unsigned int, uspace_ptr_uintptr_t,
    6666    uintptr_t);
    6767extern sys_errno_t sys_physmem_unmap(uintptr_t);
    6868
    69 extern sys_errno_t sys_dmamem_map(size_t, unsigned int, unsigned int, void *,
    70     void *, uintptr_t);
     69extern sys_errno_t sys_dmamem_map(size_t, unsigned int, unsigned int, uspace_ptr_uintptr_t,
     70    uspace_ptr_uintptr_t, uintptr_t);
    7171extern sys_errno_t sys_dmamem_unmap(uintptr_t, size_t, unsigned int);
    7272
    73 extern sys_errno_t sys_iospace_enable(ddi_ioarg_t *);
    74 extern sys_errno_t sys_iospace_disable(ddi_ioarg_t *);
     73extern sys_errno_t sys_iospace_enable(uspace_ptr_ddi_ioarg_t);
     74extern sys_errno_t sys_iospace_disable(uspace_ptr_ddi_ioarg_t);
    7575
    7676/*
  • kernel/generic/include/ipc/irq.h

    raca97582 r5a5269d  
    5050extern void ipc_irq_top_half_handler(irq_t *);
    5151
    52 extern errno_t ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, irq_code_t *,
    53     cap_irq_handle_t *);
     52extern errno_t ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, uspace_ptr_irq_code_t,
     53    uspace_ptr_cap_irq_handle_t);
    5454extern errno_t ipc_irq_unsubscribe(answerbox_t *, cap_irq_handle_t);
    5555
  • kernel/generic/include/ipc/sysipc.h

    raca97582 r5a5269d  
    4444extern sys_errno_t sys_ipc_call_async_fast(cap_phone_handle_t, sysarg_t,
    4545    sysarg_t, sysarg_t, sysarg_t, sysarg_t);
    46 extern sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t, ipc_data_t *,
     46extern sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t, uspace_ptr_ipc_data_t,
    4747    sysarg_t);
    4848extern sys_errno_t sys_ipc_answer_fast(cap_call_handle_t, sysarg_t, sysarg_t,
    4949    sysarg_t, sysarg_t, sysarg_t);
    50 extern sys_errno_t sys_ipc_answer_slow(cap_call_handle_t, ipc_data_t *);
    51 extern sys_errno_t sys_ipc_wait_for_call(ipc_data_t *, uint32_t, unsigned int);
     50extern sys_errno_t sys_ipc_answer_slow(cap_call_handle_t, uspace_ptr_ipc_data_t);
     51extern sys_errno_t sys_ipc_wait_for_call(uspace_ptr_ipc_data_t, uint32_t, unsigned int);
    5252extern sys_errno_t sys_ipc_poke(void);
    5353extern sys_errno_t sys_ipc_forward_fast(cap_call_handle_t, cap_phone_handle_t,
    5454    sysarg_t, sysarg_t, sysarg_t, unsigned int);
    5555extern sys_errno_t sys_ipc_forward_slow(cap_call_handle_t, cap_phone_handle_t,
    56     ipc_data_t *, unsigned int);
     56    uspace_ptr_ipc_data_t, unsigned int);
    5757extern sys_errno_t sys_ipc_hangup(cap_phone_handle_t);
    5858
    59 extern sys_errno_t sys_ipc_irq_subscribe(inr_t, sysarg_t, irq_code_t *,
    60     cap_irq_handle_t *);
     59extern sys_errno_t sys_ipc_irq_subscribe(inr_t, sysarg_t, uspace_ptr_irq_code_t,
     60    uspace_ptr_cap_irq_handle_t);
    6161extern sys_errno_t sys_ipc_irq_unsubscribe(cap_irq_handle_t);
    6262
    63 extern sys_errno_t sys_ipc_connect_kbox(task_id_t *, cap_phone_handle_t *);
     63extern sys_errno_t sys_ipc_connect_kbox(uspace_ptr_task_id_t, uspace_ptr_cap_phone_handle_t);
    6464
    6565#endif
  • kernel/generic/include/log.h

    raca97582 r5a5269d  
    5252    _HELENOS_PRINTF_ATTRIBUTE(3, 4);
    5353
    54 extern sys_errno_t sys_klog(sysarg_t, void *buf, size_t size,
    55     sysarg_t level, size_t *uspace_nread);
     54extern sys_errno_t sys_klog(sysarg_t, uspace_addr_t buf, size_t size,
     55    sysarg_t level, uspace_ptr_size_t uspace_nread);
    5656
    5757#endif /* KERN_LOG_H_ */
  • kernel/generic/include/mm/as.h

    raca97582 r5a5269d  
    373373/* Address space area related syscalls. */
    374374extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t,
    375     as_area_pager_info_t *);
     375    uspace_ptr_as_area_pager_info_t);
    376376extern sys_errno_t sys_as_area_resize(uintptr_t, size_t, unsigned int);
    377377extern sys_errno_t sys_as_area_change_flags(uintptr_t, unsigned int);
    378 extern sys_errno_t sys_as_area_get_info(uintptr_t, as_area_info_t *);
     378extern sys_errno_t sys_as_area_get_info(uintptr_t, uspace_ptr_as_area_info_t);
    379379extern sys_errno_t sys_as_area_destroy(uintptr_t);
    380380
  • kernel/generic/include/mm/page.h

    raca97582 r5a5269d  
    6868
    6969extern errno_t page_find_mapping(uintptr_t, uintptr_t *);
    70 extern sys_errno_t sys_page_find_mapping(uintptr_t, uintptr_t *);
     70extern sys_errno_t sys_page_find_mapping(uintptr_t, uspace_ptr_uintptr_t);
    7171
    7272#endif
  • kernel/generic/include/proc/program.h

    raca97582 r5a5269d  
    5555extern void *program_loader;
    5656
    57 extern errno_t program_create(as_t *, uintptr_t, char *, program_t *);
     57extern errno_t program_create(as_t *, uspace_addr_t, char *, program_t *);
    5858extern errno_t program_create_from_image(void *, char *, program_t *);
    5959extern errno_t program_create_loader(program_t *, char *);
    6060extern void program_ready(program_t *);
    6161
    62 extern sys_errno_t sys_program_spawn_loader(char *, size_t);
     62extern sys_errno_t sys_program_spawn_loader(uspace_ptr_char, size_t);
    6363
    6464#endif
  • kernel/generic/include/proc/task.h

    raca97582 r5a5269d  
    164164
    165165#ifdef __32_BITS__
    166 extern sys_errno_t sys_task_get_id(sysarg64_t *);
     166extern sys_errno_t sys_task_get_id(uspace_ptr_sysarg64_t);
    167167#endif
    168168
     
    171171#endif
    172172
    173 extern sys_errno_t sys_task_set_name(const char *, size_t);
    174 extern sys_errno_t sys_task_kill(task_id_t *);
     173extern sys_errno_t sys_task_set_name(uspace_ptr_const_char, size_t);
     174extern sys_errno_t sys_task_kill(uspace_ptr_task_id_t);
    175175extern sys_errno_t sys_task_exit(sysarg_t);
    176176
  • kernel/generic/include/proc/thread.h

    raca97582 r5a5269d  
    265265
    266266/* Thread syscall prototypes. */
    267 extern sys_errno_t sys_thread_create(uspace_arg_t *, char *, size_t,
    268     thread_id_t *);
     267extern sys_errno_t sys_thread_create(uspace_ptr_uspace_arg_t, uspace_ptr_char, size_t,
     268    uspace_ptr_thread_id_t);
    269269extern sys_errno_t sys_thread_exit(int);
    270 extern sys_errno_t sys_thread_get_id(thread_id_t *);
     270extern sys_errno_t sys_thread_get_id(uspace_ptr_thread_id_t);
    271271extern sys_errno_t sys_thread_usleep(uint32_t);
    272272extern sys_errno_t sys_thread_udelay(uint32_t);
  • kernel/generic/include/security/perm.h

    raca97582 r5a5269d  
    7575#ifdef __32_BITS__
    7676
    77 extern sys_errno_t sys_perm_grant(sysarg64_t *, perm_t);
    78 extern sys_errno_t sys_perm_revoke(sysarg64_t *, perm_t);
     77extern sys_errno_t sys_perm_grant(uspace_ptr_sysarg64_t, perm_t);
     78extern sys_errno_t sys_perm_revoke(uspace_ptr_sysarg64_t, perm_t);
    7979
    8080#endif  /* __32_BITS__ */
  • kernel/generic/include/synch/syswaitq.h

    raca97582 r5a5269d  
    4343extern void sys_waitq_task_cleanup(void);
    4444
    45 extern sys_errno_t sys_waitq_create(cap_waitq_handle_t *);
     45extern sys_errno_t sys_waitq_create(uspace_ptr_cap_waitq_handle_t);
    4646extern sys_errno_t sys_waitq_sleep(cap_waitq_handle_t, uint32_t, unsigned int);
    4747extern sys_errno_t sys_waitq_wakeup(cap_waitq_handle_t);
  • kernel/generic/include/syscall/copy.h

    raca97582 r5a5269d  
    4444extern char memcpy_to_uspace_failover_address;
    4545
    46 extern errno_t copy_from_uspace(void *dst, const void *uspace_src, size_t size);
    47 extern errno_t copy_to_uspace(void *dst_uspace, const void *src, size_t size);
     46extern errno_t copy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size);
     47extern errno_t copy_to_uspace(uspace_addr_t dst_uspace, const void *src, size_t size);
    4848
    4949/*
     
    5151 * The functions return zero on failure and nonzero on success.
    5252 */
    53 extern uintptr_t memcpy_from_uspace(void *dst, const void *uspace_src, size_t size);
    54 extern uintptr_t memcpy_to_uspace(void *uspace_dst, const void *src, size_t size);
     53extern uintptr_t memcpy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size);
     54extern uintptr_t memcpy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size);
    5555
    5656#endif
  • kernel/generic/include/sysinfo/sysinfo.h

    raca97582 r5a5269d  
    162162extern void sysinfo_dump(sysinfo_item_t *);
    163163
    164 extern sys_errno_t sys_sysinfo_get_keys_size(void *, size_t, void *);
    165 extern sys_errno_t sys_sysinfo_get_keys(void *, size_t, void *, size_t, size_t *);
    166 extern sysarg_t sys_sysinfo_get_val_type(void *, size_t);
    167 extern sys_errno_t sys_sysinfo_get_value(void *, size_t, void *);
    168 extern sys_errno_t sys_sysinfo_get_data_size(void *, size_t, void *);
    169 extern sys_errno_t sys_sysinfo_get_data(void *, size_t, void *, size_t, size_t *);
     164extern sys_errno_t sys_sysinfo_get_keys_size(uspace_addr_t, size_t, uspace_addr_t);
     165extern sys_errno_t sys_sysinfo_get_keys(uspace_addr_t, size_t, uspace_addr_t, size_t, uspace_ptr_size_t);
     166extern sysarg_t sys_sysinfo_get_val_type(uspace_addr_t, size_t);
     167extern sys_errno_t sys_sysinfo_get_value(uspace_addr_t, size_t, uspace_addr_t);
     168extern sys_errno_t sys_sysinfo_get_data_size(uspace_addr_t, size_t, uspace_addr_t);
     169extern sys_errno_t sys_sysinfo_get_data(uspace_addr_t, size_t, uspace_addr_t, size_t, uspace_ptr_size_t);
    170170
    171171#endif
  • kernel/generic/include/udebug/udebug_ops.h

    raca97582 r5a5269d  
    5555errno_t udebug_regs_read(thread_t *t, void **buffer);
    5656
    57 errno_t udebug_mem_read(sysarg_t uspace_addr, size_t n, void **buffer);
     57errno_t udebug_mem_read(uspace_addr_t uspace_addr, size_t n, void **buffer);
    5858
    5959#endif
Note: See TracChangeset for help on using the changeset viewer.