commit 075ca45bd873af9ace49b53b85f298b75e9a3151 Author: overweight <5324761+overweight@user.noreply.gitee.com> Date: Mon Sep 30 10:53:02 2019 -0400 Package init diff --git a/0001-i2c-tools-i2cbusses-Avoid-buffer-overflows-in-sysfs-.patch b/0001-i2c-tools-i2cbusses-Avoid-buffer-overflows-in-sysfs-.patch new file mode 100644 index 0000000..043177e --- /dev/null +++ b/0001-i2c-tools-i2cbusses-Avoid-buffer-overflows-in-sysfs-.patch @@ -0,0 +1,66 @@ +From def2845efacab3a3973fb0218ac5077a162f8f1e Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Thu, 2 Nov 2017 16:17:50 +0100 +Subject: [PATCH 1/3] i2c-tools: i2cbusses: Avoid buffer overflows in sysfs + paths + +sprintf isn't safe, use snprintf instead. +--- + CHANGES | 3 +++ + tools/i2cbusses.c | 10 +++++----- + 2 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/CHANGES b/CHANGES +index 15ff761..539adb0 100644 +--- a/CHANGES ++++ b/CHANGES +@@ -1,6 +1,9 @@ + i2c-tools CHANGES + ----------------- + ++master ++ tools: Fix potential buffer overflows in i2cbusses ++ + 4.0 (2017-10-30) + tools: Fix build with recent compilers (gcc 4.6+) + Add examples to the manual pages +diff --git a/tools/i2cbusses.c b/tools/i2cbusses.c +index dad22ea..cb78cc7 100644 +--- a/tools/i2cbusses.c ++++ b/tools/i2cbusses.c +@@ -220,18 +220,18 @@ struct i2c_adap *gather_i2c_busses(void) + + /* this should work for kernels 2.6.5 or higher and */ + /* is preferred because is unambiguous */ +- sprintf(n, "%s/%s/name", sysfs, de->d_name); ++ snprintf(n, NAME_MAX, "%s/%s/name", sysfs, de->d_name); + f = fopen(n, "r"); + /* this seems to work for ISA */ + if(f == NULL) { +- sprintf(n, "%s/%s/device/name", sysfs, de->d_name); ++ snprintf(n, NAME_MAX, "%s/%s/device/name", sysfs, de->d_name); + f = fopen(n, "r"); + } + /* non-ISA is much harder */ + /* and this won't find the correct bus name if a driver + has more than one bus */ + if(f == NULL) { +- sprintf(n, "%s/%s/device", sysfs, de->d_name); ++ snprintf(n, NAME_MAX, "%s/%s/device", sysfs, de->d_name); + if(!(ddir = opendir(n))) + continue; + while ((dde = readdir(ddir)) != NULL) { +@@ -240,8 +240,8 @@ struct i2c_adap *gather_i2c_busses(void) + if (!strcmp(dde->d_name, "..")) + continue; + if ((!strncmp(dde->d_name, "i2c-", 4))) { +- sprintf(n, "%s/%s/device/%s/name", +- sysfs, de->d_name, dde->d_name); ++ snprintf(n, NAME_MAX, "%s/%s/device/%s/name", ++ sysfs, de->d_name, dde->d_name); + if((f = fopen(n, "r"))) + goto found; + } +-- +2.14.3 + diff --git a/0001-libi2c-Mention-the-correct-license-in-source-files.patch b/0001-libi2c-Mention-the-correct-license-in-source-files.patch new file mode 100644 index 0000000..967e789 --- /dev/null +++ b/0001-libi2c-Mention-the-correct-license-in-source-files.patch @@ -0,0 +1,104 @@ +From fbd988b4fa3d008c5fd210a66834d1305de41f6c Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Fri, 3 Aug 2018 13:54:26 +0200 +Subject: [PATCH] libi2c: Mention the correct license in source files + +The libi2c library is released under the LGPL, not GPL, as explained +in the README file and documented in lib/Module.mk. Thanks to +Aurelien Jarno for pointing out the inconsistency. + +A little bit of history: + +The code started its life two decades ago as part of the lm-sensors +project, which was released as a whole under the GPL originally, +including the library part (libsensors). + +In 2007, I decided to split the i2c tools, which are not specific +to sensor devices, to a separate package. + +In 2009, as I was working on lm-sensors v3, I contacted all the +original authors to get their approval to release the upcoming and all +future versions of libsensors as LGPL instead, to allow wider +adoption. The proposal was accepted by all original authors. + +In 2012, I decided to turn the inlined i2c_smbus_* helper functions +into a proper library, with the intent to release it under the LGPL, +as is the common practice for libraries. As the authors of this code +is a subset of the authors of libsensors, I assumed their agreement +for libsensors could be extended to libi2c as well. This is the +reason why LGPL is mentioned in README and lib/Module.mk. + +Unfortunately, when working on the library code itself, I forgot to +update the comments in the source files. Let's fix them now. + +Signed-off-by: Jean Delvare +--- + include/i2c/smbus.h | 21 ++++++--------------- + lib/smbus.c | 16 +++------------- + 2 files changed, 9 insertions(+), 28 deletions(-) + +diff --git a/include/i2c/smbus.h b/include/i2c/smbus.h +index 18a5305..3003ed7 100644 +--- a/include/i2c/smbus.h ++++ b/include/i2c/smbus.h +@@ -1,23 +1,14 @@ + /* + smbus.h - SMBus level access helper functions + +- Copyright (C) 1995-97 Simon G. Vogl +- Copyright (C) 1998-99 Frodo Looijaard ++ Copyright (C) 1995-1997 Simon G. Vogl ++ Copyright (C) 1998-1999 Frodo Looijaard ++ Copyright (C) 2012-2017 Jean Delvare + +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or ++ This library is free software; you can redistribute it and/or modify ++ it under the terms of the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- MA 02110-1301 USA. + */ + + #ifndef LIB_I2C_SMBUS_H +diff --git a/lib/smbus.c b/lib/smbus.c +index 3a2c45a..df5a5ad 100644 +--- a/lib/smbus.c ++++ b/lib/smbus.c +@@ -5,20 +5,10 @@ + Copyright (C) 1998-1999 Frodo Looijaard + Copyright (C) 2012-2013 Jean Delvare + +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or ++ This library is free software; you can redistribute it and/or modify ++ it under the terms of the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- MA 02110-1301 USA. + */ + + #include +-- +2.14.4 + diff --git a/0002-tools-i2cbusses-Check-the-return-value-of-snprintf.patch b/0002-tools-i2cbusses-Check-the-return-value-of-snprintf.patch new file mode 100644 index 0000000..b0c88de --- /dev/null +++ b/0002-tools-i2cbusses-Check-the-return-value-of-snprintf.patch @@ -0,0 +1,87 @@ +From d062793e7aebde3ffee796dfd4180716632ae444 Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Wed, 8 Nov 2017 22:17:43 +0100 +Subject: [PATCH 2/3] tools: i2cbusses: Check the return value of snprintf +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It's very unlikely that these paths will ever be truncated, but +better safe than sorry. + +Suggested by Uwe Kleine-König. +--- + tools/i2cbusses.c | 34 ++++++++++++++++++++++++++++------ + 1 file changed, 28 insertions(+), 6 deletions(-) + +diff --git a/tools/i2cbusses.c b/tools/i2cbusses.c +index cb78cc7..41f5b6b 100644 +--- a/tools/i2cbusses.c ++++ b/tools/i2cbusses.c +@@ -137,7 +137,7 @@ struct i2c_adap *gather_i2c_busses(void) + FILE *f; + char fstype[NAME_MAX], sysfs[NAME_MAX], n[NAME_MAX]; + int foundsysfs = 0; +- int count=0; ++ int len, count = 0; + struct i2c_adap *adapters; + + adapters = calloc(BUNCH, sizeof(struct i2c_adap)); +@@ -220,18 +220,32 @@ struct i2c_adap *gather_i2c_busses(void) + + /* this should work for kernels 2.6.5 or higher and */ + /* is preferred because is unambiguous */ +- snprintf(n, NAME_MAX, "%s/%s/name", sysfs, de->d_name); ++ len = snprintf(n, NAME_MAX, "%s/%s/name", sysfs, de->d_name); ++ if (len >= NAME_MAX) { ++ fprintf(stderr, "%s: path truncated\n", n); ++ continue; ++ } + f = fopen(n, "r"); + /* this seems to work for ISA */ + if(f == NULL) { +- snprintf(n, NAME_MAX, "%s/%s/device/name", sysfs, de->d_name); ++ len = snprintf(n, NAME_MAX, "%s/%s/device/name", sysfs, ++ de->d_name); ++ if (len >= NAME_MAX) { ++ fprintf(stderr, "%s: path truncated\n", n); ++ continue; ++ } + f = fopen(n, "r"); + } + /* non-ISA is much harder */ + /* and this won't find the correct bus name if a driver + has more than one bus */ + if(f == NULL) { +- snprintf(n, NAME_MAX, "%s/%s/device", sysfs, de->d_name); ++ len = snprintf(n, NAME_MAX, "%s/%s/device", sysfs, ++ de->d_name); ++ if (len >= NAME_MAX) { ++ fprintf(stderr, "%s: path truncated\n", n); ++ continue; ++ } + if(!(ddir = opendir(n))) + continue; + while ((dde = readdir(ddir)) != NULL) { +@@ -240,8 +254,16 @@ struct i2c_adap *gather_i2c_busses(void) + if (!strcmp(dde->d_name, "..")) + continue; + if ((!strncmp(dde->d_name, "i2c-", 4))) { +- snprintf(n, NAME_MAX, "%s/%s/device/%s/name", +- sysfs, de->d_name, dde->d_name); ++ len = snprintf(n, NAME_MAX, ++ "%s/%s/device/%s/name", ++ sysfs, de->d_name, ++ dde->d_name); ++ if (len >= NAME_MAX) { ++ fprintf(stderr, ++ "%s: path truncated\n", ++ n); ++ continue; ++ } + if((f = fopen(n, "r"))) + goto found; + } +-- +2.14.3 + diff --git a/0003-py-smbus-Fix-FSF-address-in-smbusmodule.c.patch b/0003-py-smbus-Fix-FSF-address-in-smbusmodule.c.patch new file mode 100644 index 0000000..0dabed3 --- /dev/null +++ b/0003-py-smbus-Fix-FSF-address-in-smbusmodule.c.patch @@ -0,0 +1,34 @@ +From 066cc543547c7675a67f24b1281954619d300652 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= +Date: Fri, 24 Nov 2017 10:40:01 +0100 +Subject: [PATCH 3/3] py-smbus: Fix FSF address in smbusmodule.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The Free Software Foundation address was outdated. Discovered by +Fedora's rpmlint. The current address can be found at: +https://www.gnu.org/licenses/old-licenses/gpl-2.0.html#SEC4 + +Signed-off-by: Ondřej Lysoněk +--- + py-smbus/smbusmodule.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/py-smbus/smbusmodule.c b/py-smbus/smbusmodule.c +index 48a408b..b189106 100644 +--- a/py-smbus/smbusmodule.c ++++ b/py-smbus/smbusmodule.c +@@ -13,7 +13,8 @@ + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ++ * MA 02110-1301, USA. + */ + + #include +-- +2.14.3 + diff --git a/i2c-tools-4.0.tar.xz b/i2c-tools-4.0.tar.xz new file mode 100644 index 0000000..8348a96 Binary files /dev/null and b/i2c-tools-4.0.tar.xz differ diff --git a/i2c-tools.spec b/i2c-tools.spec new file mode 100644 index 0000000..f96f336 --- /dev/null +++ b/i2c-tools.spec @@ -0,0 +1,170 @@ +Name: i2c-tools +Version: 4.0 +Release: 12 +Summary: A heterogeneous set of I2C tools for Linux +License: GPLv2+ LGPLv2+ +URL: https://i2c.wiki.kernel.org/index.php/I2C_Tools +Source0: https://www.kernel.org/pub/software/utils/i2c-tools/%{name}-%{version}.tar.xz + +Patch0: 0001-i2c-tools-i2cbusses-Avoid-buffer-overflows-in-sysfs-.patch +Patch1: 0002-tools-i2cbusses-Check-the-return-value-of-snprintf.patch +Patch2: 0003-py-smbus-Fix-FSF-address-in-smbusmodule.c.patch +Patch3: 0001-libi2c-Mention-the-correct-license-in-source-files.patch + +BuildRequires: perl-generators +BuildRequires: python3-devel +BuildRequires: gcc + +Requires: systemd-udev kmod +Provides: libi2c%{?_isa} = %{version}-%{release} +Obsoletes: libi2c +Obsoletes: python2-i2c-tools + +%description +This package contains a heterogeneous set of I2C tools for Linux: a bus +probing tool, a chip dumper, register-level access helpers, EEPROM +decoding scripts, and more. + +%package devel +Summary: Development files for the I2C library +License: LGPLv2+ +Requires: libi2c%{?_isa} = %{version}-%{release} + +%description devel +%{summary}. + +%package help +Summary: i2c-tools help + +%description help +%{summary}. + +%package eepromer +Summary: Programs for reading / writing i2c / smbus eeproms +# /usr/sbin/eeprom is Public Domain, the rest is GPLv2+ +License: GPLv2+ and Public Domain +# For the device nodes +Requires: %{name} = %{version}-%{release} + +%description eepromer +Programs for reading / writing i2c / smbus eeproms. Notice that writing the +eeproms in your system is very dangerous and is likely to render your system +unusable. Do not install, let alone use this, unless you really, _really_ know +what you are doing. + +%package -n python3-i2c-tools +Summary: Python 3 bindings for Linux SMBus access through i2c-dev +License: GPLv2 +%{?python_provide:%python_provide python3-i2c-tools} +Requires: libi2c%{?_isa} = %{version}-%{release} + +%description -n python3-i2c-tools +Python 3 bindings for Linux SMBus access through i2c-dev + +%package perl +Summary: i2c tools written in Perl +License: GPLv2+ +Requires: libi2c%{?_isa} = %{version}-%{release} + +%description perl +A collection of tools written in perl for use with i2c devices. + +#Build sections +%prep +%autosetup -n %{name}-%{version} -p1 + +%build +make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" BUILD_STATIC_LIB=0 EXTRA=eeprog +pushd eepromer +make CFLAGS="$RPM_OPT_FLAGS -I../include" LDFLAGS="$RPM_LD_FLAGS" +popd +pushd py-smbus +CFLAGS="$RPM_OPT_FLAGS -I../include" LDFLAGS="$RPM_LD_FLAGS" \ + %{__python3} setup.py build -b build-py3 +popd + + +%install +%make_install prefix=%{_prefix} BUILD_STATIC_LIB=0 \ + EXTRA=eeprog libdir=%{_libdir} +install -m 755 eepromer/{eepromer,eeprom} \ + $RPM_BUILD_ROOT%{_sbindir} +install -m 644 eepromer/{eepromer,eeprom}.8 \ + $RPM_BUILD_ROOT%{_mandir}/man8 +# Rename README file +mv eepromer/README eepromer/README.programs +mv py-smbus/README py-smbus/README.py +mv eeprom/README eeprom/README.perl + +pushd py-smbus +%{__python3} setup.py build -b build-py3 install --skip-build --root=$RPM_BUILD_ROOT +popd + +# cleanup +rm -f $RPM_BUILD_ROOT%{_bindir}/decode-edid.pl +# Remove unpleasant DDC tools. KMS already exposes the EDID block in sysfs, +# and edid-decode is a more complete tool than decode-edid. +rm -f $RPM_BUILD_ROOT%{_bindir}/{ddcmon,decode-edid} + +# for i2c-dev ondemand loading through kmod +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d +echo "alias char-major-89-* i2c-dev" > \ + $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/i2c-dev.conf +# for /dev/i2c-# creation (which are needed for kmod i2c-dev autoloading) +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/udev/makedev.d +for (( i = 0 ; i < 8 ; i++ )) do + echo "i2c-$i" >> $RPM_BUILD_ROOT%{_sysconfdir}/udev/makedev.d/99-i2c-dev.nodes +done + +# auto-load i2c-dev after reboot +mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/modules-load.d +echo 'i2c-dev' > $RPM_BUILD_ROOT%{_prefix}/lib/modules-load.d/%{name}.conf + +#Install and uninstall scripts +%post +# load i2c-dev after the first install +if [ "$1" = 1 ] ; then + /usr/sbin/modprobe i2c-dev +fi +exit 0 + +%ldconfig_post -n libi2c +%ldconfig_postun -n libi2c + +%files +%license COPYING COPYING.LGPL +%config(noreplace) %{_sysconfdir}/modprobe.d/i2c-dev.conf +%config(noreplace) %{_sysconfdir}/udev/makedev.d/99-i2c-dev.nodes +%{_prefix}/lib/modules-load.d/%{name}.conf +%{_sbindir}/i2c* +%exclude %{_sbindir}/i2c-stub* +%{_libdir}/libi2c.so.0* + +%files devel +%dir %{_includedir}/i2c +%{_includedir}/i2c/smbus.h +%{_libdir}/libi2c.so + +%files help +%{_mandir}/man8/i2c*.8.gz +%{_mandir}/man8/eepro*.8.gz +%{_mandir}/man1/decode-*.1.gz +%doc CHANGES README +%doc eepromer/README* +%doc eeprog/README.eeprog +%doc py-smbus/README.py +%doc eeprom/README.perl + +%files eepromer +%{_sbindir}/eepro* + +%files -n python3-i2c-tools +%{python3_sitearch}/* + +%files perl +%{_bindir}/decode-* +%{_sbindir}/i2c-stub* + +%changelog +* Wed Sep 19 2018 openEuler Buildteam - 4.0-12 +- Package init