Received: by 10.192.165.148 with SMTP id m20csp579176imm; Wed, 25 Apr 2018 04:36:19 -0700 (PDT) X-Google-Smtp-Source: AB8JxZo+4r3sCXOOxuX1px+vtRcW2hTiZZLX99JbqY7+OuLby1HETGy9NSbYw8I6yvazTQkjX3nO X-Received: by 2002:a17:902:8345:: with SMTP id z5-v6mr2744873pln.311.1524656179222; Wed, 25 Apr 2018 04:36:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524656179; cv=none; d=google.com; s=arc-20160816; b=IqDy3L8JD//eF98pGLSphkOjsFVmrSS07O+0EGGluDjTX0rM6aAOW6McKnuH5zfHiX yCbfUc2A+w5PMn82iA0XBHWdoDvFcHrkN5ziADOaPhSIHS9ZzTd8qdfsTK4sPcfDhJBi OgAKh4II67PFANMrWKsoqw0P9nxyno48uuAKbTay79fnUl+3TQ04LjmPr7A8SI0pkE9y hgvN+KWKg2qd4vl8WyV5mjCDMVgFyOWVxtaPuw2hyakrgAFF4nGcL5maPj3Qtvdjs+Am 6y6fsakeJQetg7eQ5li66j7eTVYdV3E+FrsvZwjHb1WyH7toPapqe8Fs5mYRLWVUfpTd bM+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=VMCqsYq/2os1QiqcUjRPNVln/09tHuWtFaUPmu0YTrw=; b=Ji0dE73PKXPU7SINl0+15rL7cRbsu9oNYVZexxXubOY5yWWfCszYD3Pe6tZJxwf6J1 W4en1RIBu3qC9HfYLLU9pk0DRkjP7r9VbQlR8J9GA49iyRMOOd9cLj76Z+278VgSlXVI sb7sJo3dJwV457UypqyRLW7JsODXrbYSU9wRbeawU/Az4UoWZTJUhnH9Y9xe3NvPbc7W FSSA118N0YcGOcLa9J6tnpO9IlWirjKnOLKSDGKqfygjMwCD8fwxeEkJ8NPmbFdcvhQS Ne1pG3vLavp7HvRt41TD6SY4y85guwanCbkLN9/6trvybVE+XBERBcRcf8S6uU3Ty+Kd RiFQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g3-v6si16333372pld.309.2018.04.25.04.36.04; Wed, 25 Apr 2018 04:36:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752276AbeDYKeS (ORCPT + 99 others); Wed, 25 Apr 2018 06:34:18 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:50790 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752418AbeDYKeK (ORCPT ); Wed, 25 Apr 2018 06:34:10 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id D780A481; Wed, 25 Apr 2018 10:34:09 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+a3e0726462b2e346a31d@syzkaller.appspotmail.com, Thomas Gleixner , John Stultz , syzkaller-bugs@googlegroups.com Subject: [PATCH 4.16 16/26] alarmtimer: Init nanosleep alarm timer on stack Date: Wed, 25 Apr 2018 12:33:25 +0200 Message-Id: <20180425103315.495568865@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180425103314.842517924@linuxfoundation.org> References: <20180425103314.842517924@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Thomas Gleixner commit bd03143007eb9b03a7f2316c677780561b68ba2a upstream. syszbot reported the following debugobjects splat: ODEBUG: object is on stack, but not annotated WARNING: CPU: 0 PID: 4185 at lib/debugobjects.c:328 RIP: 0010:debug_object_is_on_stack lib/debugobjects.c:327 [inline] debug_object_init+0x17/0x20 lib/debugobjects.c:391 debug_hrtimer_init kernel/time/hrtimer.c:410 [inline] debug_init kernel/time/hrtimer.c:458 [inline] hrtimer_init+0x8c/0x410 kernel/time/hrtimer.c:1259 alarm_init kernel/time/alarmtimer.c:339 [inline] alarm_timer_nsleep+0x164/0x4d0 kernel/time/alarmtimer.c:787 SYSC_clock_nanosleep kernel/time/posix-timers.c:1226 [inline] SyS_clock_nanosleep+0x235/0x330 kernel/time/posix-timers.c:1204 do_syscall_64+0x281/0x940 arch/x86/entry/common.c:287 entry_SYSCALL_64_after_hwframe+0x42/0xb7 This happens because the hrtimer for the alarm nanosleep is on stack, but the code does not use the proper debug objects initialization. Split out the code for the allocated use cases and invoke hrtimer_init_on_stack() for the nanosleep related functions. Reported-by: syzbot+a3e0726462b2e346a31d@syzkaller.appspotmail.com Signed-off-by: Thomas Gleixner Cc: John Stultz Cc: syzkaller-bugs@googlegroups.com Link: https://lkml.kernel.org/r/alpine.DEB.2.21.1803261528270.1585@nanos.tec.linutronix.de Signed-off-by: Greg Kroah-Hartman --- kernel/time/alarmtimer.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) --- a/kernel/time/alarmtimer.c +++ b/kernel/time/alarmtimer.c @@ -326,6 +326,17 @@ static int alarmtimer_resume(struct devi } #endif +static void +__alarm_init(struct alarm *alarm, enum alarmtimer_type type, + enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) +{ + timerqueue_init(&alarm->node); + alarm->timer.function = alarmtimer_fired; + alarm->function = function; + alarm->type = type; + alarm->state = ALARMTIMER_STATE_INACTIVE; +} + /** * alarm_init - Initialize an alarm structure * @alarm: ptr to alarm to be initialized @@ -335,13 +346,9 @@ static int alarmtimer_resume(struct devi void alarm_init(struct alarm *alarm, enum alarmtimer_type type, enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) { - timerqueue_init(&alarm->node); hrtimer_init(&alarm->timer, alarm_bases[type].base_clockid, - HRTIMER_MODE_ABS); - alarm->timer.function = alarmtimer_fired; - alarm->function = function; - alarm->type = type; - alarm->state = ALARMTIMER_STATE_INACTIVE; + HRTIMER_MODE_ABS); + __alarm_init(alarm, type, function); } EXPORT_SYMBOL_GPL(alarm_init); @@ -719,6 +726,8 @@ static int alarmtimer_do_nsleep(struct a __set_current_state(TASK_RUNNING); + destroy_hrtimer_on_stack(&alarm->timer); + if (!alarm->data) return 0; @@ -740,6 +749,15 @@ static int alarmtimer_do_nsleep(struct a return -ERESTART_RESTARTBLOCK; } +static void +alarm_init_on_stack(struct alarm *alarm, enum alarmtimer_type type, + enum alarmtimer_restart (*function)(struct alarm *, ktime_t)) +{ + hrtimer_init_on_stack(&alarm->timer, alarm_bases[type].base_clockid, + HRTIMER_MODE_ABS); + __alarm_init(alarm, type, function); +} + /** * alarm_timer_nsleep_restart - restartblock alarmtimer nsleep * @restart: ptr to restart block @@ -752,7 +770,7 @@ static long __sched alarm_timer_nsleep_r ktime_t exp = restart->nanosleep.expires; struct alarm alarm; - alarm_init(&alarm, type, alarmtimer_nsleep_wakeup); + alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup); return alarmtimer_do_nsleep(&alarm, exp, type); } @@ -784,7 +802,7 @@ static int alarm_timer_nsleep(const cloc if (!capable(CAP_WAKE_ALARM)) return -EPERM; - alarm_init(&alarm, type, alarmtimer_nsleep_wakeup); + alarm_init_on_stack(&alarm, type, alarmtimer_nsleep_wakeup); exp = timespec64_to_ktime(*tsreq); /* Convert (if necessary) to absolute time */