openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
May 2017
- 1 participants
- 1843 discussions
Hello community,
here is the log from the commit of package python-virtualenv-clone for openSUSE:Factory checked in at 2017-05-02 08:54:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-virtualenv-clone (Old)
and /work/SRC/openSUSE:Factory/.python-virtualenv-clone.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-virtualenv-clone"
Tue May 2 08:54:38 2017 rev:8 rq:489355 version:0.2.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-virtualenv-clone/python-virtualenv-clone.changes 2016-03-03 15:16:36.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-virtualenv-clone.new/python-virtualenv-clone.changes 2017-05-02 08:54:39.492307660 +0200
@@ -1,0 +2,5 @@
+Wed Apr 19 15:38:16 UTC 2017 - toddrme2178(a)gmail.com
+
+- Implement single-spec version.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-virtualenv-clone.spec ++++++
--- /var/tmp/diff_new_pack.6bFgrr/_old 2017-05-02 08:54:40.152214607 +0200
+++ /var/tmp/diff_new_pack.6bFgrr/_new 2017-05-02 08:54:40.156214043 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-virtualenv-clone
#
-# Copyright (c) 2016 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,6 +16,7 @@
#
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-virtualenv-clone
Version: 0.2.6
Release: 0
@@ -23,18 +24,17 @@
License: MIT
Group: Development/Languages/Python
Url: http://github.com/edwardgeorge/virtualenv-clone
-Source: virtualenv-clone-%{version}.tar.gz
-BuildRequires: python-devel
-BuildRequires: python-setuptools
+Source: https://files.pythonhosted.org/packages/source/v/virtualenv-clone/virtualen…
+BuildRequires: fdupes
+BuildRequires: python-rpm-macros
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
Recommends: python-virtualenv
Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(preun): update-alternatives
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
BuildArch: noarch
-%endif
+%python_subpackages
%description
virtualenv cloning script.
@@ -73,32 +73,25 @@
%setup -q -n virtualenv-clone-%{version}
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
# setup up update-alternatives
-mkdir -p %{buildroot}%{_sysconfdir}/alternatives
-touch %{buildroot}%{_sysconfdir}/alternatives/virtualenv-clone
-mv %{buildroot}%{_bindir}/virtualenv-clone %{buildroot}%{_bindir}/virtualenv-clone-%{py_ver}
-ln -sf %{_sysconfdir}/alternatives/virtualenv-clone %{buildroot}/%{_bindir}/virtualenv-clone
+%python_clone -a %{buildroot}%{_bindir}/virtualenv-clone
%post
-update-alternatives \
- --install %{_bindir}/virtualenv-clone virtualenv-clone %{_bindir}/virtualenv-clone-%{py_ver} 30
+%python_install_alternative virtualenv-clone
-%postun
-if [ $1 -eq 0 ] ; then
- update-alternatives --remove virtualenv-clone %{_bindir}/virtualenv-clone-%{py_ver}
-fi
+%preun
+%python_uninstall_alternative virtualenv-clone
-%files
+%files %{python_files}
%defattr(-,root,root,-)
%doc LICENSE README
-%{_bindir}/virtualenv-clone
-%{_bindir}/virtualenv-clone-%{py_ver}
-%ghost %{_sysconfdir}/alternatives/virtualenv-clone
+%python_alternative %{_bindir}/virtualenv-clone
%{python_sitelib}/*
%changelog
1
0
Hello community,
here is the log from the commit of package python-pkgconfig for openSUSE:Factory checked in at 2017-05-02 08:54:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pkgconfig (Old)
and /work/SRC/openSUSE:Factory/.python-pkgconfig.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pkgconfig"
Tue May 2 08:54:33 2017 rev:2 rq:489348 version:1.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pkgconfig/python-pkgconfig.changes 2015-06-11 08:21:50.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-pkgconfig.new/python-pkgconfig.changes 2017-05-02 08:54:34.880957896 +0200
@@ -1,0 +2,7 @@
+Wed Apr 19 15:33:55 UTC 2017 - toddrme2178(a)gmail.com
+
+- Update to version 1.1.0
+ + No changelog available
+- Implement single-spec version.
+
+-------------------------------------------------------------------
Old:
----
pkgconfig-1.1.0.tar.gz
New:
----
pkgconfig-1.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pkgconfig.spec ++++++
--- /var/tmp/diff_new_pack.F4LB2v/_old 2017-05-02 08:54:35.772832135 +0200
+++ /var/tmp/diff_new_pack.F4LB2v/_new 2017-05-02 08:54:35.776831571 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pkgconfig
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -15,25 +15,29 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
+%bcond_without tests
+
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-pkgconfig
-Version: 1.1.0
+Version: 1.2.2
Release: 0
License: MIT
Summary: Interface Python with pkg-config
Url: http://github.com/matze/pkgconfig
Group: Development/Languages/Python
-Source: https://pypi.python.org/packages/source/p/pkgconfig/pkgconfig-%{version}.ta…
-BuildRequires: python-devel
-BuildRequires: python-setuptools
-# Test requirements (wrongly marked as install req):
-BuildRequires: python-nose
+Source: https://files.pythonhosted.org/packages/source/p/pkgconfig/pkgconfig-%{vers…
+BuildRequires: fdupes
+BuildRequires: python-rpm-macros
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
+%if %{with tests}
+# Test requirements
+BuildRequires: %{python_module nose}
+%endif
Requires: pkg-config
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
BuildArch: noarch
-%endif
+%python_subpackages
%description
A Python module to interface with the pkg-config
@@ -43,15 +47,18 @@
%setup -q -n pkgconfig-%{version}
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
-#%%check
-#python setup.py test
+%if %{with tests}
+%check
+%python_exec setup.py test
+%endif
-%files
+%files %{python_files}
%defattr(-,root,root,-)
%doc LICENSE README.rst
%{python_sitelib}/*
++++++ pkgconfig-1.1.0.tar.gz -> pkgconfig-1.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/MANIFEST.in new/pkgconfig-1.2.2/MANIFEST.in
--- old/pkgconfig-1.1.0/MANIFEST.in 2013-08-12 09:58:13.000000000 +0200
+++ new/pkgconfig-1.2.2/MANIFEST.in 2016-12-02 10:33:36.000000000 +0100
@@ -1,2 +1,4 @@
include LICENSE
include README.rst
+include test.py
+include data/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/PKG-INFO new/pkgconfig-1.2.2/PKG-INFO
--- old/pkgconfig-1.1.0/PKG-INFO 2013-11-06 15:15:45.000000000 +0100
+++ new/pkgconfig-1.2.2/PKG-INFO 2016-12-02 10:35:04.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: pkgconfig
-Version: 1.1.0
+Version: 1.2.2
Summary: Interface Python with pkg-config
Home-page: http://github.com/matze/pkgconfig
Author: Matthias Vogelgesang
@@ -17,6 +17,10 @@
It can be used to
+ - find all pkg-config packages ::
+
+ >>> packages = pkgconfig.list_all()
+
- check if a package exists ::
>>> pkgconfig.exists('glib-2.0')
@@ -39,8 +43,50 @@
>>> d = pkgconfig.parse('glib-2.0 gtk+-2.0')
>>> d['libraries']
- set([u'glib-2.0', u'gtk+-2.0'])
+ [u'gtk+-2.0', u'glib-2.0']
+
+ The ``pkgconfig.parse`` function return a dictonary of list.
+ The lists returned are an accurate representations of the equivalent
+ ``pkg-config`` call, both in content and order.
+
+ If ``pkg-config`` is not on the path, raises ``EnvironmentError``.
The ``pkgconfig`` module is licensed under the MIT license.
+
+ Changelog
+ ---------
+
+ Version 1.2.1 and 1.2.2
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bug fix releases released on December 1st and 2nd 2016.
+
+ - Include the ``data`` folder in the distribution in order to run tests
+ - Improve the tests
+
+
+ Version 1.2.0
+ ~~~~~~~~~~~~~
+
+ Released on November 30th 2016.
+
+ - Potential break: switch from result set to list
+ - Expose --list-all query
+ - Added support for PKG_CONFIG environment variable
+
+
+ Version 1.1.0
+ ~~~~~~~~~~~~~
+
+ Released on November 6th 2013.
+
+ - Multiple packages can now be parsed with a single call to ``.parse``.
+
+
+ Version 1.0.0
+ ~~~~~~~~~~~~~
+
+ First release on September 8th 2013.
+
Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/README.rst new/pkgconfig-1.2.2/README.rst
--- old/pkgconfig-1.1.0/README.rst 2013-11-06 15:13:54.000000000 +0100
+++ new/pkgconfig-1.2.2/README.rst 2016-12-02 10:34:33.000000000 +0100
@@ -9,6 +9,10 @@
It can be used to
+- find all pkg-config packages ::
+
+ >>> packages = pkgconfig.list_all()
+
- check if a package exists ::
>>> pkgconfig.exists('glib-2.0')
@@ -31,6 +35,48 @@
>>> d = pkgconfig.parse('glib-2.0 gtk+-2.0')
>>> d['libraries']
- set([u'glib-2.0', u'gtk+-2.0'])
+ [u'gtk+-2.0', u'glib-2.0']
+
+ The ``pkgconfig.parse`` function return a dictonary of list.
+ The lists returned are an accurate representations of the equivalent
+ ``pkg-config`` call, both in content and order.
+
+If ``pkg-config`` is not on the path, raises ``EnvironmentError``.
The ``pkgconfig`` module is licensed under the MIT license.
+
+
+Changelog
+---------
+
+Version 1.2.1 and 1.2.2
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Bug fix releases released on December 1st and 2nd 2016.
+
+- Include the ``data`` folder in the distribution in order to run tests
+- Improve the tests
+
+
+Version 1.2.0
+~~~~~~~~~~~~~
+
+Released on November 30th 2016.
+
+- Potential break: switch from result set to list
+- Expose --list-all query
+- Added support for PKG_CONFIG environment variable
+
+
+Version 1.1.0
+~~~~~~~~~~~~~
+
+Released on November 6th 2013.
+
+- Multiple packages can now be parsed with a single call to ``.parse``.
+
+
+Version 1.0.0
+~~~~~~~~~~~~~
+
+First release on September 8th 2013.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/data/fake-gtk+-3.0.pc new/pkgconfig-1.2.2/data/fake-gtk+-3.0.pc
--- old/pkgconfig-1.1.0/data/fake-gtk+-3.0.pc 1970-01-01 01:00:00.000000000 +0100
+++ new/pkgconfig-1.2.2/data/fake-gtk+-3.0.pc 2016-12-02 10:33:36.000000000 +0100
@@ -0,0 +1,14 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib_gtk_foo
+includedir=/usr/include
+targets=x11 broadway
+
+gtk_binary_version=3.0.0
+gtk_host=x86_64-suse-linux-gnu
+
+Name: GTK+
+Description: GTK+ Graphical UI Library
+Version: 3.2.1
+Libs: -L${libdir} -lgtk-3
+Cflags: -I${includedir}/gtk-3.0 -DGSEAL_ENABLE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/data/fake-python.pc new/pkgconfig-1.2.2/data/fake-python.pc
--- old/pkgconfig-1.1.0/data/fake-python.pc 1970-01-01 01:00:00.000000000 +0100
+++ new/pkgconfig-1.2.2/data/fake-python.pc 2016-12-02 10:33:36.000000000 +0100
@@ -0,0 +1,13 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib_python_foo
+includedir=${prefix}/include
+
+Name: Python
+Description: Python library
+Requires:
+Version: 2.7
+Libs.private: -lpthread -ldl -lutil
+Libs: -L${libdir} -lpython2.7
+Cflags: -I${includedir}/python2.7
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/pkgconfig/pkgconfig.py new/pkgconfig-1.2.2/pkgconfig/pkgconfig.py
--- old/pkgconfig-1.1.0/pkgconfig/pkgconfig.py 2013-11-06 15:13:19.000000000 +0100
+++ new/pkgconfig-1.2.2/pkgconfig/pkgconfig.py 2016-12-02 10:33:36.000000000 +0100
@@ -22,9 +22,11 @@
"""pkgconfig is a Python module to interface with the pkg-config command line
tool."""
+import os
import subprocess
import re
import collections
+from functools import wraps
def _compare_versions(v1, v2):
@@ -51,6 +53,7 @@
def _convert_error(func):
+ @wraps(func)
def _wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
@@ -62,7 +65,8 @@
@_convert_error
def _query(package, option):
- cmd = 'pkg-config {0} {1}'.format(option, package).split()
+ pkg_config_exe = os.environ.get('PKG_CONFIG', None) or 'pkg-config'
+ cmd = '{0} {1} {2}'.format(pkg_config_exe, option, package).split()
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = proc.communicate()
@@ -72,19 +76,32 @@
@_convert_error
def exists(package):
- """Return True if package information is available."""
- cmd = 'pkg-config --exists {0}'.format(package).split()
+ """
+ Return True if package information is available.
+
+ If ``pkg-config`` not on path, raises ``EnvironmentError``.
+ """
+ pkg_config_exe = os.environ.get('PKG_CONFIG', None) or 'pkg-config'
+ cmd = '{0} --exists {1}'.format(pkg_config_exe, package).split()
return subprocess.call(cmd) == 0
@_convert_error
def requires(package):
- """Return a list of package names that is required by the package"""
+ """
+ Return a list of package names that is required by the package.
+
+ If ``pkg-config`` not on path, raises ``EnvironmentError``.
+ """
return _query(package, '--print-requires').split('\n')
def cflags(package):
- """Return the CFLAGS string returned by pkg-config."""
+ """
+ Return the CFLAGS string returned by pkg-config.
+
+ If ``pkg-config`` not on path, raises ``EnvironmentError``.
+ """
return _query(package, '--cflags')
@@ -108,6 +125,8 @@
False
>>> installed('foo', '>= 0.0.4')
True
+
+ If ``pkg-config`` not on path, raises ``EnvironmentError``.
"""
if not exists(package):
return False
@@ -152,9 +171,11 @@
Builds a dictionary containing the 'libraries', the 'library_dirs',
the 'include_dirs', and the 'define_macros' that are presented by
pkg-config. *package* is a string with space-delimited package names.
+
+ If ``pkg-config`` not on path, raises ``EnvironmentError``.
"""
def parse_package(package):
- result = collections.defaultdict(set)
+ result = collections.defaultdict(list)
# Execute the query to pkg-config and clean the result.
out = _query(package, '--cflags --libs')
@@ -164,27 +185,29 @@
for token in out.split():
key = _PARSE_MAP.get(token[:2])
if key:
- result[key].add(token[2:].strip())
+ result[key].append(token[2:].strip())
# Iterate and clean define macros.
- macros = set()
+ macros = list()
for declaration in result['define_macros']:
macro = tuple(declaration.split('='))
if len(macro) == 1:
macro += '',
- macros.add(macro)
+ macros.append(macro)
result['define_macros'] = macros
# Return parsed configuration.
return result
- # Go through all package names and update the result dict accordingly.
- result = collections.defaultdict(set)
+ # Return the result of parse_package directly.
+ # We don't need to loop over the packages
+
+ return parse_package(packages)
- for package in packages.split():
- for k, v in parse_package(package).items():
- result[k].update(v)
- return result
+def list_all():
+ """Return a list of all packages found by pkg-config."""
+ packages = [line.split()[0] for line in _query('', '--list-all').split('\n')]
+ return packages
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/pkgconfig.egg-info/PKG-INFO new/pkgconfig-1.2.2/pkgconfig.egg-info/PKG-INFO
--- old/pkgconfig-1.1.0/pkgconfig.egg-info/PKG-INFO 2013-11-06 15:15:45.000000000 +0100
+++ new/pkgconfig-1.2.2/pkgconfig.egg-info/PKG-INFO 2016-12-02 10:35:04.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: pkgconfig
-Version: 1.1.0
+Version: 1.2.2
Summary: Interface Python with pkg-config
Home-page: http://github.com/matze/pkgconfig
Author: Matthias Vogelgesang
@@ -17,6 +17,10 @@
It can be used to
+ - find all pkg-config packages ::
+
+ >>> packages = pkgconfig.list_all()
+
- check if a package exists ::
>>> pkgconfig.exists('glib-2.0')
@@ -39,8 +43,50 @@
>>> d = pkgconfig.parse('glib-2.0 gtk+-2.0')
>>> d['libraries']
- set([u'glib-2.0', u'gtk+-2.0'])
+ [u'gtk+-2.0', u'glib-2.0']
+
+ The ``pkgconfig.parse`` function return a dictonary of list.
+ The lists returned are an accurate representations of the equivalent
+ ``pkg-config`` call, both in content and order.
+
+ If ``pkg-config`` is not on the path, raises ``EnvironmentError``.
The ``pkgconfig`` module is licensed under the MIT license.
+
+ Changelog
+ ---------
+
+ Version 1.2.1 and 1.2.2
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bug fix releases released on December 1st and 2nd 2016.
+
+ - Include the ``data`` folder in the distribution in order to run tests
+ - Improve the tests
+
+
+ Version 1.2.0
+ ~~~~~~~~~~~~~
+
+ Released on November 30th 2016.
+
+ - Potential break: switch from result set to list
+ - Expose --list-all query
+ - Added support for PKG_CONFIG environment variable
+
+
+ Version 1.1.0
+ ~~~~~~~~~~~~~
+
+ Released on November 6th 2013.
+
+ - Multiple packages can now be parsed with a single call to ``.parse``.
+
+
+ Version 1.0.0
+ ~~~~~~~~~~~~~
+
+ First release on September 8th 2013.
+
Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/pkgconfig.egg-info/SOURCES.txt new/pkgconfig-1.2.2/pkgconfig.egg-info/SOURCES.txt
--- old/pkgconfig-1.1.0/pkgconfig.egg-info/SOURCES.txt 2013-11-06 15:15:45.000000000 +0100
+++ new/pkgconfig-1.2.2/pkgconfig.egg-info/SOURCES.txt 2016-12-02 10:35:04.000000000 +0100
@@ -2,9 +2,13 @@
MANIFEST.in
README.rst
setup.py
+test.py
+data/fake-gtk+-3.0.pc
+data/fake-python.pc
pkgconfig/__init__.py
pkgconfig/pkgconfig.py
pkgconfig.egg-info/PKG-INFO
pkgconfig.egg-info/SOURCES.txt
pkgconfig.egg-info/dependency_links.txt
+pkgconfig.egg-info/pbr.json
pkgconfig.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/pkgconfig.egg-info/pbr.json new/pkgconfig-1.2.2/pkgconfig.egg-info/pbr.json
--- old/pkgconfig-1.1.0/pkgconfig.egg-info/pbr.json 1970-01-01 01:00:00.000000000 +0100
+++ new/pkgconfig-1.2.2/pkgconfig.egg-info/pbr.json 2016-12-02 10:35:04.000000000 +0100
@@ -0,0 +1 @@
+{"is_release": false, "git_version": "bcc07b4"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/setup.py new/pkgconfig-1.2.2/setup.py
--- old/pkgconfig-1.1.0/setup.py 2013-11-06 15:14:54.000000000 +0100
+++ new/pkgconfig-1.2.2/setup.py 2016-12-02 10:33:53.000000000 +0100
@@ -1,6 +1,6 @@
from setuptools import setup
-VERSION = '1.1.0'
+VERSION = '1.2.2'
setup(
name='pkgconfig',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pkgconfig-1.1.0/test.py new/pkgconfig-1.2.2/test.py
--- old/pkgconfig-1.1.0/test.py 1970-01-01 01:00:00.000000000 +0100
+++ new/pkgconfig-1.2.2/test.py 2016-12-02 10:33:36.000000000 +0100
@@ -0,0 +1,57 @@
+import os
+import pkgconfig
+import nose.tools as nt
+
+os.environ['PKG_CONFIG_PATH'] = os.path.abspath('./data')
+PACKAGE_NAME = 'fake-gtk+-3.0'
+
+
+def test_exists():
+ nt.assert_true(pkgconfig.exists(PACKAGE_NAME))
+
+
+def test_version():
+ assertions = {
+ '3.2.1': True,
+ '==3.2.1': True,
+ '==3.2.2': False,
+ '> 2.2': True,
+ '> 3.4': False,
+ '<= 3.3.5': True,
+ '< 2.3': False
+ }
+
+ for version, val in assertions.items():
+ nt.assert_true(pkgconfig.installed(PACKAGE_NAME, version) == val)
+
+
+def test_cflags():
+ flags = pkgconfig.cflags(PACKAGE_NAME)
+
+ for flag in flags.split(' '):
+ nt.assert_true(flag in ('-DGSEAL_ENABLE', '-I/usr/include/gtk-3.0'))
+
+
+def test_libs():
+ flags = pkgconfig.libs(PACKAGE_NAME)
+
+ for flag in flags.split(' '):
+ nt.assert_true(flag in ('-L/usr/lib_gtk_foo', '-lgtk-3'))
+
+
+def test_parse():
+ config = pkgconfig.parse("fake-gtk+-3.0 fake-python")
+
+ nt.assert_true(('GSEAL_ENABLE', '') in config['define_macros'])
+ nt.assert_true('/usr/include/gtk-3.0' in config['include_dirs'])
+ nt.assert_true('/usr/lib_gtk_foo' in config['library_dirs'])
+ nt.assert_true('/usr/lib_python_foo' in config['library_dirs'])
+ nt.assert_true('gtk-3' in config['libraries'])
+
+ nt.assert_true('/usr/include/python2.7' in config['include_dirs'])
+
+
+def test_listall():
+ packages = pkgconfig.list_all()
+ nt.assert_true('fake-gtk+-3.0' in packages)
+ nt.assert_true('fake-python' in packages)
1
0
Hello community,
here is the log from the commit of package kernel-source for openSUSE:Factory checked in at 2017-05-02 08:54:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kernel-source (Old)
and /work/SRC/openSUSE:Factory/.kernel-source.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source"
Tue May 2 08:54:18 2017 rev:362 rq:491584 version:4.10.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/kernel-source/dtb-aarch64.changes 2017-04-26 21:43:59.713366916 +0200
+++ /work/SRC/openSUSE:Factory/.kernel-source.new/dtb-aarch64.changes 2017-05-02 08:54:20.347007300 +0200
@@ -1,0 +2,26 @@
+Thu Apr 27 14:23:31 CEST 2017 - jslaby(a)suse.cz
+
+- Linux 4.10.13 (bnc#1012628).
+- commit e5d11ce
+
+-------------------------------------------------------------------
+Wed Apr 26 18:22:54 CEST 2017 - tiwai(a)suse.de
+
+- platform/x86: dell-laptop: Add keyboard backlight timeout AC
+ settings (bsc#1013561).
+- commit 7aedba7
+
+-------------------------------------------------------------------
+Wed Apr 26 11:25:10 CEST 2017 - mkubecek(a)suse.cz
+
+- macsec: avoid heap overflow in skb_to_sgvec (CVE-2017-7477
+ bsc#1035823).
+- commit 461b1f0
+
+-------------------------------------------------------------------
+Mon Apr 24 17:47:04 CEST 2017 - tiwai(a)suse.de
+
+- Disable CONFIG_POWER_SUPPLY_DEBUG in debug kernels (bsc#1031500).
+- commit 11b3f7c
+
+-------------------------------------------------------------------
dtb-armv6l.changes: same change
dtb-armv7l.changes: same change
kernel-64kb.changes: same change
kernel-debug.changes: same change
kernel-default.changes: same change
kernel-docs.changes: same change
kernel-lpae.changes: same change
kernel-obs-build.changes: same change
kernel-obs-qa.changes: same change
kernel-pae.changes: same change
kernel-source.changes: same change
kernel-syms.changes: same change
kernel-syzkaller.changes: same change
kernel-vanilla.changes: same change
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dtb-aarch64.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.250174907 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.254174343 +0200
@@ -16,15 +16,15 @@
#
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define vanilla_only 0
%include %_sourcedir/kernel-spec-macros
Name: dtb-aarch64
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
dtb-armv6l.spec: same change
dtb-armv7l.spec: same change
++++++ kernel-64kb.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.378156860 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.382156296 +0200
@@ -18,7 +18,7 @@
%define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -58,9 +58,9 @@
Summary: Kernel with 64kb PAGE_SIZE
License: GPL-2.0
Group: System/Kernel
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
kernel-debug.spec: same change
kernel-default.spec: same change
++++++ kernel-docs.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.478142761 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.482142197 +0200
@@ -16,7 +16,7 @@
#
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%include %_sourcedir/kernel-spec-macros
@@ -42,9 +42,9 @@
Summary: Kernel Documentation (man pages)
License: GPL-2.0
Group: Documentation/Man
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-lpae.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.514137686 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.518137122 +0200
@@ -18,7 +18,7 @@
%define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -58,9 +58,9 @@
Summary: Kernel for LPAE enabled systems
License: GPL-2.0
Group: System/Kernel
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-obs-build.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.550132610 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.550132610 +0200
@@ -19,7 +19,7 @@
#!BuildIgnore: post-build-checks
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -57,9 +57,9 @@
Summary: package kernel and initrd for OBS VM builds
License: GPL-2.0
Group: SLES
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-obs-qa.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.586127534 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.594126407 +0200
@@ -17,7 +17,7 @@
# needsrootforbuild
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%include %_sourcedir/kernel-spec-macros
@@ -36,9 +36,9 @@
Summary: Basic QA tests for the kernel
License: GPL-2.0
Group: SLES
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-pae.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.626121895 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.630121331 +0200
@@ -18,7 +18,7 @@
%define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -58,9 +58,9 @@
Summary: Kernel with PAE Support
License: GPL-2.0
Group: System/Kernel
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-source.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.658117383 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.662116819 +0200
@@ -18,7 +18,7 @@
%define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -30,9 +30,9 @@
Summary: The Linux Kernel Sources
License: GPL-2.0
Group: Development/Sources
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-syms.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.690112872 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.694112308 +0200
@@ -24,10 +24,10 @@
Summary: Kernel Symbol Versions (modversions)
License: GPL-2.0
Group: Development/Sources
-Version: 4.10.12
+Version: 4.10.13
%if %using_buildservice
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
++++++ kernel-syzkaller.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:26.726107796 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:26.730107232 +0200
@@ -18,7 +18,7 @@
%define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
%define variant %{nil}
%define vanilla_only 0
@@ -58,9 +58,9 @@
Summary: Kernel used for fuzzing by syzkaller
License: GPL-2.0
Group: System/Kernel
-Version: 4.10.12
+Version: 4.10.13
%if 0%{?is_kotd}
-Release: <RELEASE>.g3043bd9
+Release: <RELEASE>.ge5d11ce
%else
Release: 0
%endif
kernel-vanilla.spec: same change
++++++ config.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/arm64/default new/config/arm64/default
--- old/config/arm64/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/arm64/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm64 4.10.5 Kernel Configuration
+# Linux/arm64 4.10.12 Kernel Configuration
#
CONFIG_ARM64=y
CONFIG_64BIT=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv6hl/default new/config/armv6hl/default
--- old/config/armv6hl/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv6hl/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv7hl/default new/config/armv7hl/default
--- old/config/armv7hl/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv7hl/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv7hl/lpae new/config/armv7hl/lpae
--- old/config/armv7hl/lpae 2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv7hl/lpae 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/debug new/config/i386/debug
--- old/config/i386/debug 2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/debug 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -4210,7 +4210,7 @@
CONFIG_POWER_AVS=y
# CONFIG_POWER_RESET is not set
CONFIG_POWER_SUPPLY=y
-CONFIG_POWER_SUPPLY_DEBUG=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_TEST_POWER is not set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/default new/config/i386/default
--- old/config/i386/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/pae new/config/i386/pae
--- old/config/i386/pae 2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/pae 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/debug new/config/ppc64/debug
--- old/config/ppc64/debug 2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64/debug 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
#
CONFIG_PPC64=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/default new/config/ppc64/default
--- old/config/ppc64/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
#
CONFIG_PPC64=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/debug new/config/ppc64le/debug
--- old/config/ppc64le/debug 2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64le/debug 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
#
CONFIG_PPC64=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/default new/config/ppc64le/default
--- old/config/ppc64le/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64le/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
#
CONFIG_PPC64=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/default new/config/s390x/default
--- old/config/s390x/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/s390x/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/s390 4.10.0 Kernel Configuration
+# Linux/s390 4.10.12 Kernel Configuration
#
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/debug new/config/x86_64/debug
--- old/config/x86_64/debug 2017-03-22 14:15:00.000000000 +0100
+++ new/config/x86_64/debug 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 4.10.0 Kernel Configuration
+# Linux/x86_64 4.10.12 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
@@ -4132,7 +4132,7 @@
CONFIG_POWER_AVS=y
# CONFIG_POWER_RESET is not set
CONFIG_POWER_SUPPLY=y
-CONFIG_POWER_SUPPLY_DEBUG=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=m
# CONFIG_GENERIC_ADC_BATTERY is not set
# CONFIG_TEST_POWER is not set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/default new/config/x86_64/default
--- old/config/x86_64/default 2017-03-22 14:15:00.000000000 +0100
+++ new/config/x86_64/default 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 4.10.0 Kernel Configuration
+# Linux/x86_64 4.10.12 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
++++++ patches.drivers.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout new/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout
--- old/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout 1970-01-01 01:00:00.000000000 +0100
+++ new/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout 2017-04-26 18:24:24.000000000 +0200
@@ -0,0 +1,193 @@
+From bcf7d8a30e2888f78a19778a16d3dd8c10b4b0ad Mon Sep 17 00:00:00 2001
+From: Pali Rohár <pali.rohar(a)gmail.com>
+Date: Sun, 23 Apr 2017 21:40:47 +0200
+Subject: [PATCH] platform/x86: dell-laptop: Add keyboard backlight timeout AC
+ settings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf8
+Content-Transfer-Encoding: 8bit
+Git-commit: bcf7d8a30e2888f78a19778a16d3dd8c10b4b0ad
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.infradead.org/linux-platform-drivers-x86.git
+References: bsc#1013561
+
+When changing keyboard backlight state on new Dell laptops, firmware
+expects a new timeout AC value filled in Set New State SMBIOS call.
+
+Without it any change of keyboard backlight state on new Dell laptops
+fails. And user can see following error message in dmesg:
+
+ dell_laptop: Setting old previous keyboard state failed
+ leds dell::kbd_backlight: Setting an LED's brightness failed (-6)
+
+This patch adds support for retrieving current timeout AC values and also
+updating them. Current timeout value in sysfs is displayed based on current
+AC status, like current display brightness value.
+
+Detection if Dell laptop supports or not new timeout AC settings is done by
+checking existence of Keyboard Backlight with AC SMBIOS token (0x0451).
+
+Signed-off-by: Pali Rohár <pali.rohar(a)gmail.com>
+Acked-by: Mario Limonciello <mario.limonciello(a)dell.com>
+Tested-by: Arcadiy Ivanov <arcadiy(a)ivanov.biz>
+[andy: fixed merge conflict with defined constants]
+Signed-off-by: Andy Shevchenko <andriy.shevchenko(a)linux.intel.com>
+Acked-by: Takashi Iwai <tiwai(a)suse.de>
+
+---
+ drivers/platform/x86/dell-laptop.c | 59 +++++++++++++++++++++++++++++++++----
+ 1 file changed, 53 insertions(+), 6 deletions(-)
+
+--- a/drivers/platform/x86/dell-laptop.c
++++ b/drivers/platform/x86/dell-laptop.c
+@@ -42,6 +42,7 @@
+ #define KBD_LED_AUTO_50_TOKEN 0x02EB
+ #define KBD_LED_AUTO_75_TOKEN 0x02EC
+ #define KBD_LED_AUTO_100_TOKEN 0x02F6
++#define KBD_LED_AC_TOKEN 0x0451
+
+ struct quirk_entry {
+ u8 touchpad_led;
+@@ -1024,7 +1025,7 @@ static void touchpad_led_exit(void)
+ * bit 2 Pointing stick
+ * bit 3 Any mouse
+ * bits 4-7 Reserved for future use
+- * cbRES2, byte3 Current Timeout
++ * cbRES2, byte3 Current Timeout on battery
+ * bits 7:6 Timeout units indicator:
+ * 00b Seconds
+ * 01b Minutes
+@@ -1036,6 +1037,15 @@ static void touchpad_led_exit(void)
+ * cbRES3, byte0 Current setting of ALS value that turns the light on or off.
+ * cbRES3, byte1 Current ALS reading
+ * cbRES3, byte2 Current keyboard light level.
++ * cbRES3, byte3 Current timeout on AC Power
++ * bits 7:6 Timeout units indicator:
++ * 00b Seconds
++ * 01b Minutes
++ * 10b Hours
++ * 11b Days
++ * Bits 5:0 Timeout value (0-63) in sec/min/hr/day
++ * NOTE: A value of 0 means always on (no timeout) if any bits of RES3 byte2
++ * are set upon return from the upon return from the [Get Feature information] call.
+ *
+ * cbArg1 0x2 = Set New State
+ * cbRES1 Standard return codes (0, -1, -2)
+@@ -1058,7 +1068,7 @@ static void touchpad_led_exit(void)
+ * bit 2 Pointing stick
+ * bit 3 Any mouse
+ * bits 4-7 Reserved for future use
+- * cbArg2, byte3 Desired Timeout
++ * cbArg2, byte3 Desired Timeout on battery
+ * bits 7:6 Timeout units indicator:
+ * 00b Seconds
+ * 01b Minutes
+@@ -1067,6 +1077,13 @@ static void touchpad_led_exit(void)
+ * bits 5:0 Timeout value (0-63) in sec/min/hr/day
+ * cbArg3, byte0 Desired setting of ALS value that turns the light on or off.
+ * cbArg3, byte2 Desired keyboard light level.
++ * cbArg3, byte3 Desired Timeout on AC power
++ * bits 7:6 Timeout units indicator:
++ * 00b Seconds
++ * 01b Minutes
++ * 10b Hours
++ * 11b Days
++ * bits 5:0 Timeout value (0-63) in sec/min/hr/day
+ */
+
+
+@@ -1112,6 +1129,8 @@ struct kbd_state {
+ u8 triggers;
+ u8 timeout_value;
+ u8 timeout_unit;
++ u8 timeout_value_ac;
++ u8 timeout_unit_ac;
+ u8 als_setting;
+ u8 als_value;
+ u8 level;
+@@ -1131,6 +1150,7 @@ static u16 kbd_token_bits;
+ static struct kbd_info kbd_info;
+ static bool kbd_als_supported;
+ static bool kbd_triggers_supported;
++static bool kbd_timeout_ac_supported;
+
+ static u8 kbd_mode_levels[16];
+ static int kbd_mode_levels_count;
+@@ -1269,6 +1289,8 @@ static int kbd_get_state(struct kbd_stat
+ state->als_setting = buffer->output[2] & 0xFF;
+ state->als_value = (buffer->output[2] >> 8) & 0xFF;
+ state->level = (buffer->output[2] >> 16) & 0xFF;
++ state->timeout_value_ac = (buffer->output[2] >> 24) & 0x3F;
++ state->timeout_unit_ac = (buffer->output[2] >> 30) & 0x3;
+
+ out:
+ dell_smbios_release_buffer();
+@@ -1288,6 +1310,8 @@ static int kbd_set_state(struct kbd_stat
+ buffer->input[1] |= (state->timeout_unit & 0x3) << 30;
+ buffer->input[2] = state->als_setting & 0xFF;
+ buffer->input[2] |= (state->level & 0xFF) << 16;
++ buffer->input[2] |= (state->timeout_value_ac & 0x3F) << 24;
++ buffer->input[2] |= (state->timeout_unit_ac & 0x3) << 30;
+ dell_smbios_send_request(4, 11);
+ ret = buffer->output[0];
+ dell_smbios_release_buffer();
+@@ -1394,6 +1418,13 @@ static inline int kbd_init_info(void)
+ if (ret)
+ return ret;
+
++ /* NOTE: Old models without KBD_LED_AC_TOKEN token supports only one
++ * timeout value which is shared for both battery and AC power
++ * settings. So do not try to set AC values on old models.
++ */
++ if (dell_smbios_find_token(KBD_LED_AC_TOKEN))
++ kbd_timeout_ac_supported = true;
++
+ kbd_get_state(&state);
+
+ /* NOTE: timeout value is stored in 6 bits so max value is 63 */
+@@ -1573,8 +1604,14 @@ static ssize_t kbd_led_timeout_store(str
+ return ret;
+
+ new_state = state;
+- new_state.timeout_value = value;
+- new_state.timeout_unit = unit;
++
++ if (kbd_timeout_ac_supported && power_supply_is_system_supplied() > 0) {
++ new_state.timeout_value_ac = value;
++ new_state.timeout_unit_ac = unit;
++ } else {
++ new_state.timeout_value = value;
++ new_state.timeout_unit = unit;
++ }
+
+ ret = kbd_set_state_safe(&new_state, &state);
+ if (ret)
+@@ -1587,16 +1624,26 @@ static ssize_t kbd_led_timeout_show(stru
+ struct device_attribute *attr, char *buf)
+ {
+ struct kbd_state state;
++ int value;
+ int ret;
+ int len;
++ u8 unit;
+
+ ret = kbd_get_state(&state);
+ if (ret)
+ return ret;
+
+- len = sprintf(buf, "%d", state.timeout_value);
++ if (kbd_timeout_ac_supported && power_supply_is_system_supplied() > 0) {
++ value = state.timeout_value_ac;
++ unit = state.timeout_unit_ac;
++ } else {
++ value = state.timeout_value;
++ unit = state.timeout_unit;
++ }
++
++ len = sprintf(buf, "%d", value);
+
+- switch (state.timeout_unit) {
++ switch (unit) {
+ case KBD_TIMEOUT_SECONDS:
+ return len + sprintf(buf+len, "s\n");
+ case KBD_TIMEOUT_MINUTES:
++++++ patches.fixes.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch new/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
--- old/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch 1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch 2017-04-26 11:25:10.000000000 +0200
@@ -0,0 +1,78 @@
+From: "Jason A. Donenfeld" <Jason(a)zx2c4.com>
+Date: Fri, 21 Apr 2017 23:14:48 +0200
+Subject: macsec: avoid heap overflow in skb_to_sgvec
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Git-commit: 4d6fa57b4dab0d77f4d8e9d9c73d1e63f6fe8fee
+References: CVE-2017-7477 bsc#1035823
+
+While this may appear as a humdrum one line change, it's actually quite
+important. An sk_buff stores data in three places:
+
+1. A linear chunk of allocated memory in skb->data. This is the easiest
+ one to work with, but it precludes using scatterdata since the memory
+ must be linear.
+2. The array skb_shinfo(skb)->frags, which is of maximum length
+ MAX_SKB_FRAGS. This is nice for scattergather, since these fragments
+ can point to different pages.
+3. skb_shinfo(skb)->frag_list, which is a pointer to another sk_buff,
+ which in turn can have data in either (1) or (2).
+
+The first two are rather easy to deal with, since they're of a fixed
+maximum length, while the third one is not, since there can be
+potentially limitless chains of fragments. Fortunately dealing with
+frag_list is opt-in for drivers, so drivers don't actually have to deal
+with this mess. For whatever reason, macsec decided it wanted pain, and
+so it explicitly specified NETIF_F_FRAGLIST.
+
+Because dealing with (1), (2), and (3) is insane, most users of sk_buff
+doing any sort of crypto or paging operation calls a convenient function
+called skb_to_sgvec (which happens to be recursive if (3) is in use!).
+This takes a sk_buff as input, and writes into its output pointer an
+array of scattergather list items. Sometimes people like to declare a
+fixed size scattergather list on the stack; othertimes people like to
+allocate a fixed size scattergather list on the heap. However, if you're
+doing it in a fixed-size fashion, you really shouldn't be using
+NETIF_F_FRAGLIST too (unless you're also ensuring the sk_buff and its
+frag_list children arent't shared and then you check the number of
+fragments in total required.)
+
+Macsec specifically does this:
+
+ size += sizeof(struct scatterlist) * (MAX_SKB_FRAGS + 1);
+ tmp = kmalloc(size, GFP_ATOMIC);
+ *sg = (struct scatterlist *)(tmp + sg_offset);
+ ...
+ sg_init_table(sg, MAX_SKB_FRAGS + 1);
+ skb_to_sgvec(skb, sg, 0, skb->len);
+
+Specifying MAX_SKB_FRAGS + 1 is the right answer usually, but not if you're
+using NETIF_F_FRAGLIST, in which case the call to skb_to_sgvec will
+overflow the heap, and disaster ensues.
+
+Signed-off-by: Jason A. Donenfeld <Jason(a)zx2c4.com>
+Cc: stable(a)vger.kernel.org
+Cc: security(a)kernel.org
+Signed-off-by: David S. Miller <davem(a)davemloft.net>
+Acked-by: Michal Kubecek <mkubecek(a)suse.cz>
+
+---
+ drivers/net/macsec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
+index f83cf6696820..8420069594b3 100644
+--- a/drivers/net/macsec.c
++++ b/drivers/net/macsec.c
+@@ -2713,7 +2713,7 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
+ }
+
+ #define MACSEC_FEATURES \
+- (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
++ (NETIF_F_SG | NETIF_F_HIGHDMA)
+ static struct lock_class_key macsec_netdev_addr_lock_key;
+
+ static int macsec_dev_init(struct net_device *dev)
+--
+2.12.2
+
++++++ patches.kernel.org.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.kernel.org/patch-4.10.12-13 new/patches.kernel.org/patch-4.10.12-13
--- old/patches.kernel.org/patch-4.10.12-13 1970-01-01 01:00:00.000000000 +0100
+++ new/patches.kernel.org/patch-4.10.12-13 2017-04-27 14:23:31.000000000 +0200
@@ -0,0 +1,845 @@
+From: Jiri Slaby <jslaby(a)suse.cz>
+Subject: Linux 4.10.13
+References: bnc#1012628
+Patch-mainline: 4.10.13
+Git-commit: 956a4cd2c957acf638ff29951aabaa9d8e92bbc2
+Git-commit: 29f72ce3e4d18066ec75c79c857bee0618a3504b
+Git-commit: 9e1ba4f27f018742a1aa95d11e35106feba08ec1
+Git-commit: 9cd9a21ce070be8a918ffd3381468315a7a76ba6
+Git-commit: 0dc9c639e6553e39c13b2c0d54c8a1b098cb95e2
+Git-commit: 9e478066eae41211c92a8f63cc69aafc391bd6ab
+Git-commit: 3018e947d7fd536d57e2b550c33e456d921fff8c
+Git-commit: 32fe905c17f001c0eee13c59afddd0bf2eed509c
+Git-commit: c3d9fda688742c06e89aa1f0f8fd943fc11468cb
+Git-commit: 9f327845358d3dd0d8a5a7a5436b0aa5c432e757
+Git-commit: a6db2c86033bc41329770e90c20d4f1fec3824e4
+Git-commit: fe8c470ab87d90e4b5115902dd94eced7e3305c3
+Git-commit: 704de489e0e3640a2ee2d0daf173e9f7375582ba
+Git-commit: a8f60d1fadf7b8b54449fcc9d6b15248917478ba
+Git-commit: ce69e2fea093b7fa3991c87849c4955cd47796c9
+Git-commit: a0918f1ce6a43ac980b42b300ec443c154970979
+Git-commit: 62a6cfddcc0a5313e7da3e8311ba16226fe0ac10
+Git-commit: fc280fe871449ead4bdbd1665fa52c7c01c64765
+Git-commit: 78f7a45dac2a2d2002f98a3a95f7979867868d73
+Git-commit: 286f3f478796fb4f9e003e9f7d649f3c33f08d2f
+Git-commit: df62db5be2e5f070ecd1a5ece5945b590ee112e0
+Git-commit: c9f838d104fed6f2f61d68164712e3204bf5271b
+Git-commit: c1644fe041ebaf6519f6809146a77c3ead9193af
+Git-commit: ee8f844e3c5a73b999edf733df1c529d6503ec2f
+
+Signed-off-by: Jiri Slaby <jslaby(a)suse.cz>
+---
+diff --git a/Makefile b/Makefile
+index 9689d3f644ea..8285f4de02d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 10
+-SUBLEVEL = 12
++SUBLEVEL = 13
+ EXTRAVERSION =
+ NAME = Fearless Coyote
+
+diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
+index 6432d4bf08c8..767ef6d68c9e 100644
+--- a/arch/powerpc/kernel/entry_64.S
++++ b/arch/powerpc/kernel/entry_64.S
+@@ -689,7 +689,7 @@ resume_kernel:
+
+ addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */
+
+- lwz r3,GPR1(r1)
++ ld r3,GPR1(r1)
+ subi r3,r3,INT_FRAME_SIZE /* dst: Allocate a trampoline exception frame */
+ mr r4,r1 /* src: current exception frame */
+ mr r1,r3 /* Reroute the trampoline frame to r1 */
+@@ -703,8 +703,8 @@ resume_kernel:
+ addi r6,r6,8
+ bdnz 2b
+
+- /* Do real store operation to complete stwu */
+- lwz r5,GPR1(r1)
++ /* Do real store operation to complete stdu */
++ ld r5,GPR1(r1)
+ std r8,0(r5)
+
+ /* Clear _TIF_EMULATE_STACK_STORE flag */
+diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
+index 0362cd5fa187..0cea7026e4ff 100644
+--- a/arch/s390/include/asm/pgtable.h
++++ b/arch/s390/include/asm/pgtable.h
+@@ -1029,6 +1029,8 @@ int get_guest_storage_key(struct mm_struct *mm, unsigned long addr,
+ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
+ pte_t *ptep, pte_t entry)
+ {
++ if (pte_present(entry))
++ pte_val(entry) &= ~_PAGE_UNUSED;
+ if (mm_has_pgste(mm))
+ ptep_set_pte_at(mm, addr, ptep, entry);
+ else
+diff --git a/arch/x86/kernel/cpu/mcheck/mce-genpool.c b/arch/x86/kernel/cpu/mcheck/mce-genpool.c
+index 93d824ec3120..040af1939460 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce-genpool.c
++++ b/arch/x86/kernel/cpu/mcheck/mce-genpool.c
+@@ -85,7 +85,7 @@ void mce_gen_pool_process(void)
+ head = llist_reverse_order(head);
+ llist_for_each_entry_safe(node, tmp, head, llnode) {
+ mce = &node->mce;
+- atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
++ blocking_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
+ gen_pool_free(mce_evt_pool, (unsigned long)node, sizeof(*node));
+ }
+ }
+diff --git a/arch/x86/kernel/cpu/mcheck/mce-internal.h b/arch/x86/kernel/cpu/mcheck/mce-internal.h
+index cd74a3f00aea..de20902ecf23 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce-internal.h
++++ b/arch/x86/kernel/cpu/mcheck/mce-internal.h
+@@ -13,7 +13,7 @@ enum severity_level {
+ MCE_PANIC_SEVERITY,
+ };
+
+-extern struct atomic_notifier_head x86_mce_decoder_chain;
++extern struct blocking_notifier_head x86_mce_decoder_chain;
+
+ #define ATTR_LEN 16
+ #define INITIAL_CHECK_INTERVAL 5 * 60 /* 5 minutes */
+diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
+index 036fc03aefbd..fcf8b8d6ebfb 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce.c
++++ b/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -123,7 +123,7 @@ static void (*quirk_no_way_out)(int bank, struct mce *m, struct pt_regs *regs);
+ * CPU/chipset specific EDAC code can register a notifier call here to print
+ * MCE errors in a human-readable form.
+ */
+-ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);
++BLOCKING_NOTIFIER_HEAD(x86_mce_decoder_chain);
+
+ /* Do initial initialization of a struct mce */
+ void mce_setup(struct mce *m)
+@@ -223,7 +223,7 @@ void mce_register_decode_chain(struct notifier_block *nb)
+ if (nb != &mce_srao_nb && nb->priority == INT_MAX)
+ nb->priority -= 1;
+
+- atomic_notifier_chain_register(&x86_mce_decoder_chain, nb);
++ blocking_notifier_chain_register(&x86_mce_decoder_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(mce_register_decode_chain);
+
+@@ -231,7 +231,7 @@ void mce_unregister_decode_chain(struct notifier_block *nb)
+ {
+ atomic_dec(&num_notifiers);
+
+- atomic_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
++ blocking_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(mce_unregister_decode_chain);
+
+@@ -324,18 +324,7 @@ static void __print_mce(struct mce *m)
+
+ static void print_mce(struct mce *m)
+ {
+- int ret = 0;
+-
+ __print_mce(m);
+-
+- /*
+- * Print out human-readable details about the MCE error,
+- * (if the CPU has an implementation for that)
+- */
+- ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
+- if (ret == NOTIFY_STOP)
+- return;
+-
+ pr_emerg_ratelimited(HW_ERR "Run the above through 'mcelog --ascii'\n");
+ }
+
+diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+index a5fd137417a2..b44a25d77a84 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
++++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+@@ -60,7 +60,7 @@ static const char * const th_names[] = {
+ "load_store",
+ "insn_fetch",
+ "combined_unit",
+- "",
++ "decode_unit",
+ "northbridge",
+ "execution_unit",
+ };
+diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
+index fcd4ce6f78d5..1c2b846c5776 100644
+--- a/drivers/acpi/power.c
++++ b/drivers/acpi/power.c
+@@ -200,6 +200,7 @@ static int acpi_power_get_list_state(struct list_head *list, int *state)
+ return -EINVAL;
+
+ /* The state of the list is 'on' IFF all resources are 'on'. */
++ cur_state = 0;
+ list_for_each_entry(entry, list, node) {
+ struct acpi_power_resource *resource = entry->resource;
+ acpi_handle handle = resource->device.handle;
+diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig
+index 3e2ab3b14eea..9e95bf94eb13 100644
+--- a/drivers/dax/Kconfig
++++ b/drivers/dax/Kconfig
+@@ -2,6 +2,7 @@ menuconfig DEV_DAX
+ tristate "DAX: direct access to differentiated memory"
+ default m if NVDIMM_DAX
+ depends on TRANSPARENT_HUGEPAGE
++ select SRCU
+ help
+ Support raw access to differentiated (persistence, bandwidth,
+ latency...) memory via an mmap(2) capable character
+diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c
+index 20ab6bf9d1c7..53a016c3dffa 100644
+--- a/drivers/dax/dax.c
++++ b/drivers/dax/dax.c
+@@ -24,6 +24,7 @@
+ #include "dax.h"
+
+ static dev_t dax_devt;
++DEFINE_STATIC_SRCU(dax_srcu);
+ static struct class *dax_class;
+ static DEFINE_IDA(dax_minor_ida);
+ static int nr_dax = CONFIG_NR_DEV_DAX;
+@@ -59,7 +60,7 @@ struct dax_region {
+ * @region - parent region
+ * @dev - device backing the character device
+ * @cdev - core chardev data
+- * @alive - !alive + rcu grace period == no new mappings can be established
++ * @alive - !alive + srcu grace period == no new mappings can be established
+ * @id - child id in the region
+ * @num_resources - number of physical address extents in this device
+ * @res - array of physical address ranges
+@@ -530,7 +531,7 @@ static int __dax_dev_pmd_fault(struct dax_dev *dax_dev,
+ static int dax_dev_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
+ pmd_t *pmd, unsigned int flags)
+ {
+- int rc;
++ int rc, id;
+ struct file *filp = vma->vm_file;
+ struct dax_dev *dax_dev = filp->private_data;
+
+@@ -538,9 +539,9 @@ static int dax_dev_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
+ current->comm, (flags & FAULT_FLAG_WRITE)
+ ? "write" : "read", vma->vm_start, vma->vm_end);
+
+- rcu_read_lock();
++ id = srcu_read_lock(&dax_srcu);
+ rc = __dax_dev_pmd_fault(dax_dev, vma, addr, pmd, flags);
+- rcu_read_unlock();
++ srcu_read_unlock(&dax_srcu, id);
+
+ return rc;
+ }
+@@ -656,11 +657,11 @@ static void unregister_dax_dev(void *dev)
+ * Note, rcu is not protecting the liveness of dax_dev, rcu is
+ * ensuring that any fault handlers that might have seen
+ * dax_dev->alive == true, have completed. Any fault handlers
+- * that start after synchronize_rcu() has started will abort
++ * that start after synchronize_srcu() has started will abort
+ * upon seeing dax_dev->alive == false.
+ */
+ dax_dev->alive = false;
+- synchronize_rcu();
++ synchronize_srcu(&dax_srcu);
+ unmap_mapping_range(dax_dev->inode->i_mapping, 0, 0, 1);
+ cdev_del(cdev);
+ device_unregister(dev);
+diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
+index 6ef4f2fcfe43..0611f082f392 100644
+--- a/drivers/hid/wacom_wac.c
++++ b/drivers/hid/wacom_wac.c
+@@ -1798,7 +1798,7 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
+ return;
+ case HID_DG_TOOLSERIALNUMBER:
+ wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
+- wacom_wac->serial[0] |= value;
++ wacom_wac->serial[0] |= (__u32)value;
+ return;
+ case WACOM_HID_WD_SENSE:
+ wacom_wac->hid_data.sense_state = value;
+diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
+index db7d1d666ac1..7826994c45bf 100644
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -1118,6 +1118,7 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse,
+ * Asus UX32VD 0x361f02 00, 15, 0e clickpad
+ * Avatar AVIU-145A2 0x361f00 ? clickpad
+ * Fujitsu LIFEBOOK E544 0x470f00 d0, 12, 09 2 hw buttons
++ * Fujitsu LIFEBOOK E547 0x470f00 50, 12, 09 2 hw buttons
+ * Fujitsu LIFEBOOK E554 0x570f01 40, 14, 0c 2 hw buttons
+ * Fujitsu T725 0x470f01 05, 12, 09 2 hw buttons
+ * Fujitsu H730 0x570f00 c0, 14, 0c 3 hw buttons (**)
+@@ -1524,6 +1525,13 @@ static const struct dmi_system_id elantech_dmi_force_crc_enabled[] = {
+ },
+ },
+ {
++ /* Fujitsu LIFEBOOK E547 does not work with crc_enabled == 0 */
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E547"),
++ },
++ },
++ {
+ /* Fujitsu LIFEBOOK E554 does not work with crc_enabled == 0 */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
+diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
+index 73db08558e4d..0a634d23b2ef 100644
+--- a/drivers/mmc/host/dw_mmc.c
++++ b/drivers/mmc/host/dw_mmc.c
+@@ -22,6 +22,7 @@
+ #include <linux/ioport.h>
+ #include <linux/module.h>
+ #include <linux/platform_device.h>
++#include <linux/pm_runtime.h>
+ #include <linux/seq_file.h>
+ #include <linux/slab.h>
+ #include <linux/stat.h>
+@@ -1179,11 +1180,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
+ if ((clock != slot->__clk_old &&
+ !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) ||
+ force_clkinit) {
+- dev_info(&slot->mmc->class_dev,
+- "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
+- slot->id, host->bus_hz, clock,
+- div ? ((host->bus_hz / div) >> 1) :
+- host->bus_hz, div);
++ /* Silent the verbose log if calling from PM context */
++ if (!force_clkinit)
++ dev_info(&slot->mmc->class_dev,
++ "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
++ slot->id, host->bus_hz, clock,
++ div ? ((host->bus_hz / div) >> 1) :
++ host->bus_hz, div);
+
+ /*
+ * If card is polling, display the message only
+@@ -1616,10 +1619,16 @@ static void dw_mci_init_card(struct mmc_host *mmc, struct mmc_card *card)
+
+ if (card->type == MMC_TYPE_SDIO ||
+ card->type == MMC_TYPE_SD_COMBO) {
+- set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++ if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags)) {
++ pm_runtime_get_noresume(mmc->parent);
++ set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++ }
+ clk_en_a = clk_en_a_old & ~clken_low_pwr;
+ } else {
+- clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++ if (test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags)) {
++ pm_runtime_put_noidle(mmc->parent);
++ clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++ }
+ clk_en_a = clk_en_a_old | clken_low_pwr;
+ }
+
+diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
+index 7123ef96ed18..445fc47dc3e7 100644
+--- a/drivers/mmc/host/sdhci-esdhc-imx.c
++++ b/drivers/mmc/host/sdhci-esdhc-imx.c
+@@ -830,6 +830,7 @@ static int esdhc_change_pinstate(struct sdhci_host *host,
+
+ switch (uhs) {
+ case MMC_TIMING_UHS_SDR50:
++ case MMC_TIMING_UHS_DDR50:
+ pinctrl = imx_data->pins_100mhz;
+ break;
+ case MMC_TIMING_UHS_SDR104:
+diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
+index 0134ba32a057..39712560b4c1 100644
+--- a/drivers/mtd/ubi/upd.c
++++ b/drivers/mtd/ubi/upd.c
+@@ -148,11 +148,11 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
+ return err;
+ }
+
+- if (bytes == 0) {
+- err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL);
+- if (err)
+- return err;
++ err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL);
++ if (err)
++ return err;
+
++ if (bytes == 0) {
+ err = clear_update_marker(ubi, vol, 0);
+ if (err)
+ return err;
+diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
+index 7ea8a3393936..54a7d078a3a8 100644
+--- a/fs/cifs/cifsglob.h
++++ b/fs/cifs/cifsglob.h
+@@ -933,7 +933,6 @@ struct cifs_tcon {
+ bool use_persistent:1; /* use persistent instead of durable handles */
+ #ifdef CONFIG_CIFS_SMB2
+ bool print:1; /* set if connection to printer share */
+- bool bad_network_name:1; /* set if ret status STATUS_BAD_NETWORK_NAME */
+ __le32 capabilities;
+ __u32 share_flags;
+ __u32 maximal_access;
+diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
+index fc537c29044e..87b87e091e8e 100644
+--- a/fs/cifs/smb1ops.c
++++ b/fs/cifs/smb1ops.c
+@@ -1015,6 +1015,15 @@ cifs_dir_needs_close(struct cifsFileInfo *cfile)
+ return !cfile->srch_inf.endOfSearch && !cfile->invalidHandle;
+ }
+
++static bool
++cifs_can_echo(struct TCP_Server_Info *server)
++{
++ if (server->tcpStatus == CifsGood)
++ return true;
++
++ return false;
++}
++
+ struct smb_version_operations smb1_operations = {
+ .send_cancel = send_nt_cancel,
+ .compare_fids = cifs_compare_fids,
+@@ -1049,6 +1058,7 @@ struct smb_version_operations smb1_operations = {
+ .get_dfs_refer = CIFSGetDFSRefer,
+ .qfs_tcon = cifs_qfs_tcon,
+ .is_path_accessible = cifs_is_path_accessible,
++ .can_echo = cifs_can_echo,
+ .query_path_info = cifs_query_path_info,
+ .query_file_info = cifs_query_file_info,
+ .get_srv_inum = cifs_get_srv_inum,
+diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
+index 7080dac3592c..802185386851 100644
+--- a/fs/cifs/smb2pdu.c
++++ b/fs/cifs/smb2pdu.c
+@@ -1084,9 +1084,6 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
+ else
+ return -EIO;
+
+- if (tcon && tcon->bad_network_name)
+- return -ENOENT;
+-
+ if ((tcon && tcon->seal) &&
+ ((ses->server->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) == 0)) {
+ cifs_dbg(VFS, "encryption requested but no server support");
+@@ -1188,8 +1185,6 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, const char *tree,
+ tcon_error_exit:
+ if (rsp->hdr.Status == STATUS_BAD_NETWORK_NAME) {
+ cifs_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree);
+- if (tcon)
+- tcon->bad_network_name = true;
+ }
+ goto tcon_exit;
+ }
+diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
+index 528369f3e472..beaddaf52fba 100644
+--- a/fs/ubifs/dir.c
++++ b/fs/ubifs/dir.c
+@@ -748,6 +748,11 @@ static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
+ goto out_fname;
+
+ lock_2_inodes(dir, inode);
++
++ /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */
++ if (inode->i_nlink == 0)
++ ubifs_delete_orphan(c, inode->i_ino);
++
+ inc_nlink(inode);
+ ihold(inode);
+ inode->i_ctime = ubifs_current_time(inode);
+@@ -768,6 +773,8 @@ static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
+ dir->i_size -= sz_change;
+ dir_ui->ui_size = dir->i_size;
+ drop_nlink(inode);
++ if (inode->i_nlink == 0)
++ ubifs_add_orphan(c, inode->i_ino);
+ unlock_2_inodes(dir, inode);
+ ubifs_release_budget(c, &req);
+ iput(inode);
+@@ -1316,9 +1323,6 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
+ unsigned int uninitialized_var(saved_nlink);
+ struct fscrypt_name old_nm, new_nm;
+
+- if (flags & ~RENAME_NOREPLACE)
+- return -EINVAL;
+-
+ /*
+ * Budget request settings: deletion direntry, new direntry, removing
+ * the old inode, and changing old and new parent directory inodes.
+diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
+index 8df48ccb8af6..79172c35c2b2 100644
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -3404,11 +3404,23 @@ EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
+ int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
+ {
+ struct ring_buffer_per_cpu *cpu_buffer;
++ struct buffer_page *reader;
++ struct buffer_page *head_page;
++ struct buffer_page *commit_page;
++ unsigned commit;
+
+ cpu_buffer = iter->cpu_buffer;
+
+- return iter->head_page == cpu_buffer->commit_page &&
+- iter->head == rb_commit_index(cpu_buffer);
++ /* Remember, trace recording is off when iterator is in use */
++ reader = cpu_buffer->reader_page;
++ head_page = cpu_buffer->head_page;
++ commit_page = cpu_buffer->commit_page;
++ commit = rb_page_commit(commit_page);
++
++ return ((iter->head_page == commit_page && iter->head == commit) ||
++ (iter->head_page == reader && commit_page == head_page &&
++ head_page->read == commit &&
++ iter->head == rb_page_commit(cpu_buffer->reader_page)));
+ }
+ EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
+
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 6ee340a43f18..f76ff14be517 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -6740,11 +6740,13 @@ ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
+ return ret;
+
+ out_reg:
+- ret = register_ftrace_function_probe(glob, ops, count);
++ ret = alloc_snapshot(&global_trace);
++ if (ret < 0)
++ goto out;
+
+- if (ret >= 0)
+- alloc_snapshot(&global_trace);
++ ret = register_ftrace_function_probe(glob, ops, count);
+
++ out:
+ return ret < 0 ? ret : 0;
+ }
+
+diff --git a/mm/migrate.c b/mm/migrate.c
+index 87f4d0f81819..c509a92639f6 100644
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -183,9 +183,9 @@ void putback_movable_pages(struct list_head *l)
+ unlock_page(page);
+ put_page(page);
+ } else {
+- putback_lru_page(page);
+ dec_node_page_state(page, NR_ISOLATED_ANON +
+ page_is_file_cache(page));
++ putback_lru_page(page);
+ }
+ }
+ }
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 1109e60e9121..03476694a7c8 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -208,6 +208,51 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
+ return len;
+ }
+
++static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
++ struct sk_buff *skb,
++ int rtap_vendor_space)
++{
++ struct {
++ struct ieee80211_hdr_3addr hdr;
++ u8 category;
++ u8 action_code;
++ } __packed action;
++
++ if (!sdata)
++ return;
++
++ BUILD_BUG_ON(sizeof(action) != IEEE80211_MIN_ACTION_SIZE + 1);
++
++ if (skb->len < rtap_vendor_space + sizeof(action) +
++ VHT_MUMIMO_GROUPS_DATA_LEN)
++ return;
++
++ if (!is_valid_ether_addr(sdata->u.mntr.mu_follow_addr))
++ return;
++
++ skb_copy_bits(skb, rtap_vendor_space, &action, sizeof(action));
++
++ if (!ieee80211_is_action(action.hdr.frame_control))
++ return;
++
++ if (action.category != WLAN_CATEGORY_VHT)
++ return;
++
++ if (action.action_code != WLAN_VHT_ACTION_GROUPID_MGMT)
++ return;
++
++ if (!ether_addr_equal(action.hdr.addr1, sdata->u.mntr.mu_follow_addr))
++ return;
++
++ skb = skb_copy(skb, GFP_ATOMIC);
++ if (!skb)
++ return;
++
++ skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
++ skb_queue_tail(&sdata->skb_queue, skb);
++ ieee80211_queue_work(&sdata->local->hw, &sdata->work);
++}
++
+ /*
+ * ieee80211_add_rx_radiotap_header - add radiotap header
+ *
+@@ -515,7 +560,6 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
+ struct net_device *prev_dev = NULL;
+ int present_fcs_len = 0;
+ unsigned int rtap_vendor_space = 0;
+- struct ieee80211_mgmt *mgmt;
+ struct ieee80211_sub_if_data *monitor_sdata =
+ rcu_dereference(local->monitor_sdata);
+
+@@ -553,6 +597,8 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
+ return remove_monitor_info(local, origskb, rtap_vendor_space);
+ }
+
++ ieee80211_handle_mu_mimo_mon(monitor_sdata, origskb, rtap_vendor_space);
++
+ /* room for the radiotap header based on driver features */
+ rt_hdrlen = ieee80211_rx_radiotap_hdrlen(local, status, origskb);
+ needed_headroom = rt_hdrlen - rtap_vendor_space;
+@@ -618,23 +664,6 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
+ ieee80211_rx_stats(sdata->dev, skb->len);
+ }
+
+- mgmt = (void *)skb->data;
+- if (monitor_sdata &&
+- skb->len >= IEEE80211_MIN_ACTION_SIZE + 1 + VHT_MUMIMO_GROUPS_DATA_LEN &&
+- ieee80211_is_action(mgmt->frame_control) &&
+- mgmt->u.action.category == WLAN_CATEGORY_VHT &&
+- mgmt->u.action.u.vht_group_notif.action_code == WLAN_VHT_ACTION_GROUPID_MGMT &&
+- is_valid_ether_addr(monitor_sdata->u.mntr.mu_follow_addr) &&
+- ether_addr_equal(mgmt->da, monitor_sdata->u.mntr.mu_follow_addr)) {
+- struct sk_buff *mu_skb = skb_copy(skb, GFP_ATOMIC);
+-
+- if (mu_skb) {
+- mu_skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
+- skb_queue_tail(&monitor_sdata->skb_queue, mu_skb);
+- ieee80211_queue_work(&local->hw, &monitor_sdata->work);
+- }
+- }
+-
+ if (prev_dev) {
+ skb->dev = prev_dev;
+ netif_receive_skb(skb);
+@@ -3614,6 +3643,27 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
+ !ether_addr_equal(bssid, hdr->addr1))
+ return false;
+ }
++
++ /*
++ * 802.11-2016 Table 9-26 says that for data frames, A1 must be
++ * the BSSID - we've checked that already but may have accepted
++ * the wildcard (ff:ff:ff:ff:ff:ff).
++ *
++ * It also says:
++ * The BSSID of the Data frame is determined as follows:
++ * a) If the STA is contained within an AP or is associated
++ * with an AP, the BSSID is the address currently in use
++ * by the STA contained in the AP.
++ *
++ * So we should not accept data frames with an address that's
++ * multicast.
++ *
++ * Accepting it also opens a security problem because stations
++ * could encrypt it with the GTK and inject traffic that way.
++ */
++ if (ieee80211_is_data(hdr->frame_control) && multicast)
++ return false;
++
+ return true;
+ case NL80211_IFTYPE_WDS:
+ if (bssid || !ieee80211_is_data(hdr->frame_control))
+diff --git a/security/keys/gc.c b/security/keys/gc.c
+index addf060399e0..9cb4fe4478a1 100644
+--- a/security/keys/gc.c
++++ b/security/keys/gc.c
+@@ -46,7 +46,7 @@ static unsigned long key_gc_flags;
+ * immediately unlinked.
+ */
+ struct key_type key_type_dead = {
+- .name = "dead",
++ .name = ".dead",
+ };
+
+ /*
+diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
+index 04a764f71ec8..3c7f6897fd5b 100644
+--- a/security/keys/keyctl.c
++++ b/security/keys/keyctl.c
+@@ -271,7 +271,8 @@ long keyctl_get_keyring_ID(key_serial_t id, int create)
+ * Create and join an anonymous session keyring or join a named session
+ * keyring, creating it if necessary. A named session keyring must have Search
+ * permission for it to be joined. Session keyrings without this permit will
+- * be skipped over.
++ * be skipped over. It is not permitted for userspace to create or join
++ * keyrings whose name begin with a dot.
+ *
+ * If successful, the ID of the joined session keyring will be returned.
+ */
+@@ -288,12 +289,16 @@ long keyctl_join_session_keyring(const char __user *_name)
+ ret = PTR_ERR(name);
+ goto error;
+ }
++
++ ret = -EPERM;
++ if (name[0] == '.')
++ goto error_name;
+ }
+
+ /* join the session */
+ ret = join_session_keyring(name);
++error_name:
+ kfree(name);
+-
+ error:
+ return ret;
+ }
+@@ -1251,8 +1256,8 @@ long keyctl_reject_key(key_serial_t id, unsigned timeout, unsigned error,
+ * Read or set the default keyring in which request_key() will cache keys and
+ * return the old setting.
+ *
+- * If a process keyring is specified then this will be created if it doesn't
+- * yet exist. The old setting will be returned if successful.
++ * If a thread or process keyring is specified then it will be created if it
++ * doesn't yet exist. The old setting will be returned if successful.
+ */
+ long keyctl_set_reqkey_keyring(int reqkey_defl)
+ {
+@@ -1277,11 +1282,8 @@ long keyctl_set_reqkey_keyring(int reqkey_defl)
+
+ case KEY_REQKEY_DEFL_PROCESS_KEYRING:
+ ret = install_process_keyring_to_cred(new);
+- if (ret < 0) {
+- if (ret != -EEXIST)
+- goto error;
+- ret = 0;
+- }
++ if (ret < 0)
++ goto error;
+ goto set;
+
+ case KEY_REQKEY_DEFL_DEFAULT:
+diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
+index 918cddcd4516..855b94df1126 100644
+--- a/security/keys/process_keys.c
++++ b/security/keys/process_keys.c
+@@ -127,13 +127,18 @@ int install_user_keyrings(void)
+ }
+
+ /*
+- * Install a fresh thread keyring directly to new credentials. This keyring is
+- * allowed to overrun the quota.
++ * Install a thread keyring to the given credentials struct if it didn't have
++ * one already. This is allowed to overrun the quota.
++ *
++ * Return: 0 if a thread keyring is now present; -errno on failure.
+ */
+ int install_thread_keyring_to_cred(struct cred *new)
+ {
+ struct key *keyring;
+
++ if (new->thread_keyring)
++ return 0;
++
+ keyring = keyring_alloc("_tid", new->uid, new->gid, new,
+ KEY_POS_ALL | KEY_USR_VIEW,
+ KEY_ALLOC_QUOTA_OVERRUN,
+@@ -146,7 +151,9 @@ int install_thread_keyring_to_cred(struct cred *new)
+ }
+
+ /*
+- * Install a fresh thread keyring, discarding the old one.
++ * Install a thread keyring to the current task if it didn't have one already.
++ *
++ * Return: 0 if a thread keyring is now present; -errno on failure.
+ */
+ static int install_thread_keyring(void)
+ {
+@@ -157,8 +164,6 @@ static int install_thread_keyring(void)
+ if (!new)
+ return -ENOMEM;
+
+- BUG_ON(new->thread_keyring);
+-
+ ret = install_thread_keyring_to_cred(new);
+ if (ret < 0) {
+ abort_creds(new);
+@@ -169,17 +174,17 @@ static int install_thread_keyring(void)
+ }
+
+ /*
+- * Install a process keyring directly to a credentials struct.
++ * Install a process keyring to the given credentials struct if it didn't have
++ * one already. This is allowed to overrun the quota.
+ *
+- * Returns -EEXIST if there was already a process keyring, 0 if one installed,
+- * and other value on any other error
++ * Return: 0 if a process keyring is now present; -errno on failure.
+ */
+ int install_process_keyring_to_cred(struct cred *new)
+ {
+ struct key *keyring;
+
+ if (new->process_keyring)
+- return -EEXIST;
++ return 0;
+
+ keyring = keyring_alloc("_pid", new->uid, new->gid, new,
+ KEY_POS_ALL | KEY_USR_VIEW,
+@@ -193,11 +198,9 @@ int install_process_keyring_to_cred(struct cred *new)
+ }
+
+ /*
+- * Make sure a process keyring is installed for the current process. The
+- * existing process keyring is not replaced.
++ * Install a process keyring to the current task if it didn't have one already.
+ *
+- * Returns 0 if there is a process keyring by the end of this function, some
+- * error otherwise.
++ * Return: 0 if a process keyring is now present; -errno on failure.
+ */
+ static int install_process_keyring(void)
+ {
+@@ -211,14 +214,18 @@ static int install_process_keyring(void)
+ ret = install_process_keyring_to_cred(new);
+ if (ret < 0) {
+ abort_creds(new);
+- return ret != -EEXIST ? ret : 0;
++ return ret;
+ }
+
+ return commit_creds(new);
+ }
+
+ /*
+- * Install a session keyring directly to a credentials struct.
++ * Install the given keyring as the session keyring of the given credentials
++ * struct, replacing the existing one if any. If the given keyring is NULL,
++ * then install a new anonymous session keyring.
++ *
++ * Return: 0 on success; -errno on failure.
+ */
+ int install_session_keyring_to_cred(struct cred *cred, struct key *keyring)
+ {
+@@ -253,8 +260,11 @@ int install_session_keyring_to_cred(struct cred *cred, struct key *keyring)
+ }
+
+ /*
+- * Install a session keyring, discarding the old one. If a keyring is not
+- * supplied, an empty one is invented.
++ * Install the given keyring as the session keyring of the current task,
++ * replacing the existing one if any. If the given keyring is NULL, then
++ * install a new anonymous session keyring.
++ *
++ * Return: 0 on success; -errno on failure.
+ */
+ static int install_session_keyring(struct key *keyring)
+ {
++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:28.269890110 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:28.273889546 +0200
@@ -39,6 +39,7 @@
patches.kernel.org/patch-4.10.9-10
patches.kernel.org/patch-4.10.10-11
patches.kernel.org/patch-4.10.11-12
+ patches.kernel.org/patch-4.10.12-13
########################################################
# Build fixes that apply to the vanilla kernel too.
@@ -226,6 +227,7 @@
patches.fixes/net-packet-fix-overflow-in-check-for-tp_reserve.patch
patches.fixes/tcp-fix-SCM_TIMESTAMPING_OPT_STATS-for-normal-skbs.patch
patches.fixes/tcp-mark-skbs-with-SCM_TIMESTAMPING_OPT_STATS.patch
+ patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
########################################################
# Netfilter
@@ -394,6 +396,7 @@
# Needs updating WRT d27769ec (block: add GENHD_FL_NO_PART_SCAN)
+hare patches.suse/no-partition-scan
+ patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout
########################################################
# Other drivers we have added to the tree
++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old 2017-05-02 08:54:28.325882215 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new 2017-05-02 08:54:28.329881651 +0200
@@ -1,3 +1,3 @@
-2017-04-21 13:50:25 +0200
-GIT Revision: 3043bd9db53ecc7a2fc611d0b97e506c9ee34e2e
+2017-04-27 14:23:31 +0200
+GIT Revision: e5d11ce1f407819f53d0cfc6fcda4a98700c1f9c
GIT Branch: stable
1
0