From fad3c2e199c690d6aa8c249e42b2babd0d250af56191d92185da536744a6d8b1 Mon Sep 17 00:00:00 2001 From: Raymund Will Date: Thu, 11 Oct 2018 12:54:46 +0000 Subject: [PATCH] Accepting request 641192 from home:gary_lin:branches:Base:System fix StrnCpy(), StpnCpy(), and StrnCat() OBS-URL: https://build.opensuse.org/request/show/641192 OBS-URL: https://build.opensuse.org/package/show/Base:System/gnu-efi?expand=0&rev=33 --- gnu-efi-fix-strncpy-stpncpy-strncat.patch | 151 ++++++++++++++++++++++ gnu-efi.changes | 6 + gnu-efi.spec | 2 + 3 files changed, 159 insertions(+) create mode 100644 gnu-efi-fix-strncpy-stpncpy-strncat.patch diff --git a/gnu-efi-fix-strncpy-stpncpy-strncat.patch b/gnu-efi-fix-strncpy-stpncpy-strncat.patch new file mode 100644 index 0000000..ef88bcf --- /dev/null +++ b/gnu-efi-fix-strncpy-stpncpy-strncat.patch @@ -0,0 +1,151 @@ +From 85f1c797f6935223205159dd108e4871b2e55500 Mon Sep 17 00:00:00 2001 +From: Pete Batard +Date: Tue, 24 Apr 2018 13:45:11 +0100 +Subject: [PATCH 1/4] Fix conversion from 'UINTN' to 'UINT8' warnings + +* MSVC generates two of the following in rtstr.c: + warning C4244: 'function': conversion from 'UINTN' to 'UINT8', possible loss of data +--- + lib/runtime/rtstr.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c +index 80ff489..dcc1a2a 100644 +--- a/lib/runtime/rtstr.c ++++ b/lib/runtime/rtstr.c +@@ -71,7 +71,7 @@ RtStrnCpy ( + { + UINTN Size = RtStrnLen(Src, Len); + if (Size != Len) +- RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16)); ++ RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16))); + RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + } + +@@ -107,7 +107,7 @@ RtStpnCpy ( + { + UINTN Size = RtStrnLen(Src, Len); + if (Size != Len) +- RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16)); ++ RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16))); + RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + return Dest + Size; + } +-- +2.19.0 + + +From 4889dc561f905406f3d0a648321589bd47703fdc Mon Sep 17 00:00:00 2001 +From: Gary Lin +Date: Tue, 9 Oct 2018 18:35:21 +0800 +Subject: [PATCH 2/4] Set '\0' properly in StrnCpy() + +The arguments to SetMem() were wrong. Besides, SetMem() should start at +"Dest + Size" since "Size" will be smaller than "Len" if they are not +equal. + +Signed-off-by: Gary Lin +--- + lib/runtime/rtstr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c +index dcc1a2a..949f938 100644 +--- a/lib/runtime/rtstr.c ++++ b/lib/runtime/rtstr.c +@@ -71,7 +71,7 @@ RtStrnCpy ( + { + UINTN Size = RtStrnLen(Src, Len); + if (Size != Len) +- RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16))); ++ RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0'); + RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + } + +-- +2.19.0 + + +From 38a9921bc39fea25b0ca62d6eb1595bf15d05839 Mon Sep 17 00:00:00 2001 +From: Gary Lin +Date: Thu, 11 Oct 2018 12:02:27 +0800 +Subject: [PATCH 3/4] Implement StrnCat() without StrnCpy() + +StrnCpy() doesn't guarantee the dest string will be null-terminated, so +we shouldn't use StrnCpy(). + +Signed-off-by: Gary Lin +--- + lib/runtime/rtstr.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c +index 949f938..fe65d96 100644 +--- a/lib/runtime/rtstr.c ++++ b/lib/runtime/rtstr.c +@@ -126,7 +126,7 @@ RtStrCat ( + } + + #ifndef __GNUC__ +-#pragma RUNTIME_CODE(RtStrCat) ++#pragma RUNTIME_CODE(RtStrnCat) + #endif + VOID + RUNTIMEFUNCTION +@@ -136,7 +136,12 @@ RtStrnCat ( + IN UINTN Len + ) + { +- RtStrnCpy(Dest+StrLen(Dest), Src, Len); ++ UINTN DestSize, Size; ++ ++ DestSize = StrLen(Dest); ++ Size = RtStrnLen(Src, Len); ++ RtCopyMem(Dest + DestSize, Src, Size * sizeof(CHAR16)); ++ Dest[DestSize + Size] = '\0'; + } + + #ifndef __GNUC__ +-- +2.19.0 + + +From 134587ea094a4974e5773bf228f6436535f50f1a Mon Sep 17 00:00:00 2001 +From: Gary Lin +Date: Thu, 11 Oct 2018 16:10:26 +0800 +Subject: [PATCH 4/4] Set '\0' properly in StpnCpy() + +The arguments to SetMem() were wrong. Besides, SetMem() should start at +"Dest + Size" since "Size" will be smaller than "Len" if they are not +equal. + +Signed-off-by: Gary Lin +--- + lib/runtime/rtstr.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c +index fe65d96..73965ca 100644 +--- a/lib/runtime/rtstr.c ++++ b/lib/runtime/rtstr.c +@@ -94,7 +94,7 @@ RtStpCpy ( + } + + #ifndef __GNUC__ +-#pragma RUNTIME_CODE(RtStrnCpy) ++#pragma RUNTIME_CODE(RtStpnCpy) + #endif + CHAR16 * + RUNTIMEFUNCTION +@@ -107,7 +107,7 @@ RtStpnCpy ( + { + UINTN Size = RtStrnLen(Src, Len); + if (Size != Len) +- RtSetMem(Dest + Len, '\0', (UINT8)((Len - Size) * sizeof(CHAR16))); ++ RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0'); + RtCopyMem(Dest, Src, Size * sizeof(CHAR16)); + return Dest + Size; + } +-- +2.19.0 + diff --git a/gnu-efi.changes b/gnu-efi.changes index 69302b6..07e6f27 100644 --- a/gnu-efi.changes +++ b/gnu-efi.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Oct 11 08:15:40 UTC 2018 - Gary Ching-Pang Lin + +- Add gnu-efi-fix-strncpy-stpncpy-strncat.patch to fix StrnCpy(), + StpnCpy(), and StrnCat() + ------------------------------------------------------------------- Fri Oct 5 09:19:44 UTC 2018 - Gary Ching-Pang Lin diff --git a/gnu-efi.spec b/gnu-efi.spec index 586c921..62d71d7 100644 --- a/gnu-efi.spec +++ b/gnu-efi.spec @@ -25,6 +25,7 @@ Group: Development/Libraries/Other Url: http://sourceforge.net/projects/gnu-efi Source: http://sourceforge.net/projects/gnu-efi/files/gnu-efi-%{version}.tar.bz2 Source1: %{name}-rpmlintrc +Patch1: %{name}-fix-strncpy-stpncpy-strncat.patch BuildRequires: kernel-source BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: ia64 %ix86 x86_64 aarch64 %arm @@ -36,6 +37,7 @@ environment. %prep %setup -q +%patch1 -p1 %build ##########################