]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
parisc: Fix return code of pdc_iodc_print()
authorHelge Deller <deller@gmx.de>
Mon, 19 Dec 2022 19:56:36 +0000 (20:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Feb 2023 16:22:19 +0000 (17:22 +0100)
commit 5d1335dabb3c493a3d6d5b233953b6ac7b6c1ff2 upstream.

There is an off-by-one if the printed string includes a new-line
char.

Cc: stable@vger.kernel.org
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/kernel/firmware.c

index 665b70086685c3f4c7229bdeafaeebd9d106512b..7ed28ddcaba7d8a84c4f209bf4976008aba4e0e0 100644 (file)
@@ -1230,7 +1230,7 @@ static char __attribute__((aligned(64))) iodc_dbuf[4096];
  */
 int pdc_iodc_print(const unsigned char *str, unsigned count)
 {
-       unsigned int i;
+       unsigned int i, found = 0;
        unsigned long flags;
 
        for (i = 0; i < count;) {
@@ -1239,6 +1239,7 @@ int pdc_iodc_print(const unsigned char *str, unsigned count)
                        iodc_dbuf[i+0] = '\r';
                        iodc_dbuf[i+1] = '\n';
                        i += 2;
+                       found = 1;
                        goto print;
                default:
                        iodc_dbuf[i] = str[i];
@@ -1255,7 +1256,7 @@ print:
                     __pa(iodc_retbuf), 0, __pa(iodc_dbuf), i, 0);
         spin_unlock_irqrestore(&pdc_lock, flags);
 
-       return i;
+       return i - found;
 }
 
 #if !defined(BOOTLOADER)