From patchwork Mon Oct 5 10:21:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1376732 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=XbJuCtJU; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C4c8B5SjBz9sSs for ; Mon, 5 Oct 2020 21:21:30 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A9AE082320; Mon, 5 Oct 2020 12:21:26 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="XbJuCtJU"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1A144818F8; Mon, 5 Oct 2020 12:21:25 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 390D8818F8 for ; Mon, 5 Oct 2020 12:21:20 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1601893271; bh=8WHP7DqI9wAY1ST25eVYNe9NXsIU86TqLqLFX7el65A=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=XbJuCtJUs3X0T47cJ9r/NcCgwjE1xIEU8fi26n4WMaSeq4Ck2EWMYmGQ/Fg7RVaVr MTVyQW7QVwU53+vBzliaXa8jLglTVjGdfdDXnQ5XKx28Rr0TWZHLwidMBH2nVKTApy wcRkmSMuelZlpZjDjUM6CHL1hqVHfVAC6z6IyyF0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from workstation4.fritz.box ([178.202.41.107]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MMXUN-1k8XS41txf-00JbCG; Mon, 05 Oct 2020 12:21:11 +0200 From: Heinrich Schuchardt To: Simon Glass Cc: Bin Meng , Peng Fan , Wolfgang Wallner , Baruch Siach , Masahiro Yamada , u-boot@lists.denx.de, Heinrich Schuchardt Subject: [PATCH v2 1/1] log: mute messages generated by log drivers Date: Mon, 5 Oct 2020 12:21:02 +0200 Message-Id: <20201005102102.15029-1-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 X-Provags-ID: V03:K1:iO9b+XPtNHV9DdKBO7PQz4FpwmXfi/LJ6QDotwl+ueuRtUdirc/ 63xg5FQZMZHxFYVJmnIUtLrmvreykfedlVixWau3N773tXC+TZWO3CXNIlkrJNVkDBxTdeo aIwkh3gVAfgB2T+YU6pmP3IE126T83sVCEw3qdXNr5W1wv0q8TuwQLz2/fG2atZm/eK4DmV mG1DAIRKy50CS/azsfLOQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:chTDqZneQjs=:dSqbLncPu0MakojmEvQGA+ kEawI+91XWltp82GrRnNm3tcbViQ7b7Fkq8H8STp3qNWBoZmk5wH7SUXg9N1kVa90+LqqiWYQ nsDbNd1sv7wRKpAcD21CkUukH47xPPgacVQTBBm1D/gzLWk+EhxmYW83+gcJ14io/GFdknt1w BE7gnpr7eWvtc1ogjytJkzG7Nupoc9TBn5/RkZn5e6CnR0ha9vuo870JsPoZDkIO6Vs4nhIX4 yNPRBna+0ru4O+t7rGi58ClBMsbeACdHIOdTPrSlO1+bygo3BjOcQX+vNKYmr5ysKyanImj5o vu/fG6ArVQ/b5W3ueibPTh1UPjbGW4w53ute5XK/6DdzJFYsAmEuo3G9R//5e+BVmo+eyC/1x K51JrUHjVEVxCJJwG3aGir07Y9FOK9OGAho1xTHO7fwhWVuvPVYSEZtcPeaIt3OY/x/Xwfj3D bmdRFB15a9jWv7rHgm5EkX1FBQN0DjsIHW6Eg+TTSm+a/zRKIxNI5JcQUtoOWXBWrW5UlH7ZT CA9YjXbCaGFkzHqj3lo8wdjscfn/VaqXqo9WKvNRcz8z81v1QFn0sSA104yjl9Um0YT2yI73T 9GhUt4oQXxP3DzMt1oXDj3zVNOIlkMcV45brlwrjdo9uEJq5xvBTasy76iabt26vixKELJv5D 88e6p73vY9FM1FPxfS7/z94+4W+fMov6MbuUDWsbX44SV2XphSFbnR7J9zTacZC/6Bf5zSm9h 2X6UBOsxbIYaD/CnV/7Lh41RNiBQtCzXv3g6f07uzt5P9v9xTD4dEQEAnrvFVvNUrdRhUjcz6 zSGfgUqwZeCmgiZt1uD8wxwg8ASqhlEgtjQHl2h57WKCfsGLDsiMnvRL4xPsAVqss6JP65ZEo QaZLyR7/52dncnWmq964E/gm2U4zm+gMS0ISoi/0aLE2WyUdTBMy5hNam3PE4i8Uz3C64/kL7 eEz/n3p4ML9vQJr9pYFPP6/qMBtDNHJ4XVUEx23xEVyjx0zh6ANvphNiZ1kNB5/shKSKbM8CR qSZ0+vhWY52bghz5jhB171rgVY4BwW7j+FbB02gMtq75CDjhcKRZMU4lK7UvxKZ1Y58WucTdi 59Z4xfY65a+WJRYtpZKbfw4an/FQCn3XHKyS5Zns1tLkNfmpVQ1zTMGeRZvgvCf0IypjnLrBY 3QpkVabvWseJBouGIjFmSYnDnZ8s+h5LRl+i7kfI+r/54kWFu9nSrzU1XCM6AwulCv7FvgvVc 2jBenyhf3KDzrw7Wk0+Yql0jG0UBN8xXRlgkpaA== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean When a message is written by a log driver (e.g. via the network stack) this may result in the generation of further messages. We cannot allow these additional messages to be emitted as this might result in an infinite recursion. Up to now only the syslog driver was safeguarded. We should safeguard all log drivers instead. Signed-off-by: Heinrich Schuchardt --- This patch is based on [PATCH v3 0/3] doc: global data pointer https://lists.denx.de/pipermail/u-boot/2020-October/428475.html v2: move processing_msg to global data pointer (Simon reported a problem with SPL log messages when useing a static variable) --- common/log.c | 12 +++++++++++- common/log_syslog.c | 8 -------- include/asm-generic/global_data.h | 8 ++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) -- 2.28.0 diff --git a/common/log.c b/common/log.c index 734d26de4a..54f2fdeb36 100644 --- a/common/log.c +++ b/common/log.c @@ -192,11 +192,21 @@ static int log_dispatch(struct log_rec *rec) { struct log_device *ldev; + /* + * When a log driver writes messages (e.g. via the network stack) this + * may result in further generated messages. We cannot process them here + * as this might result in infinite recursion. + */ + if (gd->processing_msg) + return 0; + + /* Emit message */ + gd->processing_msg = 1; list_for_each_entry(ldev, &gd->log_head, sibling_node) { if (log_passes_filters(ldev, rec)) ldev->drv->emit(ldev, rec); } - + gd->processing_msg = 0; return 0; } diff --git a/common/log_syslog.c b/common/log_syslog.c index 149ff5af31..2ae703fed7 100644 --- a/common/log_syslog.c +++ b/common/log_syslog.c @@ -35,16 +35,9 @@ static int log_syslog_emit(struct log_device *ldev, struct log_rec *rec) char *log_msg; int eth_hdr_size; struct in_addr bcast_ip; - static int processing_msg; unsigned int log_level; char *log_hostname; - /* Fend off messages from the network stack while writing a message */ - if (processing_msg) - return 0; - - processing_msg = 1; - /* Setup packet buffers */ net_init(); /* Disable hardware and put it into the reset state */ @@ -108,7 +101,6 @@ static int log_syslog_emit(struct log_device *ldev, struct log_rec *rec) net_send_packet((uchar *)msg, ptr - msg); out: - processing_msg = 0; return ret; } diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index ebb740d34f..6bb7f93678 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -363,6 +363,14 @@ struct global_data { * &enum log_fmt defines the bits of the bit mask. */ int log_fmt; + + /** + * @processing_msg: a log message is being processed + * + * This flag is used to suppress the creation of additional messages + * while another message is being processed. + */ + int processing_msg; #endif #if CONFIG_IS_ENABLED(BLOBLIST) /**