libb64: Fix integer overflow and uninitialized C++ objects.
PATCH 6/6 libb64: Fix integer overflow and uninitialized C++ objects.
--- package/libb64/0001-Integer-overflows.patch | 68 +++++++++++++++++++++ package/libb64/libb64.hash | 1 + package/libb64/libb64.mk | 1 + 3 files changed, 70 insertions(+) create mode 100644 package/libb64/0001-Integer-overflows.patch
package/libb64/0001-Integer-overflows.patch new file +68 -0
@@ -0,0 +1,68 @@ +Fix integer overflows. +Fetch from: https://sources.debian.org/patches/libb64/1.2-5/ +Combined "integer overflows.diff" and "off by one.diff" and adapted for version 1.2.1. + +Signed-off-by: Mikael Eliasson <[email protected]> +diff --git a/src/cdecode.c b/src/cdecode.c +index a6c0a42..45da4e1 100644 +--- a/src/cdecode.c ++++ b/src/cdecode.c +@@ -9,10 +9,11 @@ For details, see http://sourceforge.net/projects/libb64 + + int base64_decode_value(char value_in) + { +- static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; ++ static const signed char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51}; + static const char decoding_size = sizeof(decoding); ++ if (value_in < 43) return -1; + value_in -= 43; +- if (value_in < 0 || value_in >= decoding_size) return -1; ++ if (value_in >= decoding_size) return -1; + return decoding[(int)value_in]; + } + +@@ -26,7 +27,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + { + const char* codechar = code_in; + char* plainchar = plaintext_out; +- char fragment; ++ int fragment; + + *plainchar = state_in->plainchar; + +@@ -42,7 +43,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar = (fragment & 0x03f) << 2; + case step_b: +@@ -53,7 +54,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x030) >> 4; + *plainchar = (fragment & 0x00f) << 4; +@@ -65,7 +66,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03c) >> 2; + *plainchar = (fragment & 0x003) << 6; +@@ -77,7 +78,7 @@ int base64_decode_block(const char* code_in, const int length_in, char* plaintex + state_in->plainchar = *plainchar; + return plainchar - plaintext_out; + } +- fragment = (char)base64_decode_value(*codechar++); ++ fragment = base64_decode_value(*codechar++); + } while (fragment < 0); + *plainchar++ |= (fragment & 0x03f); + }
package/libb64/libb64.hash +1 -0
@@ -1,6 +1,7 @@ # sha1 from sourceforge, sha256 locally computed sha1 04b3e21b8c951d27f02fe91249ca3474554af0b9 libb64-1.2.1.zip sha256 20106f0ba95cfd9c35a13c71206643e3fb3e46512df3e2efb2fdbf87116314b2 libb64-1.2.1.zip +sha256 e969d00eb18fbd2d0a2e09b293f118afc70d9ced121b55743d764e849c4fecac initialize-coder-state.diff # Hash for license file: sha256 834b7afa1b3c40289a3be775d3625016be1c0d7ea7a4a26c1eb207f53dc961d8 LICENSE
package/libb64/libb64.mk +1 -0
@@ -7,6 +7,7 @@ LIBB64_VERSION = 1.2.1 LIBB64_SOURCE = libb64-$(LIBB64_VERSION).zip LIBB64_SITE = https://downloads.sourceforge.net/project/libb64/libb64/libb64 +LIBB64_PATCH = https://sources.debian.org/data/main/libb/libb64/1.2-5/debian/patches/initialize-coder-state.diff LIBB64_LICENSE = Public Domain LIBB64_LICENSE_FILES = LICENSE LIBB64_INSTALL_STAGING = YES
Signature · 1 line
2.17.1
PATCH 6/6 libb64: Fix integer overflow and uninitialized C++ objects.
Hello,
Quoted 1 line · Mikael Eliasson
Signed-off-by Mikael Eliasson <[email protected]>
Thanks Mikael for this patch. First of all, why is it PATCH 6/6 ? We did not receive anything else but this sixth patch. Did you had other patches in your series, or is this a mistake ?
Also, could you provide some explanation in the commit log as to why we want those fixes ? Are there fixing security issues ? Runtime bugs ? A bit of context/explanation would be good to have.
Also, since libb64 is maintained with Git (git clone
https://git.code.sf.net/p/libb64/git libb64-git), could you use Git-formatted patches, for both patches (and therefore have both of them in package/, rather than download one from Debian, and have one in package/) ?
Have these patches been submitted upstream ?
Thanks!
Thomas Petazzoni
Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
PATCH 6/6 libb64: Fix integer overflow and uninitialized C++ objects.
Hi,
2018-08-23 13:43 GMT+02:00 Thomas Petazzoni <[email protected]>:
Quoted 9 lines
Hello,
Quoted 1 line · Mikael Eliasson
Signed-off-by Mikael Eliasson <[email protected]>Thanks Mikael for this patch. First of all, why is it PATCH 6/6 ? We did not receive anything else but this sixth patch. Did you had other patches in your series, or is this a mistake ?
I was following the tutorial(git format-patch -M -n -s -o outgoing origin/master) and then it created patches for everything that has happened in the my master branch. Not just what happened in the branch for this patch. Thought that was weird but the official tutorial must be right. I will resubmit with just the change for this patch.
Quoted 5 lines
Also, could you provide some explanation in the commit log as to why we want those fixes ? Are there fixing security issues ? Runtime bugs ? A bit of context/explanation would be good to have.
Will do.
I will be using send-email to resend an updated patch.
Quoted 7 lines
Also, since libb64 is maintained with Git (git clone
https://git.code.sf.net/p/libb64/git libb64-git), could you use Git-formatted patches, for both patches (and therefore have both of them in package/, rather than download one from Debian, and have one in package/) ?
Will do.
Quoted 3 lines
Have these patches been submitted upstream ?
The last change to the project was in 2013.
The oldest debian patch is from 2012 and has not been incorporated. Even though the bug is quite serious.
And people have have been asking for changes in 2016 related to some of these patches without a response.
So I think that page can be declared dead.
Quoted 8 lines
Thanks!
Thomas Petazzoni
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Signature · 11 lines
Mikael Eliasson Telefon: +46703900837 Email: mikael at robomagi.com Adress: Robomagi AB T?ngringsgatan 26A 78430 Borl?nge -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180823/b4fd84af/attachment.html>