parent
78e9de9cd2
commit
3a15751af7
109
samba-4.1.2-fix_strict_aliasing.patch
Normal file
109
samba-4.1.2-fix_strict_aliasing.patch
Normal file
@ -0,0 +1,109 @@
|
||||
From d31a18bcaaa3f3dd5f0bf8db705089c42c7ab0b3 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schneider <asn@samba.org>
|
||||
Date: Thu, 14 Nov 2013 18:36:41 +0100
|
||||
Subject: [PATCH] util: Remove 32bit macros breaking strict aliasing.
|
||||
|
||||
BUG: https://bugzilla.samba.org/show_bug.cgi?id=10269
|
||||
|
||||
These macros might have worked but they break strict aliasing in the
|
||||
meantime and so the compiler is not able to optimize the relevant code.
|
||||
|
||||
Signed-off-by: Andreas Schneider <asn@samba.org>
|
||||
Reviewed-by: Volker Lendecke <vl@samba.org>
|
||||
|
||||
Autobuild-User(master): Volker Lendecke <vl@samba.org>
|
||||
Autobuild-Date(master): Thu Nov 14 23:16:45 CET 2013 on sn-devel-104
|
||||
|
||||
(cherry picked from commit af69cb2a78810e608ccff115b433801a58a749e4)
|
||||
Signed-off-by: Andreas Schneider <asn@samba.org>
|
||||
---
|
||||
lib/util/byteorder.h | 52 ++--------------------------------------------------
|
||||
1 file changed, 2 insertions(+), 50 deletions(-)
|
||||
|
||||
diff --git a/lib/util/byteorder.h b/lib/util/byteorder.h
|
||||
index 6bcf71e..58cd68a 100644
|
||||
--- a/lib/util/byteorder.h
|
||||
+++ b/lib/util/byteorder.h
|
||||
@@ -35,15 +35,6 @@ Here is a description of this file that I emailed to the samba list once:
|
||||
|
||||
sure.
|
||||
|
||||
-The distinction between 386 and other architectures is only there as
|
||||
-an optimisation. You can take it out completely and it will make no
|
||||
-difference. The routines (macros) in byteorder.h are totally byteorder
|
||||
-independent. The 386 optimsation just takes advantage of the fact that
|
||||
-the x86 processors don't care about alignment, so we don't have to
|
||||
-align ints on int boundaries etc. If there are other processors out
|
||||
-there that aren't alignment sensitive then you could also define
|
||||
-CAREFUL_ALIGNMENT=0 on those processors as well.
|
||||
-
|
||||
Ok, now to the macros themselves. I'll take a simple example, say we
|
||||
want to extract a 2 byte integer from a SMB packet and put it into a
|
||||
type called uint16_t that is in the local machines byte order, and you
|
||||
@@ -130,20 +121,6 @@ static __inline__ void st_le32(uint32_t *addr, const uint32_t val)
|
||||
#define HAVE_ASM_BYTEORDER 0
|
||||
#endif
|
||||
|
||||
-
|
||||
-
|
||||
-#undef CAREFUL_ALIGNMENT
|
||||
-
|
||||
-/* we know that the 386 can handle misalignment and has the "right"
|
||||
- byteorder */
|
||||
-#if defined(__i386__)
|
||||
-#define CAREFUL_ALIGNMENT 0
|
||||
-#endif
|
||||
-
|
||||
-#ifndef CAREFUL_ALIGNMENT
|
||||
-#define CAREFUL_ALIGNMENT 1
|
||||
-#endif
|
||||
-
|
||||
#define CVAL(buf,pos) ((unsigned int)(((const uint8_t *)(buf))[pos]))
|
||||
#define CVAL_NC(buf,pos) (((uint8_t *)(buf))[pos]) /* Non-const version of CVAL */
|
||||
#define PVAL(buf,pos) (CVAL(buf,pos))
|
||||
@@ -161,7 +138,7 @@ static __inline__ void st_le32(uint32_t *addr, const uint32_t val)
|
||||
#define SSVALS(buf,pos,val) SSVAL((buf),(pos),((int16_t)(val)))
|
||||
#define SIVALS(buf,pos,val) SIVAL((buf),(pos),((int32_t)(val)))
|
||||
|
||||
-#elif CAREFUL_ALIGNMENT
|
||||
+#else /* not HAVE_ASM_BYTEORDER */
|
||||
|
||||
#define SVAL(buf,pos) (PVAL(buf,pos)|PVAL(buf,(pos)+1)<<8)
|
||||
#define IVAL(buf,pos) (SVAL(buf,pos)|SVAL(buf,(pos)+2)<<16)
|
||||
@@ -174,32 +151,7 @@ static __inline__ void st_le32(uint32_t *addr, const uint32_t val)
|
||||
#define SSVALS(buf,pos,val) SSVALX((buf),(pos),((int16_t)(val)))
|
||||
#define SIVALS(buf,pos,val) SIVALX((buf),(pos),((int32_t)(val)))
|
||||
|
||||
-#else /* not CAREFUL_ALIGNMENT */
|
||||
-
|
||||
-/* this handles things for architectures like the 386 that can handle
|
||||
- alignment errors */
|
||||
-/*
|
||||
- WARNING: This section is dependent on the length of int16_t and int32_t
|
||||
- being correct
|
||||
-*/
|
||||
-
|
||||
-/* get single value from an SMB buffer */
|
||||
-#define SVAL(buf,pos) (*(const uint16_t *)((const char *)(buf) + (pos)))
|
||||
-#define SVAL_NC(buf,pos) (*(uint16_t *)((void *)((char *)(buf) + (pos)))) /* Non const version of above. */
|
||||
-#define IVAL(buf,pos) (*(const uint32_t *)((const char *)(buf) + (pos)))
|
||||
-#define IVAL_NC(buf,pos) (*(uint32_t *)((void *)((char *)(buf) + (pos)))) /* Non const version of above. */
|
||||
-#define SVALS(buf,pos) (*(const int16_t *)((const char *)(buf) + (pos)))
|
||||
-#define SVALS_NC(buf,pos) (*(int16_t *)((void *)((char *)(buf) + (pos)))) /* Non const version of above. */
|
||||
-#define IVALS(buf,pos) (*(const int32_t *)((const char *)(buf) + (pos)))
|
||||
-#define IVALS_NC(buf,pos) (*(int32_t *)((void *)((char *)(buf) + (pos)))) /* Non const version of above. */
|
||||
-
|
||||
-/* store single value in an SMB buffer */
|
||||
-#define SSVAL(buf,pos,val) SVAL_NC(buf,pos)=((uint16_t)(val))
|
||||
-#define SIVAL(buf,pos,val) IVAL_NC(buf,pos)=((uint32_t)(val))
|
||||
-#define SSVALS(buf,pos,val) SVALS_NC(buf,pos)=((int16_t)(val))
|
||||
-#define SIVALS(buf,pos,val) IVALS_NC(buf,pos)=((int32_t)(val))
|
||||
-
|
||||
-#endif /* not CAREFUL_ALIGNMENT */
|
||||
+#endif /* not HAVE_ASM_BYTEORDER */
|
||||
|
||||
/* 64 bit macros */
|
||||
#define BVAL(p, ofs) (IVAL(p,ofs) | (((uint64_t)IVAL(p,(ofs)+4)) << 32))
|
||||
--
|
||||
1.8.4
|
||||
|
10
samba.spec
10
samba.spec
@ -1,7 +1,7 @@
|
||||
# Set --with testsuite or %bcond_without to run the Samba torture testsuite.
|
||||
%bcond_with testsuite
|
||||
|
||||
%define main_release 1
|
||||
%define main_release 2
|
||||
|
||||
%define samba_version 4.1.1
|
||||
%define talloc_version 2.0.8
|
||||
@ -86,6 +86,8 @@ Source200: README.dc
|
||||
Source201: README.downgrade
|
||||
|
||||
Patch0: samba-4.1.1-Fix-memset-in-ntdb.patch
|
||||
Patch1: samba-4.1.0-upn.patch
|
||||
Patch2: samba-4.1.2-fix_strict_aliasing.patch
|
||||
|
||||
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
|
||||
@ -489,6 +491,8 @@ module necessary to communicate to the Winbind Daemon
|
||||
%setup -q -n samba-%{version}%{pre_release}
|
||||
|
||||
%patch0 -p1 -b .samba-4.1.1-Fix-memset-in-ntdb.patch
|
||||
%patch1 -p1 -b .samba-4.1.0-upn.patch
|
||||
%patch2 -p1 -b .samba-4.1.2-fix_strict_aliasing.patch
|
||||
|
||||
%build
|
||||
%global _talloc_lib ,talloc,pytalloc,pytalloc-util
|
||||
@ -1540,6 +1544,9 @@ rm -rf %{buildroot}
|
||||
%{_mandir}/man8/pam_winbind.8*
|
||||
|
||||
%changelog
|
||||
* Fri Nov 15 2013 - Andreas Schneider <asn@redhat.com> - 4.1.1-2
|
||||
- related: #884169 - Fix strict aliasing warnings.
|
||||
|
||||
* Mon Nov 11 2013 - Andreas Schneider <asn@redhat.com> - 4.1.1-1
|
||||
- resolves: #1024544 - Fix CVE-2013-4475.
|
||||
- Update to Samba 4.1.1.
|
||||
@ -1550,6 +1557,7 @@ rm -rf %{buildroot}
|
||||
* Wed Oct 30 2013 - Andreas Schneider <asn@redhat.com> - 4.1.0-4
|
||||
- related: #884169 - Add direct dependency to samba-libs in the
|
||||
glusterfs package.
|
||||
- resolves: #996567 - Fix userPrincipalName composition.
|
||||
- related: #884169 - Fix memset call with zero length in in ntdb.
|
||||
|
||||
* Fri Oct 18 2013 - Andreas Schneider <asn@redhat.com> - 4.1.0-3
|
||||
|
Loading…
Reference in New Issue
Block a user