user_desc
static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info)
static inline bool LDT_zero(const struct user_desc *info)
struct user_desc;
struct user_desc __user *info);
struct user_desc __user *info, int can_allocate);
struct user_desc ldt_info;
struct user_desc __user *utls = (struct user_desc __user *)tls;
.size = sizeof(struct user_desc),
.align = sizeof(struct user_desc),
(struct user_desc __user *)data);
(struct user_desc __user *)data, 0);
struct user_desc __user *u_info,
struct user_desc info;
SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, u_info)
static void fill_user_desc(struct user_desc *info, int idx,
struct user_desc __user *u_info)
struct user_desc info;
SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, u_info)
struct user_desc v;
struct user_desc infobuf[GDT_ENTRY_TLS_ENTRIES];
const struct user_desc *info;
if (pos >= GDT_ENTRY_TLS_ENTRIES * sizeof(struct user_desc) ||
(pos % sizeof(struct user_desc)) != 0 ||
(count % sizeof(struct user_desc)) != 0)
for (i = 0; i < count / sizeof(struct user_desc); i++)
GDT_ENTRY_TLS_MIN + (pos / sizeof(struct user_desc)),
info, count / sizeof(struct user_desc));
static bool tls_desc_okay(const struct user_desc *info)
const struct user_desc *info, int n)
struct user_desc tls;
struct user_desc;
struct user_desc __user *user_desc);
struct user_desc __user *user_desc);
struct user_desc __user *user_desc)
struct user_desc __user *user_desc)
struct user_desc tls[UM_KERN_GDT_ENTRY_TLS_ENTRIES];
typedef struct user_desc user_desc_t;
static int set_tls_entry(struct task_struct* task, struct user_desc *info,
struct user_desc info;
static int get_tls_entry(struct task_struct *task, struct user_desc *info,
static int do_set_thread_area(struct task_struct* task, struct user_desc *info)
SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, user_desc)
struct user_desc info;
if (copy_from_user(&info, user_desc, sizeof(info)))
if (put_user(idx, &user_desc->entry_number))
struct user_desc __user *user_desc)
struct user_desc info;
if (copy_from_user(&info, user_desc, sizeof(info)))
SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, user_desc)
struct user_desc info;
if (get_user(idx, &user_desc->entry_number))
if (copy_to_user(user_desc, &info, sizeof(info)))
struct user_desc __user *user_desc)
struct user_desc info;
if (copy_to_user(user_desc, &info, sizeof(info)))
static inline void clear_user_desc(struct user_desc* info)
struct ORANGEFS_dev_map_desc user_desc;
ret = copy_from_user(&user_desc,
return ret ? -EIO : orangefs_bufmap_initialize(&user_desc);
orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)
bufmap->total_size = user_desc->total_size;
bufmap->desc_count = user_desc->count;
bufmap->desc_size = user_desc->size;
struct ORANGEFS_dev_map_desc *user_desc)
ret = pin_user_pages_fast((unsigned long)user_desc->ptr,
(user_desc->ptr + (i * pages_per_desc * PAGE_SIZE));
int orangefs_bufmap_initialize(struct ORANGEFS_dev_map_desc *user_desc)
user_desc->ptr,
user_desc->size,
user_desc->count);
if (user_desc->total_size < 0 ||
user_desc->size < 0 ||
user_desc->count < 0)
if (PAGE_ALIGN((unsigned long)user_desc->ptr) !=
(unsigned long)user_desc->ptr) {
user_desc->ptr);
if (PAGE_ALIGN(((unsigned long)user_desc->ptr + user_desc->total_size))
!= (unsigned long)(user_desc->ptr + user_desc->total_size)) {
user_desc->ptr,
user_desc->total_size);
if (user_desc->total_size != (user_desc->size * user_desc->count)) {
user_desc->total_size,
user_desc->size,
user_desc->count);
if ((user_desc->size % PAGE_SIZE) != 0) {
user_desc->size);
bufmap = orangefs_bufmap_alloc(user_desc);
ret = orangefs_bufmap_map(bufmap, user_desc);
int orangefs_bufmap_initialize(struct ORANGEFS_dev_map_desc *user_desc);
struct user_desc desc = {
struct user_desc *low_desc = mmap(
struct user_desc desc = {
struct user_desc *low_desc = mmap(
static bool install_valid_mode(const struct user_desc *d, uint32_t ar,
struct user_desc desc = *d;
static bool install_valid(const struct user_desc *desc, uint32_t ar)
static void install_invalid(const struct user_desc *desc, bool oldmode)
static int safe_modify_ldt(int func, struct user_desc *ptr,
static void fail_install(struct user_desc *desc)
struct user_desc desc = {
const struct user_desc desc = {};
struct user_desc desc = {
static struct user_desc *low_user_desc;
static struct user_desc *low_user_desc_clear; /* Use to delete GDT entry */
struct user_desc desc = {
low_user_desc = mmap(NULL, 2 * sizeof(struct user_desc),
static void add_ldt(const struct user_desc *desc, unsigned short *var,
const struct user_desc code16_desc = {
const struct user_desc data16_desc = {
const struct user_desc npcode32_desc = {
const struct user_desc npdata32_desc = {
struct user_desc gdt_data16_desc = {
struct user_desc gdt_npdata32_desc = {