Accepting request 788672 from home:darix:branches:network:utilities
- apply patch from https://github.com/memcached/memcached/pull/635 to fix crashes we saw during the testsuite - disable extstore on s390 for now as there are known bugs on that platform - limit tls support to 15 and above - disable lto until the 2 settings structs are resolved - update to version 1.6.2 (boo# 1167522) CVE-2020-10931 https://github.com/memcached/memcached/wiki/ReleaseNotes162 https://github.com/memcached/memcached/wiki/ReleaseNotes161 https://github.com/memcached/memcached/wiki/ReleaseNotes160 https://github.com/memcached/memcached/wiki/ReleaseNotes1522 https://github.com/memcached/memcached/wiki/ReleaseNotes1521 https://github.com/memcached/memcached/wiki/ReleaseNotes1520 https://github.com/memcached/memcached/wiki/ReleaseNotes1519 https://github.com/memcached/memcached/wiki/ReleaseNotes1518 - dropped all patches after reviewing with upstream: memcached-1.4.5.dif memcached-autofoo.patch memcached-use-endian_h.patch - enable TLS support (new BR: openssl-devel perl-IO-Socket-SSL perl-Net-SSLeay) OBS-URL: https://build.opensuse.org/request/show/788672 OBS-URL: https://build.opensuse.org/package/show/network:utilities/memcached?expand=0&rev=69
This commit is contained in:
parent
50257dc122
commit
647b1df213
120
635.patch
Normal file
120
635.patch
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
From 5174ef33576f461d43f43b2019f5e10655b4c78f Mon Sep 17 00:00:00 2001
|
||||||
|
From: dormando <dormando@rydia.net>
|
||||||
|
Date: Wed, 25 Mar 2020 14:02:11 -0700
|
||||||
|
Subject: [PATCH] restart: fix rare segfault on shutdown
|
||||||
|
|
||||||
|
Client connections were being closed and cleaned up after worker
|
||||||
|
threads exit. In 2018 a patch went in to have the worker threads
|
||||||
|
actually free their event base when stopped. If your system is strict
|
||||||
|
enough (which is apparently none out of the dozen+ systems we've tested
|
||||||
|
against!) it will segfault on invalid memory.
|
||||||
|
|
||||||
|
This change leaves the workers hung while they wait for connections to
|
||||||
|
be centrally closed. I would prefer to have each worker thread close
|
||||||
|
its own connections for speed if nothing else, but we still need to
|
||||||
|
close the listener connections and any connections currently open in
|
||||||
|
side channels.
|
||||||
|
|
||||||
|
Much apprecation to darix for helping narrow this down, as it presented
|
||||||
|
as a wiped stack that only appeared in a specific build environment on
|
||||||
|
a specific linux distribution.
|
||||||
|
|
||||||
|
Hopefully with all of the valgrind noise fixes lately we can start
|
||||||
|
running it more regularly and spot these early.
|
||||||
|
---
|
||||||
|
memcached.c | 19 ++++++++++++-------
|
||||||
|
memcached.h | 3 +--
|
||||||
|
thread.c | 14 ++++++++++++++
|
||||||
|
3 files changed, 27 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/memcached.c b/memcached.c
|
||||||
|
index 2592b3f94..dd52dd04c 100644
|
||||||
|
--- a/memcached.c
|
||||||
|
+++ b/memcached.c
|
||||||
|
@@ -939,6 +939,18 @@ static void conn_close(conn *c) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// Since some connections might be off on side threads and some are managed as
|
||||||
|
+// listeners we need to walk through them all from a central point.
|
||||||
|
+// Must be called with all worker threads hung or in the process of closing.
|
||||||
|
+void conn_close_all(void) {
|
||||||
|
+ int i;
|
||||||
|
+ for (i = 0; i < max_fds; i++) {
|
||||||
|
+ if (conns[i] && conns[i]->state != conn_closed) {
|
||||||
|
+ conn_close(conns[i]);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Convert a state name to a human readable form.
|
||||||
|
*/
|
||||||
|
@@ -10126,13 +10138,6 @@ int main (int argc, char **argv) {
|
||||||
|
|
||||||
|
fprintf(stderr, "Gracefully stopping\n");
|
||||||
|
stop_threads();
|
||||||
|
- int i;
|
||||||
|
- // FIXME: make a function callable from threads.c
|
||||||
|
- for (i = 0; i < max_fds; i++) {
|
||||||
|
- if (conns[i] && conns[i]->state != conn_closed) {
|
||||||
|
- conn_close(conns[i]);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
if (memory_file != NULL) {
|
||||||
|
restart_mmap_close();
|
||||||
|
}
|
||||||
|
diff --git a/memcached.h b/memcached.h
|
||||||
|
index a3ddd88c1..bdc38bd9c 100644
|
||||||
|
--- a/memcached.h
|
||||||
|
+++ b/memcached.h
|
||||||
|
@@ -820,9 +820,8 @@ enum delta_result_type add_delta(conn *c, const char *key,
|
||||||
|
const int64_t delta, char *buf,
|
||||||
|
uint64_t *cas);
|
||||||
|
void accept_new_conns(const bool do_accept);
|
||||||
|
-conn *conn_from_freelist(void);
|
||||||
|
-bool conn_add_to_freelist(conn *c);
|
||||||
|
void conn_close_idle(conn *c);
|
||||||
|
+void conn_close_all(void);
|
||||||
|
item *item_alloc(char *key, size_t nkey, int flags, rel_time_t exptime, int nbytes);
|
||||||
|
#define DO_UPDATE true
|
||||||
|
#define DONT_UPDATE false
|
||||||
|
diff --git a/thread.c b/thread.c
|
||||||
|
index ed9765a48..e7f96dcba 100644
|
||||||
|
--- a/thread.c
|
||||||
|
+++ b/thread.c
|
||||||
|
@@ -204,6 +204,7 @@ void stop_threads(void) {
|
||||||
|
if (settings.verbose > 0)
|
||||||
|
fprintf(stderr, "asking workers to stop\n");
|
||||||
|
buf[0] = 's';
|
||||||
|
+ pthread_mutex_lock(&worker_hang_lock);
|
||||||
|
pthread_mutex_lock(&init_lock);
|
||||||
|
init_count = 0;
|
||||||
|
for (i = 0; i < settings.num_threads; i++) {
|
||||||
|
@@ -215,6 +216,8 @@ void stop_threads(void) {
|
||||||
|
wait_for_thread_registration(settings.num_threads);
|
||||||
|
pthread_mutex_unlock(&init_lock);
|
||||||
|
|
||||||
|
+ // All of the workers are hung but haven't done cleanup yet.
|
||||||
|
+
|
||||||
|
if (settings.verbose > 0)
|
||||||
|
fprintf(stderr, "asking background threads to stop\n");
|
||||||
|
|
||||||
|
@@ -236,6 +239,17 @@ void stop_threads(void) {
|
||||||
|
if (settings.verbose > 0)
|
||||||
|
fprintf(stderr, "stopped idle timeout thread\n");
|
||||||
|
|
||||||
|
+ // Close all connections then let the workers finally exit.
|
||||||
|
+ if (settings.verbose > 0)
|
||||||
|
+ fprintf(stderr, "closing connections\n");
|
||||||
|
+ conn_close_all();
|
||||||
|
+ pthread_mutex_unlock(&worker_hang_lock);
|
||||||
|
+ if (settings.verbose > 0)
|
||||||
|
+ fprintf(stderr, "reaping worker threads\n");
|
||||||
|
+ for (i = 0; i < settings.num_threads; i++) {
|
||||||
|
+ pthread_join(threads[i].thread_id, NULL);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (settings.verbose > 0)
|
||||||
|
fprintf(stderr, "all background threads stopped\n");
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
Index: memcached.c
|
|
||||||
===================================================================
|
|
||||||
--- memcached.c.orig
|
|
||||||
+++ memcached.c
|
|
||||||
@@ -2807,15 +2807,19 @@ void append_stat(const char *name, ADD_S
|
|
||||||
inline static void process_stats_detail(conn *c, const char *command) {
|
|
||||||
assert(c != NULL);
|
|
||||||
|
|
||||||
- if (strcmp(command, "on") == 0) {
|
|
||||||
+ char on[] = "on";
|
|
||||||
+ char off[] = "off";
|
|
||||||
+ char dump[] = "dump";
|
|
||||||
+
|
|
||||||
+ if (strcmp(command, on) == 0) {
|
|
||||||
settings.detail_enabled = 1;
|
|
||||||
out_string(c, "OK");
|
|
||||||
}
|
|
||||||
- else if (strcmp(command, "off") == 0) {
|
|
||||||
+ else if (strcmp(command, off) == 0) {
|
|
||||||
settings.detail_enabled = 0;
|
|
||||||
out_string(c, "OK");
|
|
||||||
}
|
|
||||||
- else if (strcmp(command, "dump") == 0) {
|
|
||||||
+ else if (strcmp(command, dump) == 0) {
|
|
||||||
int len;
|
|
||||||
char *stats = stats_prefix_dump(&len);
|
|
||||||
write_and_free(c, stats, len);
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ac7c5af6e8b1acf5d5c644d162e046d8acf9302174af9f24c3f18e5481ce3a0d
|
|
||||||
size 490891
|
|
3
memcached-1.6.2.tar.gz
Normal file
3
memcached-1.6.2.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:06720118c40689be0b85249b3dcb23c6e6d5e3ce53893aca9faced264145168b
|
||||||
|
size 536527
|
@ -1,321 +0,0 @@
|
|||||||
Index: memcached-1.5.17/configure.ac
|
|
||||||
===================================================================
|
|
||||||
--- memcached-1.5.17.orig/configure.ac 2019-07-16 00:34:51.000000000 +0200
|
|
||||||
+++ memcached-1.5.17/configure.ac 2019-09-03 11:47:53.521535332 +0200
|
|
||||||
@@ -4,10 +4,13 @@ m4_include([m4/c99-backport.m4])
|
|
||||||
AC_INIT([memcached], [VERSION_NUMBER], [memcached@googlegroups.com])
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
AC_CONFIG_SRCDIR([memcached.c])
|
|
||||||
-AM_INIT_AUTOMAKE([foreign])
|
|
||||||
+AM_INIT_AUTOMAKE([foreign -Wall -Wno-portability tar-pax subdir-objects])
|
|
||||||
AM_CONFIG_HEADER([config.h])
|
|
||||||
|
|
||||||
AC_PROG_CC
|
|
||||||
+AC_PROG_CC_STDC
|
|
||||||
+AC_USE_SYSTEM_EXTENSIONS
|
|
||||||
+AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl DETECT_ICC ([ACTION-IF-YES], [ACTION-IF-NO])
|
|
||||||
@@ -113,14 +116,11 @@ AC_DEFUN([AC_C_DETECT_SASL_CB_GETCONF],
|
|
||||||
[
|
|
||||||
AC_CACHE_CHECK([for SASL_CB_GETCONF],
|
|
||||||
[ac_cv_c_sasl_cb_getconf],
|
|
||||||
- [AC_TRY_COMPILE(
|
|
||||||
- [
|
|
||||||
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <sasl/sasl.h>
|
|
||||||
- ], [
|
|
||||||
+ ]], [[
|
|
||||||
unsigned long val = SASL_CB_GETCONF;
|
|
||||||
- ],
|
|
||||||
- [ ac_cv_c_sasl_cb_getconf=yes ],
|
|
||||||
- [ ac_cv_c_sasl_cb_getconf=no ])
|
|
||||||
+ ]])],[ ac_cv_c_sasl_cb_getconf=yes ],[ ac_cv_c_sasl_cb_getconf=no ])
|
|
||||||
])
|
|
||||||
AS_IF([test "$ac_cv_c_sasl_cb_getconf" = "yes"],
|
|
||||||
[AC_DEFINE([HAVE_SASL_CB_GETCONF], 1,
|
|
||||||
@@ -251,23 +251,6 @@ fi
|
|
||||||
AC_SUBST(PROFILER_FLAGS)
|
|
||||||
|
|
||||||
|
|
||||||
-AC_ARG_ENABLE(64bit,
|
|
||||||
- [AS_HELP_STRING([--enable-64bit],[build 64bit version])])
|
|
||||||
-if test "x$enable_64bit" = "xyes"
|
|
||||||
-then
|
|
||||||
- org_cflags=$CFLAGS
|
|
||||||
- CFLAGS=-m64
|
|
||||||
- AC_RUN_IFELSE(
|
|
||||||
- [AC_LANG_PROGRAM([], [dnl
|
|
||||||
-return sizeof(void*) == 8 ? 0 : 1;
|
|
||||||
- ])
|
|
||||||
- ],[
|
|
||||||
- CFLAGS="-m64 $org_cflags"
|
|
||||||
- ],[
|
|
||||||
- AC_MSG_ERROR([Don't know how to build a 64-bit object.])
|
|
||||||
- ])
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
# Issue 213: Search for clock_gettime to help people linking
|
|
||||||
# with a static version of libevent
|
|
||||||
AC_SEARCH_LIBS(clock_gettime, rt)
|
|
||||||
@@ -276,91 +259,7 @@ AC_SEARCH_LIBS(clock_gettime, rt)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
|
|
||||||
-trylibeventdir=""
|
|
||||||
-AC_ARG_WITH(libevent,
|
|
||||||
- [ --with-libevent=PATH Specify path to libevent installation ],
|
|
||||||
- [
|
|
||||||
- if test "x$withval" != "xno" ; then
|
|
||||||
- trylibeventdir=$withval
|
|
||||||
- fi
|
|
||||||
- ]
|
|
||||||
-)
|
|
||||||
-
|
|
||||||
-dnl ------------------------------------------------------
|
|
||||||
-dnl libevent detection. swiped from Tor. modified a bit.
|
|
||||||
-
|
|
||||||
-LIBEVENT_URL=https://www.monkey.org/~provos/libevent/
|
|
||||||
-
|
|
||||||
-AC_CACHE_CHECK([for libevent directory], ac_cv_libevent_dir, [
|
|
||||||
- saved_LIBS="$LIBS"
|
|
||||||
- saved_LDFLAGS="$LDFLAGS"
|
|
||||||
- saved_CPPFLAGS="$CPPFLAGS"
|
|
||||||
- le_found=no
|
|
||||||
- for ledir in $trylibeventdir "" $prefix /usr/local ; do
|
|
||||||
- LDFLAGS="$saved_LDFLAGS"
|
|
||||||
- LIBS="-levent $saved_LIBS"
|
|
||||||
-
|
|
||||||
- # Skip the directory if it isn't there.
|
|
||||||
- if test ! -z "$ledir" -a ! -d "$ledir" ; then
|
|
||||||
- continue;
|
|
||||||
- fi
|
|
||||||
- if test ! -z "$ledir" ; then
|
|
||||||
- if test -d "$ledir/lib" ; then
|
|
||||||
- LDFLAGS="-L$ledir/lib $LDFLAGS"
|
|
||||||
- else
|
|
||||||
- LDFLAGS="-L$ledir $LDFLAGS"
|
|
||||||
- fi
|
|
||||||
- if test -d "$ledir/include" ; then
|
|
||||||
- CPPFLAGS="-I$ledir/include $CPPFLAGS"
|
|
||||||
- else
|
|
||||||
- CPPFLAGS="-I$ledir $CPPFLAGS"
|
|
||||||
- fi
|
|
||||||
- fi
|
|
||||||
- # Can I compile and link it?
|
|
||||||
- AC_TRY_LINK([#include <sys/time.h>
|
|
||||||
-#include <sys/types.h>
|
|
||||||
-#include <event.h>], [ event_init(); ],
|
|
||||||
- [ libevent_linked=yes ], [ libevent_linked=no ])
|
|
||||||
- if test $libevent_linked = yes; then
|
|
||||||
- if test ! -z "$ledir" ; then
|
|
||||||
- ac_cv_libevent_dir=$ledir
|
|
||||||
- _myos=`echo $target_os | cut -f 1 -d .`
|
|
||||||
- AS_IF(test "$SUNCC" = "yes" -o "x$_myos" = "xsolaris2",
|
|
||||||
- [saved_LDFLAGS="$saved_LDFLAGS -Wl,-R$ledir/lib"],
|
|
||||||
- [AS_IF(test "$GCC" = "yes",
|
|
||||||
- [saved_LDFLAGS="$saved_LDFLAGS -Wl,-rpath,$ledir/lib"])])
|
|
||||||
- else
|
|
||||||
- ac_cv_libevent_dir="(system)"
|
|
||||||
- fi
|
|
||||||
- le_found=yes
|
|
||||||
- break
|
|
||||||
- fi
|
|
||||||
- done
|
|
||||||
- LIBS="$saved_LIBS"
|
|
||||||
- LDFLAGS="$saved_LDFLAGS"
|
|
||||||
- CPPFLAGS="$saved_CPPFLAGS"
|
|
||||||
- if test $le_found = no ; then
|
|
||||||
- AC_MSG_ERROR([libevent is required. You can get it from $LIBEVENT_URL
|
|
||||||
-
|
|
||||||
- If it's already installed, specify its path using --with-libevent=/dir/
|
|
||||||
-])
|
|
||||||
- fi
|
|
||||||
-])
|
|
||||||
-LIBS="-levent $LIBS"
|
|
||||||
-if test $ac_cv_libevent_dir != "(system)"; then
|
|
||||||
- if test -d "$ac_cv_libevent_dir/lib" ; then
|
|
||||||
- LDFLAGS="-L$ac_cv_libevent_dir/lib $LDFLAGS"
|
|
||||||
- le_libdir="$ac_cv_libevent_dir/lib"
|
|
||||||
- else
|
|
||||||
- LDFLAGS="-L$ac_cv_libevent_dir $LDFLAGS"
|
|
||||||
- le_libdir="$ac_cv_libevent_dir"
|
|
||||||
- fi
|
|
||||||
- if test -d "$ac_cv_libevent_dir/include" ; then
|
|
||||||
- CPPFLAGS="-I$ac_cv_libevent_dir/include $CPPFLAGS"
|
|
||||||
- else
|
|
||||||
- CPPFLAGS="-I$ac_cv_libevent_dir $CPPFLAGS"
|
|
||||||
- fi
|
|
||||||
-fi
|
|
||||||
+PKG_CHECK_MODULES([LIBEVENT], [libevent])
|
|
||||||
|
|
||||||
trylibssldir=""
|
|
||||||
AC_ARG_WITH(libssl,
|
|
||||||
@@ -478,14 +377,14 @@ dnl ************************************
|
|
||||||
AC_DEFUN([AC_HAVE_SASL_CALLBACK_FT],
|
|
||||||
[AC_CACHE_CHECK(for sasl_callback_ft, ac_cv_has_sasl_callback_ft,
|
|
||||||
[
|
|
||||||
- AC_TRY_COMPILE([
|
|
||||||
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#ifdef HAVE_SASL_SASL_H
|
|
||||||
#include <sasl/sasl.h>
|
|
||||||
#include <sasl/saslplug.h>
|
|
||||||
#endif
|
|
||||||
- ],[
|
|
||||||
+ ]], [[
|
|
||||||
sasl_callback_ft a_callback;
|
|
||||||
- ],[
|
|
||||||
+ ]])],[
|
|
||||||
ac_cv_has_sasl_callback_ft=yes
|
|
||||||
],[
|
|
||||||
ac_cv_has_sasl_callback_ft=no
|
|
||||||
@@ -507,18 +406,15 @@ AC_DEFUN([AC_C_DETECT_UINT64_SUPPORT],
|
|
||||||
[
|
|
||||||
AC_CACHE_CHECK([for print macros for integers (C99 section 7.8.1)],
|
|
||||||
[ac_cv_c_uint64_support],
|
|
||||||
- [AC_TRY_COMPILE(
|
|
||||||
- [
|
|
||||||
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#ifdef HAVE_INTTYPES_H
|
|
||||||
#include <inttypes.h>
|
|
||||||
#endif
|
|
||||||
#include <stdio.h>
|
|
||||||
- ], [
|
|
||||||
+ ]], [[
|
|
||||||
uint64_t val = 0;
|
|
||||||
fprintf(stderr, "%" PRIu64 "\n", val);
|
|
||||||
- ],
|
|
||||||
- [ ac_cv_c_uint64_support=yes ],
|
|
||||||
- [ ac_cv_c_uint64_support=no ])
|
|
||||||
+ ]])],[ ac_cv_c_uint64_support=yes ],[ ac_cv_c_uint64_support=no ])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
@@ -537,12 +433,12 @@ dnl Check if the type socklen_t is defin
|
|
||||||
AC_DEFUN([AC_C_SOCKLEN_T],
|
|
||||||
[AC_CACHE_CHECK(for socklen_t, ac_cv_c_socklen_t,
|
|
||||||
[
|
|
||||||
- AC_TRY_COMPILE([
|
|
||||||
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
- ],[
|
|
||||||
+ ]], [[
|
|
||||||
socklen_t foo;
|
|
||||||
- ],[
|
|
||||||
+ ]])],[
|
|
||||||
ac_cv_c_socklen_t=yes
|
|
||||||
],[
|
|
||||||
ac_cv_c_socklen_t=no
|
|
||||||
@@ -581,35 +477,6 @@ fi
|
|
||||||
|
|
||||||
AC_C_ENDIAN
|
|
||||||
|
|
||||||
-AC_DEFUN([AC_C_HTONLL],
|
|
||||||
-[
|
|
||||||
- AC_MSG_CHECKING([for htonll])
|
|
||||||
- have_htoll="no"
|
|
||||||
- AC_TRY_LINK([
|
|
||||||
-#include <sys/types.h>
|
|
||||||
-#include <netinet/in.h>
|
|
||||||
-#ifdef HAVE_INTTYPES_H
|
|
||||||
-#include <inttypes.h> */
|
|
||||||
-#endif
|
|
||||||
- ], [
|
|
||||||
- return htonll(0);
|
|
||||||
- ], [
|
|
||||||
- have_htoll="yes"
|
|
||||||
- AC_DEFINE([HAVE_HTONLL], [1], [Have ntohll])
|
|
||||||
- ], [
|
|
||||||
- have_htoll="no"
|
|
||||||
- ])
|
|
||||||
-
|
|
||||||
- AC_MSG_RESULT([$have_htoll])
|
|
||||||
-])
|
|
||||||
-
|
|
||||||
-AC_C_HTONLL
|
|
||||||
-
|
|
||||||
-dnl Check whether the user's system supports pthread
|
|
||||||
-AC_SEARCH_LIBS(pthread_create, pthread)
|
|
||||||
-if test "x$ac_cv_search_pthread_create" = "xno"; then
|
|
||||||
- AC_MSG_ERROR([Can't enable threads without the POSIX thread library.])
|
|
||||||
-fi
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS(mlockall)
|
|
||||||
AC_CHECK_FUNCS(getpagesizes)
|
|
||||||
@@ -670,13 +537,13 @@ dnl These were added in 4.1.2, but 32bit
|
|
||||||
dnl lacks testable defines.
|
|
||||||
have_gcc_atomics=no
|
|
||||||
AC_MSG_CHECKING(for GCC atomics)
|
|
||||||
-AC_TRY_LINK([],[
|
|
||||||
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
|
|
||||||
unsigned short a;
|
|
||||||
unsigned short b;
|
|
||||||
b = __sync_add_and_fetch(&a, 1);
|
|
||||||
b = __sync_sub_and_fetch(&a, 2);
|
|
||||||
- ],[have_gcc_atomics=yes
|
|
||||||
- AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])])
|
|
||||||
+ ]])],[have_gcc_atomics=yes
|
|
||||||
+ AC_DEFINE(HAVE_GCC_ATOMICS, 1, [GCC Atomics available])],[])
|
|
||||||
AC_MSG_RESULT($have_gcc_atomics)
|
|
||||||
|
|
||||||
dnl Check for usage of 64bit atomics
|
|
||||||
@@ -758,29 +625,5 @@ AM_CONDITIONAL([BUILD_SPECIFICATIONS],
|
|
||||||
[test "x$enable_docs" != "xno" -a "x$XML2RFC" != "xno" -a "x$XSLTPROC" != "xno"])
|
|
||||||
|
|
||||||
|
|
||||||
-dnl Let the compiler be a bit more picky. Please note that you cannot
|
|
||||||
-dnl specify these flags to the compiler before AC_CHECK_FUNCS, because
|
|
||||||
-dnl the test program will generate a compilation warning and hence fail
|
|
||||||
-dnl to detect the function ;-)
|
|
||||||
-if test "$ICC" = "yes"
|
|
||||||
-then
|
|
||||||
- dnl ICC trying to be gcc.
|
|
||||||
- CFLAGS="$CFLAGS -diag-disable 187 -Wall -Werror"
|
|
||||||
- AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
|
|
||||||
-elif test "$GCC" = "yes"
|
|
||||||
-then
|
|
||||||
- GCC_VERSION=`$CC -dumpversion`
|
|
||||||
- CFLAGS="$CFLAGS -Wall -Werror -pedantic -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls"
|
|
||||||
- case $GCC_VERSION in
|
|
||||||
- 4.4.*)
|
|
||||||
- CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
||||||
- ;;
|
|
||||||
- esac
|
|
||||||
- AC_DEFINE([_GNU_SOURCE],[1],[find sigignore on Linux])
|
|
||||||
-elif test "$SUNCC" = "yes"
|
|
||||||
-then
|
|
||||||
- CFLAGS="$CFLAGS -errfmt=error -errwarn -errshort=tags"
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
AC_CONFIG_FILES(Makefile doc/Makefile)
|
|
||||||
AC_OUTPUT
|
|
||||||
Index: memcached-1.5.17/Makefile.am
|
|
||||||
===================================================================
|
|
||||||
--- memcached-1.5.17.orig/Makefile.am 2019-08-28 00:17:56.000000000 +0200
|
|
||||||
+++ memcached-1.5.17/Makefile.am 2019-09-03 11:45:07.724581146 +0200
|
|
||||||
@@ -1,3 +1,6 @@
|
|
||||||
+AM_CFLAGS = -pthread -Wall -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
|
|
||||||
+AM_CPPFLAGS = -include $(top_builddir)/config.h
|
|
||||||
+
|
|
||||||
bin_PROGRAMS = memcached
|
|
||||||
pkginclude_HEADERS = protocol_binary.h
|
|
||||||
noinst_PROGRAMS = memcached-debug sizes testapp timedrun
|
|
||||||
@@ -63,11 +66,12 @@ memcached_SOURCES += tls.c tls.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
memcached_debug_SOURCES = $(memcached_SOURCES)
|
|
||||||
-memcached_CPPFLAGS = -DNDEBUG
|
|
||||||
-memcached_debug_LDADD = @PROFILER_LDFLAGS@
|
|
||||||
-memcached_debug_CFLAGS = @PROFILER_FLAGS@
|
|
||||||
+memcached_CPPFLAGS = $(AM_CPPFLAGS) -DNDEBUG
|
|
||||||
+memcached_debug_LDADD = @PROFILER_LDFLAGS@ $(LIBEVENT_LIBS)
|
|
||||||
+memcached_debug_CFLAGS = @PROFILER_FLAGS@ $(AM_CFLAGS)
|
|
||||||
+memcached_debug_CPPFLAGS = $(AM_CPPFLAGS)
|
|
||||||
|
|
||||||
-memcached_LDADD =
|
|
||||||
+memcached_LDADD = $(LIBEVENT_LIBS)
|
|
||||||
memcached_DEPENDENCIES =
|
|
||||||
memcached_debug_DEPENDENCIES =
|
|
||||||
CLEANFILES=
|
|
@ -1,61 +0,0 @@
|
|||||||
Index: util.c
|
|
||||||
===================================================================
|
|
||||||
--- util.c.orig
|
|
||||||
+++ util.c
|
|
||||||
@@ -167,30 +167,3 @@ void vperror(const char *fmt, ...) {
|
|
||||||
perror(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#ifndef HAVE_HTONLL
|
|
||||||
-static uint64_t mc_swap64(uint64_t in) {
|
|
||||||
-#ifdef ENDIAN_LITTLE
|
|
||||||
- /* Little endian, flip the bytes around until someone makes a faster/better
|
|
||||||
- * way to do this. */
|
|
||||||
- int64_t rv = 0;
|
|
||||||
- int i = 0;
|
|
||||||
- for(i = 0; i<8; i++) {
|
|
||||||
- rv = (rv << 8) | (in & 0xff);
|
|
||||||
- in >>= 8;
|
|
||||||
- }
|
|
||||||
- return rv;
|
|
||||||
-#else
|
|
||||||
- /* big-endian machines don't need byte swapping */
|
|
||||||
- return in;
|
|
||||||
-#endif
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-uint64_t ntohll(uint64_t val) {
|
|
||||||
- return mc_swap64(val);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-uint64_t htonll(uint64_t val) {
|
|
||||||
- return mc_swap64(val);
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
Index: util.h
|
|
||||||
===================================================================
|
|
||||||
--- util.h.orig
|
|
||||||
+++ util.h
|
|
||||||
@@ -11,16 +11,17 @@ bool uriencode(const char *src, char *ds
|
|
||||||
*
|
|
||||||
* returns true if conversion succeeded.
|
|
||||||
*/
|
|
||||||
+
|
|
||||||
+#include <endian.h>
|
|
||||||
+
|
|
||||||
bool safe_strtoull(const char *str, uint64_t *out);
|
|
||||||
bool safe_strtoll(const char *str, int64_t *out);
|
|
||||||
bool safe_strtoul(const char *str, uint32_t *out);
|
|
||||||
bool safe_strtol(const char *str, int32_t *out);
|
|
||||||
bool safe_strtod(const char *str, double *out);
|
|
||||||
|
|
||||||
-#ifndef HAVE_HTONLL
|
|
||||||
-extern uint64_t htonll(uint64_t);
|
|
||||||
-extern uint64_t ntohll(uint64_t);
|
|
||||||
-#endif
|
|
||||||
+#define htonll(x) htobe64(x)
|
|
||||||
+#define ntohll(x) be64toh(x)
|
|
||||||
|
|
||||||
#ifdef __GCC
|
|
||||||
# define __gcc_attribute__ __attribute__
|
|
@ -1,3 +1,40 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 26 01:22:59 UTC 2020 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- apply patch from https://github.com/memcached/memcached/pull/635
|
||||||
|
to fix crashes we saw during the testsuite
|
||||||
|
- disable extstore on s390 for now as there are known bugs on that
|
||||||
|
platform
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 24 21:27:33 UTC 2020 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- limit tls support to 15 and above
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 24 21:20:51 UTC 2020 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- disable lto until the 2 settings structs are resolved
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 24 20:54:55 UTC 2020 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- update to version 1.6.2 (boo# 1167522) CVE-2020-10931
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes162
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes161
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes160
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes1522
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes1521
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes1520
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes1519
|
||||||
|
https://github.com/memcached/memcached/wiki/ReleaseNotes1518
|
||||||
|
- dropped all patches after reviewing with upstream:
|
||||||
|
memcached-1.4.5.dif
|
||||||
|
memcached-autofoo.patch
|
||||||
|
memcached-use-endian_h.patch
|
||||||
|
- enable TLS support (new BR: openssl-devel perl-IO-Socket-SSL
|
||||||
|
perl-Net-SSLeay)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Sep 3 09:53:22 UTC 2019 - pgajdos@suse.com
|
Tue Sep 3 09:53:22 UTC 2019 - pgajdos@suse.com
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package memcached
|
# spec file for package memcached
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2020 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -20,8 +20,15 @@
|
|||||||
%if ! %{defined _fillupdir}
|
%if ! %{defined _fillupdir}
|
||||||
%define _fillupdir %{_localstatedir}/adm/fillup-templates
|
%define _fillupdir %{_localstatedir}/adm/fillup-templates
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?suse_version} > 1500
|
||||||
|
%bcond_without tls
|
||||||
|
%else
|
||||||
|
%bcond_with tls
|
||||||
|
%endif
|
||||||
|
|
||||||
Name: memcached
|
Name: memcached
|
||||||
Version: 1.5.17
|
Version: 1.6.2
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A high-performance, distributed memory object caching system
|
Summary: A high-performance, distributed memory object caching system
|
||||||
License: BSD-3-Clause
|
License: BSD-3-Clause
|
||||||
@ -32,14 +39,17 @@ Source1: %{name}.init
|
|||||||
Source2: %{name}.sysconfig
|
Source2: %{name}.sysconfig
|
||||||
Source3: memcached-rpmlintrc
|
Source3: memcached-rpmlintrc
|
||||||
Source4: memcached.service
|
Source4: memcached.service
|
||||||
Patch0: memcached-1.4.5.dif
|
Patch: https://patch-diff.githubusercontent.com/raw/memcached/memcached/pull/635.patch
|
||||||
Patch1: memcached-autofoo.patch
|
|
||||||
Patch2: memcached-use-endian_h.patch
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: cyrus-sasl-devel
|
BuildRequires: cyrus-sasl-devel
|
||||||
BuildRequires: libevent-devel
|
BuildRequires: libevent-devel
|
||||||
BuildRequires: libtool
|
BuildRequires: libtool
|
||||||
|
%if %{with tls}
|
||||||
|
BuildRequires: openssl-devel >= 1.1.0
|
||||||
|
BuildRequires: perl-IO-Socket-SSL
|
||||||
|
BuildRequires: perl-Net-SSLeay
|
||||||
|
%endif
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
Requires(pre): %fillup_prereq
|
Requires(pre): %fillup_prereq
|
||||||
Requires(pre): %{_sbindir}/groupadd
|
Requires(pre): %{_sbindir}/groupadd
|
||||||
@ -79,20 +89,22 @@ This package contains development files
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0
|
%patch -p1
|
||||||
%patch1 -p1
|
|
||||||
%patch2
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -fi
|
%define _lto_cflags %{nil}
|
||||||
%if 0%{?suse_version} <= 1140
|
|
||||||
export LIBEVENT_CFLAGS="-I%{_includedir}"
|
|
||||||
export LIBEVENT_LIBS="-levent"
|
|
||||||
%endif
|
|
||||||
%configure \
|
%configure \
|
||||||
--enable-sasl \
|
%if %{with tls}
|
||||||
--disable-coverage \
|
--enable-tls \
|
||||||
--bindir=%{_sbindir}
|
%endif
|
||||||
|
--enable-sasl \
|
||||||
|
--enable-sasl-pwdb \
|
||||||
|
--enable-seccomp \
|
||||||
|
--disable-coverage \
|
||||||
|
%ifarch s390 s390x
|
||||||
|
--disable-extstore \
|
||||||
|
%endif
|
||||||
|
--bindir=%{_sbindir}
|
||||||
|
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user