y2038: move itimer reset into itimer.c
Preparing for a change to the itimer internals, stop using the do_setitimer() symbol and instead use a new higher-level interface. The do_getitimer()/do_setitimer functions can now be made static, allowing the compiler to potentially produce better object code. Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
4c22ea2b91
commit
ddbc7d0657
|
@ -35,10 +35,11 @@ extern time64_t mktime64(const unsigned int year, const unsigned int mon,
|
||||||
extern u32 (*arch_gettimeoffset)(void);
|
extern u32 (*arch_gettimeoffset)(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct itimerval;
|
#ifdef CONFIG_POSIX_TIMERS
|
||||||
extern int do_setitimer(int which, struct itimerval *value,
|
extern void clear_itimer(void);
|
||||||
struct itimerval *ovalue);
|
#else
|
||||||
extern int do_getitimer(int which, struct itimerval *value);
|
static inline void clear_itimer(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
extern long do_utimes(int dfd, const char __user *filename, struct timespec64 *times, int flags);
|
extern long do_utimes(int dfd, const char __user *filename, struct timespec64 *times, int flags);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ static void get_cpu_itimer(struct task_struct *tsk, unsigned int clock_id,
|
||||||
value->it_interval = ns_to_timeval(interval);
|
value->it_interval = ns_to_timeval(interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_getitimer(int which, struct itimerval *value)
|
static int do_getitimer(int which, struct itimerval *value)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ static void set_cpu_itimer(struct task_struct *tsk, unsigned int clock_id,
|
||||||
#define timeval_valid(t) \
|
#define timeval_valid(t) \
|
||||||
(((t)->tv_sec >= 0) && (((unsigned long) (t)->tv_usec) < USEC_PER_SEC))
|
(((t)->tv_sec >= 0) && (((unsigned long) (t)->tv_usec) < USEC_PER_SEC))
|
||||||
|
|
||||||
int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue)
|
static int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
struct hrtimer *timer;
|
struct hrtimer *timer;
|
||||||
|
@ -249,6 +249,17 @@ again:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SECURITY_SELINUX
|
||||||
|
void clear_itimer(void)
|
||||||
|
{
|
||||||
|
struct itimerval v = {};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
do_setitimer(i, &v, NULL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __ARCH_WANT_SYS_ALARM
|
#ifdef __ARCH_WANT_SYS_ALARM
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2549,9 +2549,8 @@ static void selinux_bprm_committing_creds(struct linux_binprm *bprm)
|
||||||
static void selinux_bprm_committed_creds(struct linux_binprm *bprm)
|
static void selinux_bprm_committed_creds(struct linux_binprm *bprm)
|
||||||
{
|
{
|
||||||
const struct task_security_struct *tsec = selinux_cred(current_cred());
|
const struct task_security_struct *tsec = selinux_cred(current_cred());
|
||||||
struct itimerval itimer;
|
|
||||||
u32 osid, sid;
|
u32 osid, sid;
|
||||||
int rc, i;
|
int rc;
|
||||||
|
|
||||||
osid = tsec->osid;
|
osid = tsec->osid;
|
||||||
sid = tsec->sid;
|
sid = tsec->sid;
|
||||||
|
@ -2569,11 +2568,8 @@ static void selinux_bprm_committed_creds(struct linux_binprm *bprm)
|
||||||
rc = avc_has_perm(&selinux_state,
|
rc = avc_has_perm(&selinux_state,
|
||||||
osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL);
|
osid, sid, SECCLASS_PROCESS, PROCESS__SIGINH, NULL);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
if (IS_ENABLED(CONFIG_POSIX_TIMERS)) {
|
clear_itimer();
|
||||||
memset(&itimer, 0, sizeof itimer);
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
do_setitimer(i, &itimer, NULL);
|
|
||||||
}
|
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
if (!fatal_signal_pending(current)) {
|
if (!fatal_signal_pending(current)) {
|
||||||
flush_sigqueue(¤t->pending);
|
flush_sigqueue(¤t->pending);
|
||||||
|
|
Loading…
Reference in New Issue