cregit-Linux how code gets into the kernel

Release 4.14 drivers/input/input-compat.c

Directory: drivers/input
/*
 * 32bit compatibility wrappers for the input subsystem.
 *
 * Very heavily based on evdev.c - Copyright (c) 1999-2002 Vojtech Pavlik
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */

#include <linux/export.h>
#include <linux/uaccess.h>
#include "input-compat.h"

#ifdef CONFIG_COMPAT


int input_event_from_user(const char __user *buffer, struct input_event *event) { if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct input_event_compat compat_event; if (copy_from_user(&compat_event, buffer, sizeof(struct input_event_compat))) return -EFAULT; event->time.tv_sec = compat_event.time.tv_sec; event->time.tv_usec = compat_event.time.tv_usec; event->type = compat_event.type; event->code = compat_event.code; event->value = compat_event.value; } else { if (copy_from_user(event, buffer, sizeof(struct input_event))) return -EFAULT; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale11895.93%133.33%
H. J. Lu32.44%133.33%
Andrew Morton21.63%133.33%
Total123100.00%3100.00%


int input_event_to_user(char __user *buffer, const struct input_event *event) { if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct input_event_compat compat_event; compat_event.time.tv_sec = event->time.tv_sec; compat_event.time.tv_usec = event->time.tv_usec; compat_event.type = event->type; compat_event.code = event->code; compat_event.value = event->value; if (copy_to_user(buffer, &compat_event, sizeof(struct input_event_compat))) return -EFAULT; } else { if (copy_to_user(buffer, event, sizeof(struct input_event))) return -EFAULT; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale11895.93%133.33%
H. J. Lu32.44%133.33%
Andrew Morton21.63%133.33%
Total123100.00%3100.00%


int input_ff_effect_from_user(const char __user *buffer, size_t size, struct ff_effect *effect) { if (in_compat_syscall()) { struct ff_effect_compat *compat_effect; if (size != sizeof(struct ff_effect_compat)) return -EINVAL; /* * It so happens that the pointer which needs to be changed * is the last field in the structure, so we can retrieve the * whole thing and replace just the pointer. */ compat_effect = (struct ff_effect_compat *)effect; if (copy_from_user(compat_effect, buffer, sizeof(struct ff_effect_compat))) return -EFAULT; if (compat_effect->type == FF_PERIODIC && compat_effect->u.periodic.waveform == FF_CUSTOM) effect->u.periodic.custom_data = compat_ptr(compat_effect->u.periodic.custom_data); } else { if (size != sizeof(struct ff_effect)) return -EINVAL; if (copy_from_user(effect, buffer, sizeof(struct ff_effect))) return -EFAULT; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale14898.67%150.00%
Andrew Morton21.33%150.00%
Total150100.00%2100.00%

#else
int input_event_from_user(const char __user *buffer, struct input_event *event) { if (copy_from_user(event, buffer, sizeof(struct input_event))) return -EFAULT; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale38100.00%1100.00%
Total38100.00%1100.00%


int input_event_to_user(char __user *buffer, const struct input_event *event) { if (copy_to_user(buffer, event, sizeof(struct input_event))) return -EFAULT; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale38100.00%1100.00%
Total38100.00%1100.00%


int input_ff_effect_from_user(const char __user *buffer, size_t size, struct ff_effect *effect) { if (size != sizeof(struct ff_effect)) return -EINVAL; if (copy_from_user(effect, buffer, sizeof(struct ff_effect))) return -EFAULT; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale55100.00%1100.00%
Total55100.00%1100.00%

#endif /* CONFIG_COMPAT */ EXPORT_SYMBOL_GPL(input_event_from_user); EXPORT_SYMBOL_GPL(input_event_to_user); EXPORT_SYMBOL_GPL(input_ff_effect_from_user);

Overall Contributors

PersonTokensPropCommitsCommitProp
Philip Langdale54497.14%120.00%
Andrew Morton61.07%120.00%
H. J. Lu61.07%120.00%
Paul Gortmaker30.54%120.00%
Linus Torvalds10.18%120.00%
Total560100.00%5100.00%
Directory: drivers/input
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.