From 7a3f41af4d633d491d6a114428619a80a266f06f Mon Sep 17 00:00:00 2001 From: Josef Schlehofer Date: Thu, 13 Jan 2022 14:46:40 +0100 Subject: [PATCH] mariadb: update to version 10.4.22 Fixes: CVE-2021-35604 Removed two patches: 130-c11_atomics.patch - included in upstream now [1] 140-mips-connect-unaligned.patch - included in upstream, too. [2] [1] https://github.com/MariaDB/server/commit/f502ccbcb5dfce29067434885a23db8d1bd5f134#diff-6ef8fc82162068daeab927be94e246b202eb39323a102273b9448219da24172f [2] https://github.com/MariaDB/server/commit/a33c1082dab7ab4b08acf957d6364be95e4c6a9f#diff-821e2c7a49184a660339b094f437fcd1e9aea997a86391467a657088234ebca0 Signed-off-by: Josef Schlehofer --- utils/mariadb/Makefile | 4 +- utils/mariadb/patches/130-c11_atomics.patch | 64 ----- .../patches/140-mips-connect-unaligned.patch | 257 ------------------ 3 files changed, 2 insertions(+), 323 deletions(-) delete mode 100644 utils/mariadb/patches/130-c11_atomics.patch delete mode 100644 utils/mariadb/patches/140-mips-connect-unaligned.patch diff --git a/utils/mariadb/Makefile b/utils/mariadb/Makefile index 65033ab587..ac2307cd32 100644 --- a/utils/mariadb/Makefile +++ b/utils/mariadb/Makefile @@ -9,13 +9,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mariadb -PKG_VERSION:=10.4.21 +PKG_VERSION:=10.4.22 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL := https://archive.mariadb.org/$(PKG_NAME)-$(PKG_VERSION)/source -PKG_HASH:=94dd2e6f5d286de8a7dccffe984015d4253a0568281c7440e772cfbe098a291d +PKG_HASH:=44bdc36eeb02888296e961718bae808f3faab268ed49160a785248db60500c00 PKG_MAINTAINER:=Michal Hrusecky PKG_LICENSE:=GPL-2.0-only PKG_LICENSE_FILES:=COPYING THIRDPARTY diff --git a/utils/mariadb/patches/130-c11_atomics.patch b/utils/mariadb/patches/130-c11_atomics.patch deleted file mode 100644 index a99566e3a3..0000000000 --- a/utils/mariadb/patches/130-c11_atomics.patch +++ /dev/null @@ -1,64 +0,0 @@ -Author: Vicențiu Ciorbaru -Date: Fri Dec 21 19:14:04 2018 +0200 - - Link with libatomic to enable C11 atomics support - - Some architectures (mips) require libatomic to support proper - atomic operations. Check first if support is available without - linking, otherwise use the library. - ---- a/configure.cmake -+++ b/configure.cmake -@@ -866,7 +866,25 @@ int main() - long long int *ptr= &var; - return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); - }" --HAVE_GCC_C11_ATOMICS) -+HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) -+IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) -+ SET(HAVE_GCC_C11_ATOMICS True) -+ELSE() -+ SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) -+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") -+ CHECK_CXX_SOURCE_COMPILES(" -+ int main() -+ { -+ long long int var= 1; -+ long long int *ptr= &var; -+ return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); -+ }" -+ HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) -+ IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) -+ SET(HAVE_GCC_C11_ATOMICS True) -+ ENDIF() -+ SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES}) -+ENDIF() - - IF(WITH_VALGRIND) - SET(HAVE_valgrind 1) ---- a/mysys/CMakeLists.txt -+++ b/mysys/CMakeLists.txt -@@ -78,6 +78,10 @@ TARGET_LINK_LIBRARIES(mysys dbug strings - ${LIBNSL} ${LIBM} ${LIBRT} ${CMAKE_DL_LIBS} ${LIBSOCKET} ${LIBEXECINFO} ${CRC32_LIBRARY}) - DTRACE_INSTRUMENT(mysys) - -+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) -+ TARGET_LINK_LIBRARIES(mysys atomic) -+ENDIF() -+ - IF(HAVE_BFD_H) - TARGET_LINK_LIBRARIES(mysys bfd) - ENDIF(HAVE_BFD_H) ---- a/sql/CMakeLists.txt -+++ b/sql/CMakeLists.txt -@@ -191,6 +191,10 @@ ELSE() - SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL}) - ENDIF() - -+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) -+ TARGET_LINK_LIBRARIES(sql atomic) -+ENDIF() -+ - - IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS) - diff --git a/utils/mariadb/patches/140-mips-connect-unaligned.patch b/utils/mariadb/patches/140-mips-connect-unaligned.patch deleted file mode 100644 index 7eceffa24c..0000000000 --- a/utils/mariadb/patches/140-mips-connect-unaligned.patch +++ /dev/null @@ -1,257 +0,0 @@ -From: Debian MySQL Maintainers -Date: Thu, 10 Aug 2017 20:40:28 +0200 -Subject: mips-connect-unaligned - ---- - storage/connect/valblk.cpp | 41 ++++++++++++++++++------------------- - storage/connect/valblk.h | 51 +++++++++++++++++++++++++++++----------------- - 2 files changed, 52 insertions(+), 40 deletions(-) - ---- a/storage/connect/valblk.cpp -+++ b/storage/connect/valblk.cpp -@@ -268,14 +268,14 @@ bool TYPBLK::Init(PGLOBAL g, bool - template - char *TYPBLK::GetCharString(char *p, int n) - { -- sprintf(p, Fmt, Typp[n]); -+ sprintf(p, Fmt, UnalignedRead(n)); - return p; - } // end of GetCharString - - template <> - char *TYPBLK::GetCharString(char *p, int n) - { -- sprintf(p, Fmt, Prec, Typp[n]); -+ sprintf(p, Fmt, Prec, UnalignedRead(n)); - return p; - } // end of GetCharString - -@@ -291,7 +291,7 @@ void TYPBLK::SetValue(PVAL valp, i - ChkTyp(valp); - - if (!(b = valp->IsNull())) -- Typp[n] = GetTypedValue(valp); -+ UnalignedWrite(n, GetTypedValue(valp)); - else - Reset(n); - -@@ -353,9 +353,9 @@ void TYPBLK::SetValue(PCSZ p, int - ulonglong val = CharToNumber(p, strlen(p), maxval, Unsigned, &minus); - - if (minus && val < maxval) -- Typp[n] = (TYPE)(-(signed)val); -+ UnalignedWrite(n, (TYPE)(-(signed)val)); - else -- Typp[n] = (TYPE)val; -+ UnalignedWrite(n, (TYPE)val); - - SetNull(n, false); - } // end of SetValue -@@ -398,7 +398,7 @@ void TYPBLK::SetValue(PCSZ p, in - throw Type; - } // endif Check - -- Typp[n] = atof(p); -+ UnalignedWrite(n, atof(p)); - SetNull(n, false); - } // end of SetValue - -@@ -430,7 +430,7 @@ void TYPBLK::SetValue(PVBLK pv, in - ChkTyp(pv); - - if (!(b = pv->IsNull(n2) && Nullable)) -- Typp[n1] = GetTypedValue(pv, n2); -+ UnalignedWrite(n1, GetTypedValue(pv, n2)); - else - Reset(n1); - -@@ -481,10 +481,10 @@ void TYPBLK::SetMin(PVAL valp, int - { - CheckParms(valp, n) - TYPE tval = GetTypedValue(valp); -- TYPE& tmin = Typp[n]; -+ TYPE tmin = UnalignedRead(n); - - if (tval < tmin) -- tmin = tval; -+ UnalignedWrite(n, tval); - - } // end of SetMin - -@@ -496,10 +496,10 @@ void TYPBLK::SetMax(PVAL valp, int - { - CheckParms(valp, n) - TYPE tval = GetTypedValue(valp); -- TYPE& tmin = Typp[n]; -+ TYPE tmin = UnalignedRead(n); - - if (tval > tmin) -- tmin = tval; -+ UnalignedWrite(n, tval); - - } // end of SetMax - -@@ -513,8 +513,7 @@ void TYPBLK::SetValues(PVBLK pv, i - CheckType(pv) - TYPE *lp = ((TYPBLK*)pv)->Typp; - -- for (int i = k; i < n; i++) // TODO -- Typp[i] = lp[i]; -+ memcpy(Typp + k, lp + k, sizeof(TYPE) * n); - - } // end of SetValues - #endif // 0 -@@ -525,7 +524,7 @@ void TYPBLK::SetValues(PVBLK pv, i - template - void TYPBLK::Move(int i, int j) - { -- Typp[j] = Typp[i]; -+ UnalignedWrite(j, UnalignedRead(i)); - MoveNull(i, j); - } // end of Move - -@@ -539,7 +538,7 @@ int TYPBLK::CompVal(PVAL vp, int n - ChkIndx(n); - ChkTyp(vp); - #endif // _DEBUG -- TYPE mlv = Typp[n]; -+ TYPE mlv = UnalignedRead(n); - TYPE vlv = GetTypedValue(vp); - - return (vlv > mlv) ? 1 : (vlv < mlv) ? (-1) : 0; -@@ -551,8 +550,8 @@ int TYPBLK::CompVal(PVAL vp, int n - template - int TYPBLK::CompVal(int i1, int i2) - { -- TYPE lv1 = Typp[i1]; -- TYPE lv2 = Typp[i2]; -+ TYPE lv1 = UnalignedRead(i1); -+ TYPE lv2 = UnalignedRead(i2); - - return (lv1 > lv2) ? 1 : (lv1 < lv2) ? (-1) : 0; - } // end of CompVal -@@ -589,7 +588,7 @@ int TYPBLK::Find(PVAL vp) - TYPE n = GetTypedValue(vp); - - for (i = 0; i < Nval; i++) -- if (n == Typp[i]) -+ if (n == UnalignedRead(i)) - break; - - return (i < Nval) ? i : (-1); -@@ -605,7 +604,7 @@ int TYPBLK::GetMaxLength(void) - int i, n, m; - - for (i = n = 0; i < Nval; i++) { -- m = sprintf(buf, Fmt, Typp[i]); -+ m = sprintf(buf, Fmt, UnalignedRead(i)); - n = MY_MAX(n, m); - } // endfor i - -@@ -1335,7 +1334,7 @@ char *DATBLK::GetCharString(char *p, int - char *vp; - - if (Dvalp) { -- Dvalp->SetValue(Typp[n]); -+ Dvalp->SetValue(UnalignedRead(n)); - vp = Dvalp->GetCharString(p); - } else - vp = TYPBLK::GetCharString(p, n); -@@ -1351,7 +1350,7 @@ void DATBLK::SetValue(PCSZ p, int n) - if (Dvalp) { - // Decode the string according to format - Dvalp->SetValue_psz(p); -- Typp[n] = Dvalp->GetIntValue(); -+ UnalignedWrite(n, Dvalp->GetIntValue()); - } else - TYPBLK::SetValue(p, n); - ---- a/storage/connect/valblk.h -+++ b/storage/connect/valblk.h -@@ -139,6 +139,7 @@ class VALBLK : public BLOCK { - int Prec; // Precision of float values - }; // end of class VALBLK - -+ - /***********************************************************************/ - /* Class TYPBLK: represents a block of typed values. */ - /***********************************************************************/ -@@ -151,40 +152,41 @@ class TYPBLK : public VALBLK { - // Implementation - virtual bool Init(PGLOBAL g, bool check); - virtual int GetVlen(void) {return sizeof(TYPE);} -- virtual char GetTinyValue(int n) {return (char)Typp[n];} -- virtual uchar GetUTinyValue(int n) {return (uchar)Typp[n];} -- virtual short GetShortValue(int n) {return (short)Typp[n];} -- virtual ushort GetUShortValue(int n) {return (ushort)Typp[n];} -- virtual int GetIntValue(int n) {return (int)Typp[n];} -- virtual uint GetUIntValue(int n) {return (uint)Typp[n];} -- virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];} -- virtual ulonglong GetUBigintValue(int n) {return (ulonglong)Typp[n];} -- virtual double GetFloatValue(int n) {return (double)Typp[n];} -+ -+ virtual char GetTinyValue(int n) {return (char)UnalignedRead(n);} -+ virtual uchar GetUTinyValue(int n) {return (uchar)UnalignedRead(n);} -+ virtual short GetShortValue(int n) {return (short)UnalignedRead(n);} -+ virtual ushort GetUShortValue(int n) {return (ushort)UnalignedRead(n);} -+ virtual int GetIntValue(int n) {return (int)UnalignedRead(n);} -+ virtual uint GetUIntValue(int n) {return (uint)UnalignedRead(n);} -+ virtual longlong GetBigintValue(int n) {return (longlong)UnalignedRead(n);} -+ virtual ulonglong GetUBigintValue(int n) {return (ulonglong)UnalignedRead(n);} -+ virtual double GetFloatValue(int n) {return (double)UnalignedRead(n);} - virtual char *GetCharString(char *p, int n); -- virtual void Reset(int n) {Typp[n] = 0;} -+ virtual void Reset(int n) {UnalignedWrite(n, 0);} - - // Methods - using VALBLK::SetValue; - virtual void SetValue(PCSZ sp, int n); - virtual void SetValue(const char *sp, uint len, int n); - virtual void SetValue(short sval, int n) -- {Typp[n] = (TYPE)sval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);} - virtual void SetValue(ushort sval, int n) -- {Typp[n] = (TYPE)sval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);} - virtual void SetValue(int lval, int n) -- {Typp[n] = (TYPE)lval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);} - virtual void SetValue(uint lval, int n) -- {Typp[n] = (TYPE)lval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);} - virtual void SetValue(longlong lval, int n) -- {Typp[n] = (TYPE)lval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);} - virtual void SetValue(ulonglong lval, int n) -- {Typp[n] = (TYPE)lval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);} - virtual void SetValue(double fval, int n) -- {Typp[n] = (TYPE)fval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)fval); SetNull(n, false);} - virtual void SetValue(char cval, int n) -- {Typp[n] = (TYPE)cval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);} - virtual void SetValue(uchar cval, int n) -- {Typp[n] = (TYPE)cval; SetNull(n, false);} -+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);} - virtual void SetValue(PVAL valp, int n); - virtual void SetValue(PVBLK pv, int n1, int n2); - virtual void SetMin(PVAL valp, int n); -@@ -206,6 +208,17 @@ class TYPBLK : public VALBLK { - // Members - TYPE* const &Typp; - const char *Fmt; -+ -+ // Unaligned access -+ TYPE UnalignedRead(int n) const { -+ TYPE result; -+ memcpy(&result, Typp + n, sizeof(TYPE)); -+ return result; -+ } -+ -+ void UnalignedWrite(int n, TYPE value) { -+ memcpy(Typp + n, &value, sizeof(TYPE)); -+ } - }; // end of class TYPBLK - - /***********************************************************************/ -- 2.30.2