diff --git a/.github/workflows/check-static-glibc.yml b/.github/workflows/check-static-glibc.yml index d79e9b0d78..b295687389 100644 --- a/.github/workflows/check-static-glibc.yml +++ b/.github/workflows/check-static-glibc.yml @@ -34,5 +34,13 @@ jobs: - name: Get Python dependencies run: python3 -m pip install -r toolkit/scripts/requirements.txt + - name: Copy Azure Linux rpm + run: | + echo ########## + echo "Copy Azure Linux rpm" + echo ########## + toolkit/scripts/toolchain/toolchain_update_git_submodule.sh + shell: bash + - name: Verify .spec files run: python3 toolkit/scripts/check_static_glibc.py SPECS/**/*.spec SPECS-EXTENDED/**/*.spec SPECS-SIGNED/**/*.spec diff --git a/LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md b/LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md index 0a67ee8c87..b281a7c369 100644 --- a/LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md +++ b/LICENSES-AND-NOTICES/SPECS/LICENSES-MAP.md @@ -3,23 +3,23 @@ The Edge Microvisor Toolkit SPEC files originated from a variety of sources with | Origin | License | Specs | | --- | --- | --- | | CentOS | [MIT](https://www.centos.org/legal/#licensing-policy) | crash-ptdump-command
delve
fstrm
nodejs-nodemon
rhnlib
rt-setup
rt-tests
rtctl
tuned | -| Ceph source | [LGPL2.1](https://github.com/ceph/ceph/blob/master/COPYING-LGPL2.1) | ceph | +| Ceph source | [LGPL2.1](https://github.com/ceph/ceph/blob/master/COPYING-LGPL2.1) | | | Debian | [MIT](https://opensource.org/licenses/MIT) | prometheus-process-exporter | | DOC group source | [DOC](https://www.dre.vanderbilt.edu/~schmidt/ACE-copying.html) | ace-tao | -| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | 389-ds-base
a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
alsa-sof-firmware
amtk
amtterm
annobin
ansible-freeipa
archivemount
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
blosc
bluez
bmake
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
caddy
cairomm
calamares
capnproto
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cfitsio
cgdcbxd
chan
CharLS
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cjson
ck
clang15
cldr-emoji-annotation
clinfo
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpufrequtils
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dhcpcd
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
driverctl
dropwatch
drpm
duktape
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
erofs-utils
evemu
execstack
exempi
exiv2
expected
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fdupes
fence-virt
fetchmail
fftw
filebench
fio
firewalld
flac
flashrom
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontawesome4-fonts
fontpackages
fonts-rpm-macros
foomatic-db
freeglut
freeipmi
freeradius
freetds
freexl
fribidi
fros
frr
fsverity-utils
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fwupd
fwupd-efi
fxload
gavl
gbenchmark
gconf-editor
GConf2
gcovr
gcr
gdal
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
gi-docgen
giflib
gl-manpages
glew
glm
glog
glslang
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
gpsbabel
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hping3
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
igt-gpu-tools
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
incron
indent
infinipath-psm
inih
iniparser
intel-cmt-cat
intel-compute-runtime
intel-gmmlib
intel-igc
intel-ipsec-mb
intel-level-zero
intel-media-driver
intel-metee
intel-npu-driver
intel-opencl-clang
intel-vpl-gpu-rt
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jakarta-servlet
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
jurand
kata-containers
kde-filesystem
kde-settings
kernel-srpm-macros
kexec-tools
keybinder3
keycloak-httpd-client-install
kf
kf-kconfig
kf-kcoreaddons
kf-ki18n
kf-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libarrow
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcbor
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libclc
libcli
libcmis
libcmpiutil
libcomps
libcroco
libcxx
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbusmenu
libdc1394
libdecor
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libei
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgeotiff
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libgta
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjaylink
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
libkml
liblangtag
libldb
libldm
liblerc
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmamba
libmd
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
libnvme
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtpms
libtracecmd
libtraceevent
libtracefs
libtranslit
libucil
libunicap
libuninameslist
liburing
libusb1
libusbmuxd
libuser
libva-utils
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvirt-python
libvisio
libvisual
libvoikko
libvorbis
libvpl
libvpx
libwacom
libwebsockets
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libxcvt
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
lksctp-tools
lld15
lldpd
llvm15
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunitx
lua-rpm-macros
lua-term
luajit
lujavrite
luksmeta
lutok
lv2
lxc
lxcfs
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mandoc
mariadb
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-parent
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
mdevctl
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-demos
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip-ng
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mosh
mosquitto
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
needrestart
neon
netavark
netcdf
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-mdns
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-augeas
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp-streams
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-pp
ocaml-ppx-derivers
ocaml-ppx-here
ocaml-ppx-let
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-srpm-macros
ocaml-stdio
ocaml-stdlib-random
ocaml-topkg
ocaml-tyxml
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
ogdi
omping
opa
opal
open-vm-tools
openblas
openbox
opencc
opencl-filesystem
opencl-headers
opencryptoki
opencsd
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
paho-c
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
passim
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-COW
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Refcount
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-TreeCreate
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Match-Simple
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-IP
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Infix
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Type-Tiny
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-apcu
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-pom
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
polkit-qt-1
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus-node-exporter
ps_mem
psacct
pssh
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-apscheduler
python-archspec
python-argcomplete
python-argparse-manpage
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-backoff
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-boltons
python-breathe
python-cached_property
python-cbor2
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-libmamba-solver
python-conda-package-handling
python-conda-package-streaming
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-editables
python-elementpath
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fastjsonschema
python-fields
python-filelock
python-fixtures
python-flake8
python-flaky
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hatch-fancy-pypi-readme
python-hatch-vcs
python-hatchling
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-iniconfig
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-jsonschema-specifications
python-junit_xml
python-junitxml
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lark
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-looseversion
python-markdown
python-markdown-it-py
python-mccabe
python-mdurl
python-memcached
python-menuinst
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paho-mqtt
python-paramiko
python-pathspec
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-poetry-core
python-process-tests
python-productmd
python-prometheus_client
python-ptyprocess
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyproject-api
python-pyproject-metadata
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-flakes
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-referencing
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rich
python-rpm-generators
python-rpmautospec-core
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-shortuuid
python-should_dsl
python-simpleline
python-slip
python-smartypants
python-sniffio
python-sortedcontainers
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jquery
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sphinxygen
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-trove-classifiers
python-typing-extensions
python-typogrify
python-tzlocal
python-uamqp
python-unittest2
python-untangle
python-uritemplate
python-url-normalize
python-urwid
python-uswid
python-varlink
python-versioneer
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xlrd
python-xlsxwriter
python-xmlschema
python-xmltodict
python-yubico
python-zipp
python-zmq
python-zstandard
python-zstd
python3-mallard-ducktype
python3-pycares
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt-rpm-macros
qt5-qtconnectivity
qt5-qtsensors
qt5-qtserialport
qtbase
qtdeclarative
qtsvg
qttools
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
reproc
resource-agents
rest
rhash
rlwrap
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rr
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-scanf
rubygem-sys-filesystem
rubygem-thread_order
rusers
rust-cbindgen
s-nail
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
sdl12-compat
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
shim-unsigned-aarch64
shim-unsigned-x64
simdjson
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
spdlog
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-llvm-translator
spirv-llvm15-translator
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stress-ng
strongswan
stunnel
subscription-manager
subunit
suitesparse
SuperLU
supermin
switcheroo-control
swtpm
symlinks
sympy
sysfsutils
systemd
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
thrift
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
trace-cmd
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
umockdev
unicode-emoji
unicode-ucd
unique3
units
upower
uriparser
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vc-intrinsics
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
wget
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xdp-tools
xerces-c
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-server-Xwayland
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xpp3
xrestop
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zix
zopfli
zziplib | +| Fedora | [Fedora MIT License Declaration](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files) | 389-ds-base
a52dec
abseil-cpp
accountsservice
acpica-tools
acpid
adcli
adobe-mappings-cmap
adobe-mappings-pdf
advancecomp
adwaita-icon-theme
afflib
aide
alsa-firmware
alsa-plugins
alsa-sof-firmware
amtk
amtterm
annobin
ansible-freeipa
archivemount
arptables
arpwatch
asio
aspell
aspell-en
at
at-spi2-atk
at-spi2-core
atf
atk
atop
attr
audiofile
augeas
authbind
authd
authselect
autoconf213
avahi
babeltrace
babeltrace2
babl
baekmuk-ttf-fonts
bats
bcache-tools
biosdevname
blosc
bluez
bmake
bolt
boom-boot
booth
botan2
breezy
brotli
buildah
busybox
bwidget
byacc
ca-certificates
cachefilesd
caddy
cairomm
calamares
capnproto
capstone
catatonit
catch
catch1
cdrdao
celt051
cereal
certmonger
cfitsio
cgdcbxd
chan
CharLS
checkpolicy
checksec
chrony
cim-schema
cjkuni-uming-fonts
cjose
cjson
ck
clang15
cldr-emoji-annotation
clinfo
clucene
clutter
clutter-gst3
clutter-gtk
cmocka
cogl
collectd
colm
color-filesystem
colord
colorize
compat-lua
compiler-rt
conda
conmon
conntrack-tools
console-setup
container-exception-logger
convmv
corosync
corosync-qdevice
cpp-hocon
cppcheck
cpprest
cpptest
cpufrequtils
cpuid
criu
crypto-policies
cryptsetup
cscope
ctags
CUnit
cups
custodia
Cython
dbus-c++
dbus-python
dbxtool
dconf
dcraw
debootstrap
deltarpm
desktop-file-utils
device-mapper-persistent-data
dhcpcd
dietlibc
diffstat
ding-libs
discount
distribution-gpg-keys
dleyna-connector-dbus
dleyna-core
dmraid
dnf
dnf-plugins-core
docbook-dtds
docbook-simple
docbook-slides
docbook-style-dsssl
docbook-utils
docbook2X
docbook5-schemas
docbook5-style-xsl
dogtail
dos2unix
dotconf
dovecot
dpdk
driverctl
dropwatch
drpm
duktape
dumpet
dvd+rw-tools
dwarves
dwz
dyninst
ebtables
edac-utils
edk2
efax
efi-rpm-macros
egl-wayland
eglexternalplatform
elinks
enca
enchant
enchant2
enscript
environment-modules
erofs-utils
evemu
execstack
exempi
exiv2
expected
extra-cmake-modules
fabtests
facter
fakechroot
fakeroot
fdupes
fence-virt
fetchmail
fftw
filebench
fio
firewalld
flac
flashrom
flatbuffers
flite
fltk
fmt
fontawesome-fonts
fontawesome4-fonts
fontpackages
fonts-rpm-macros
foomatic-db
freeglut
freeipmi
freeradius
freetds
freexl
fribidi
fros
frr
fsverity-utils
fuse-overlayfs
fuse-sshfs
fuse-zip
fuse3
future
fwupd
fwupd-efi
fxload
gavl
gbenchmark
gconf-editor
GConf2
gcovr
gcr
gdal
gdisk
gdk-pixbuf2
generic-logos
genwqe-tools
geoclue2
GeoIP
GeoIP-GeoLite-data
geolite2
geos
gfs2-utils
gi-docgen
giflib
gl-manpages
glew
glm
glog
glslang
glusterfs
gnome-desktop-testing
gnome-doc-utils
gnome-icon-theme
gnome-keyring
gnu-efi
go-rpm-macros
gom
google-api-python-client
google-crosextra-caladea-fonts
google-crosextra-carlito-fonts
google-guice
google-noto-cjk-fonts
google-noto-emoji-fonts
google-roboto-slab-fonts
gphoto2
gpm
gpsbabel
graphene
graphite2
graphviz
grubby
gsettings-desktop-schemas
gsl
gsm
gspell
gssdp
gssntlmssp
gstreamer1
gstreamer1-plugins-base
gtk-vnc
gtk2
gtk3
gtkspell
gupnp
gupnp-av
gupnp-dlna
gupnp-igd
hardening-check
hdf
hdf5
heimdal
help2man
hexedit
hicolor-icon-theme
hiera
highlight
hivex
hostname
hping3
hsakmt
htop
hunspell
hunspell-af
hunspell-ar
hunspell-as
hunspell-ast
hunspell-az
hunspell-be
hunspell-bg
hunspell-bn
hunspell-br
hunspell-ca
hunspell-cop
hunspell-csb
hunspell-cv
hunspell-cy
hunspell-da
hunspell-de
hunspell-dsb
hunspell-el
hunspell-en
hunspell-eo
hunspell-es
hunspell-et
hunspell-eu
hunspell-fa
hunspell-fj
hunspell-fo
hunspell-fr
hunspell-fur
hunspell-fy
hunspell-ga
hunspell-gd
hunspell-gl
hunspell-grc
hunspell-gu
hunspell-gv
hunspell-haw
hunspell-hi
hunspell-hil
hunspell-hr
hunspell-hsb
hunspell-ht
hunspell-hu
hunspell-hy
hunspell-ia
hunspell-id
hunspell-is
hunspell-it
hunspell-kk
hunspell-km
hunspell-kn
hunspell-ko
hunspell-ku
hunspell-ky
hunspell-la
hunspell-lb
hunspell-ln
hunspell-mai
hunspell-mg
hunspell-mi
hunspell-mk
hunspell-ml
hunspell-mn
hunspell-mos
hunspell-mr
hunspell-ms
hunspell-mt
hunspell-nds
hunspell-ne
hunspell-nl
hunspell-no
hunspell-nr
hunspell-nso
hunspell-ny
hunspell-om
hunspell-or
hunspell-pa
hunspell-pl
hunspell-pt
hunspell-quh
hunspell-ro
hunspell-ru
hunspell-rw
hunspell-se
hunspell-shs
hunspell-si
hunspell-sk
hunspell-sl
hunspell-smj
hunspell-so
hunspell-sq
hunspell-sr
hunspell-sv
hunspell-sw
hunspell-ta
hunspell-te
hunspell-tet
hunspell-th
hunspell-tk
hunspell-tl
hunspell-tn
hunspell-tpi
hunspell-ts
hunspell-uk
hunspell-uz
hunspell-ve
hunspell-vi
hunspell-wa
hunspell-xh
hunspell-yi
hwdata
hwloc
hyperscan
hyperv-daemons
hyphen
hyphen-as
hyphen-bg
hyphen-bn
hyphen-ca
hyphen-da
hyphen-de
hyphen-el
hyphen-es
hyphen-fa
hyphen-fo
hyphen-fr
hyphen-ga
hyphen-gl
hyphen-grc
hyphen-gu
hyphen-hi
hyphen-hsb
hyphen-hu
hyphen-ia
hyphen-id
hyphen-is
hyphen-it
hyphen-kn
hyphen-ku
hyphen-lt
hyphen-mi
hyphen-ml
hyphen-mn
hyphen-mr
hyphen-nl
hyphen-or
hyphen-pa
hyphen-pl
hyphen-pt
hyphen-ro
hyphen-ru
hyphen-sa
hyphen-sk
hyphen-sl
hyphen-sv
hyphen-ta
hyphen-te
hyphen-tk
hyphen-uk
ibus
ibus-chewing
ibus-hangul
ibus-kkc
ibus-libzhuyin
ibus-m17n
ibus-rawcode
ibus-sayura
ibus-table
ibus-table-chinese
icc-profiles-openicc
icon-naming-utils
icoutils
iftop
igt-gpu-tools
iio-sensor-proxy
ilmbase
im-chooser
imaptest
imsettings
incron
indent
infinipath-psm
inih
iniparser
intel-cmt-cat
intel-compute-runtime
intel-gmmlib
intel-igc
intel-ipsec-mb
intel-level-zero
intel-media-driver
intel-metee
intel-npu-driver
intel-opencl-clang
intel-vpl-gpu-rt
ioping
IP2Location
ipa-pgothic-fonts
ipcalc
ipmitool
iprutils
iptraf-ng
iptstate
irssi
iscsi-initiator-utils
isns-utils
iso-codes
isomd5sum
iw
iwd
jabberpy
jakarta-servlet
jasper
javapackages-bootstrap
javapackages-tools
jbigkit
jdom2
jemalloc
jfsutils
jimtcl
jose
js-jquery
jsoncpp
Judy
jurand
kata-containers
kde-filesystem
kde-settings
kernel-srpm-macros
kexec-tools
keybinder3
keycloak-httpd-client-install
kf
kf-kconfig
kf-kcoreaddons
kf-ki18n
kf-kwidgetsaddons
kpmcore
kronosnet
ksh
kyotocabinet
kyua
ladspa
lame
langtable
lapack
lasso
latencytop
lato-fonts
lcms2
lcov
ldns
leatherman
ledmon
lensfun
leveldb
lftp
libabw
libaec
libao
libappstream-glib
libarrow
libart_lgpl
libasyncns
libatasmart
libavc1394
libblockdev
libbpf
libbsd
libburn
libbytesize
libcacard
libcanberra
libcbor
libcdio
libcdio-paranoia
libcdr
libcgroup
libchewing
libclc
libcli
libcmis
libcmpiutil
libcomps
libcroco
libcxx
libdaemon
libdap
libdatrie
libdazzle
libdbi
libdbusmenu
libdc1394
libdecor
libdeflate
libdmx
libdnf
libdrm
libdvdnav
libdvdread
libdwarf
libeasyfc
libecap
libecb
libei
libell
libEMF
libeot
libepoxy
libepubgen
libesmtp
libetonyek
libev
libevdev
libexif
libexttextcat
libfabric
libfontenc
libfreehand
libftdi
libgadu
libgdither
libgee
libgee06
libgeotiff
libgexiv2
libgit2
libgit2-glib
libglade2
libglvnd
libgovirt
libgphoto2
libgsf
libgta
libguestfs
libgusb
libgxim
libgxps
libhangul
libhugetlbfs
libibcommon
libical
libICE
libicns
libid3tag
libIDL
libidn2
libiec61883
libieee1284
libimobiledevice
libindicator
libinput
libiodbc
libipt
libiptcdata
libiscsi
libisoburn
libisofs
libjaylink
libjcat
libkcapi
libkeepalive
libkkc
libkkc-data
libkml
liblangtag
libldb
libldm
liblerc
liblockfile
liblognorm
liblouis
liblqr-1
liblzf
libmad
libmamba
libmd
libmediaart
libmicrohttpd
libmikmod
libmodman
libmodplug
libmodulemd1
libmpcdec
libmspub
libmtp
libmusicbrainz5
libmwaw
libnbd
libnet
libnetfilter_log
libnfs
libnotify
libntlm
libnumbertext
libnvme
liboauth
libodfgen
libofa
libogg
liboggz
liboil
libomxil-bellagio
libopenraw
liboping
libosinfo
libotf
libotr
libpagemaker
libpaper
libpciaccess
libpeas
libpfm
libpinyin
libplist
libpmemobj-cpp
libpng12
libpng15
libproxy
libpsm2
libpwquality
libqb
libqxp
libraqm
LibRaw
libraw1394
libreport
libreswan
librevenge
librsvg2
librx
libsamplerate
libsass
libsecret
libsemanage
libsigc++20
libsigsegv
libslirp
libSM
libsmbios
libsmi
libsndfile
libsodium
libspiro
libsrtp
libssh
libstaroffice
libstemmer
libstoragemgmt
libtdb
libteam
libtevent
libthai
libtnc
libtomcrypt
libtommath
libtpms
libtracecmd
libtraceevent
libtracefs
libtranslit
libucil
libunicap
libuninameslist
liburing
libusb1
libusbmuxd
libuser
libva-utils
libvarlink
libverto
libvirt-dbus
libvirt-glib
libvirt-java
libvisio
libvisual
libvoikko
libvorbis
libvpl
libvpx
libwacom
libwebsockets
libwnck3
libwpd
libwpe
libwpg
libwps
libwvstreams
libX11
libXau
libXaw
libxcb
libXcomposite
libxcrypt
libXcursor
libxcvt
libXdamage
libXdmcp
libXext
libxfce4util
libXfixes
libXfont2
libXft
libXi
libXinerama
libxkbcommon
libxkbfile
libxklavier
libxmlb
libXmu
libXpm
libXrandr
libXrender
libXres
libXScrnSaver
libxshmfence
libXt
libXtst
libXv
libXxf86vm
libyami
libyang
libyubikey
libzip
libzmf
lilv
linuxconsoletools
lksctp-tools
lld15
lldpd
llvm15
lockdev
logwatch
lpsolve
lrzsz
lua
lua-expat
lua-filesystem
lua-json
lua-lpeg
lua-lunitx
lua-rpm-macros
lua-term
luajit
lujavrite
luksmeta
lutok
lv2
lxc
lxcfs
lzip
lzop
m17n-db
m17n-lib
mac-robber
mailcap
mailx
malaga
malaga-suomi-voikko
mallard-rng
man-pages-cs
man-pages-es
man-pages-it
man-pages-ja
man-pages-ko
man-pages-pl
man-pages-ru
man-pages-zh-CN
mandoc
mariadb
mariadb-connector-c
mariadb-connector-odbc
marisa
maven-compiler-plugin
maven-jar-plugin
maven-parent
maven-resolver
maven-resources-plugin
maven-surefire
maven-wagon
mcelog
mcpp
mcstrans
mdadm
mdds
mdevctl
meanwhile
mecab
mecab-ipadic
media-player-info
memcached
memkind
mesa
mesa-demos
mesa-libGLU
metis
microcode_ctl
microdnf
minicom
minizip-ng
mksh
mobile-broadband-provider-info
mock
mock-core-configs
mod_auth_gssapi
mod_auth_mellon
mod_auth_openidc
mod_authnz_pam
mod_fcgid
mod_http2
mod_intercept_form_submit
mod_lookup_identity
mod_md
mod_security
mod_security_crs
mod_wsgi
mokutil
mosh
mosquitto
mpage
mrtg
mstflint
mt-st
mtdev
mtools
mtr
mtx
munge
mutt
mythes
mythes-bg
mythes-ca
mythes-cs
mythes-da
mythes-de
mythes-el
mythes-en
mythes-eo
mythes-es
mythes-fr
mythes-ga
mythes-hu
mythes-mi
mythes-ne
mythes-nl
mythes-pl
mythes-pt
mythes-ro
mythes-ru
mythes-sk
mythes-sl
mythes-sv
mythes-uk
nbd
nbdkit
needrestart
neon
netavark
netcdf
netcf
netlabel_tools
netpbm
netsniff-ng
nfs4-acl-tools
nftables
nilfs-utils
nkf
nload
nlopt
nodejs-packaging
nss-mdns
nss-pam-ldapd
nss_nis
nss_wrapper
ntfs-3g
ntfs-3g-system-compression
numad
numatop
numpy
nvml
oath-toolkit
ocaml
ocaml-alcotest
ocaml-astring
ocaml-augeas
ocaml-base
ocaml-bigarray-compat
ocaml-bisect-ppx
ocaml-calendar
ocaml-camlp-streams
ocaml-camlp5
ocaml-camomile
ocaml-cinaps
ocaml-cmdliner
ocaml-compiler-libs-janestreet
ocaml-cppo
ocaml-csexp
ocaml-csv
ocaml-ctypes
ocaml-curses
ocaml-dune
ocaml-extlib
ocaml-fileutils
ocaml-findlib
ocaml-fmt
ocaml-fpath
ocaml-gettext
ocaml-integers
ocaml-libvirt
ocaml-luv
ocaml-lwt
ocaml-markup
ocaml-mmap
ocaml-num
ocaml-ocamlbuild
ocaml-ocplib-endian
ocaml-ounit
ocaml-parsexp
ocaml-pp
ocaml-ppx-derivers
ocaml-ppx-here
ocaml-ppx-let
ocaml-ppxlib
ocaml-re
ocaml-react
ocaml-result
ocaml-seq
ocaml-sexplib
ocaml-sexplib0
ocaml-srpm-macros
ocaml-stdio
ocaml-stdlib-random
ocaml-topkg
ocaml-tyxml
ocaml-uutf
ocaml-xml-light
ocaml-zarith
ocl-icd
oddjob
ogdi
omping
opa
opal
open-vm-tools
openblas
openbox
opencc
opencl-filesystem
opencl-headers
opencryptoki
opencsd
opendnssec
OpenEXR
openjade
openjpeg2
openmpi
openobex
openoffice-lv
openrdate
opensc
openslp
opensm
opensp
openssl
openssl-ibmpkcs11
openssl-pkcs11
openwsman
optipng
orangefs
ORBit2
orc
os-prober
osinfo-db
osinfo-db-tools
overpass-fonts
p11-kit
p7zip
pacemaker
pacrunner
paho-c
pakchois
pam_krb5
pam_wrapper
papi
paps
parallel
passim
patchelf
patchutils
pbzip2
pcp
pcsc-lite
pcsc-lite-ccid
PEGTL
perl
perl-Algorithm-C3
perl-Algorithm-Diff
perl-Alien-Build
perl-Alien-pkgconf
perl-AnyEvent
perl-AnyEvent-AIO
perl-AnyEvent-BDB
perl-App-cpanminus
perl-App-FatPacker
perl-AppConfig
perl-Archive-Extract
perl-Archive-Zip
perl-Authen-SASL
perl-B-COW
perl-B-Debug
perl-B-Hooks-EndOfScope
perl-B-Hooks-OP-Check
perl-B-Keywords
perl-B-Lint
perl-bareword-filehandles
perl-BDB
perl-Bit-Vector
perl-boolean
perl-Browser-Open
perl-BSD-Resource
perl-Business-ISBN
perl-Business-ISBN-Data
perl-Bytes-Random-Secure
perl-Capture-Tiny
perl-Carp-Clan
perl-CBOR-XS
perl-Class-Accessor
perl-Class-C3
perl-Class-C3-XS
perl-Class-Data-Inheritable
perl-Class-Factory-Util
perl-Class-Inspector
perl-Class-ISA
perl-Class-Load
perl-Class-Load-XS
perl-Class-Method-Modifiers
perl-Class-Singleton
perl-Class-Tiny
perl-Class-XSAccessor
perl-Clone
perl-Color-ANSI-Util
perl-Color-RGB-Util
perl-ColorThemeBase-Static
perl-ColorThemeRole-ANSI
perl-ColorThemes-Standard
perl-ColorThemeUtil-ANSI
perl-Compress-Bzip2
perl-Compress-LZF
perl-Compress-Raw-Lzma
perl-Config-AutoConf
perl-Config-INI
perl-Config-INI-Reader-Multiline
perl-Config-IniFiles
perl-Config-Simple
perl-Config-Tiny
perl-Const-Fast
perl-Convert-ASN1
perl-Convert-Bencode
perl-Coro
perl-Coro-Multicore
perl-CPAN-Changes
perl-CPAN-DistnameInfo
perl-CPAN-Meta-Check
perl-Cpanel-JSON-XS
perl-Crypt-CBC
perl-Crypt-DES
perl-Crypt-IDEA
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Guess
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Crypt-PasswdMD5
perl-Crypt-Random-Seed
perl-CSS-Tiny
perl-Data-Dump
perl-Data-Munge
perl-Data-OptList
perl-Data-Peek
perl-Data-Section
perl-Data-UUID
perl-Date-Calc
perl-Date-ISO8601
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-Builder
perl-DateTime-Format-DateParse
perl-DateTime-Format-HTTP
perl-DateTime-Format-IBeat
perl-DateTime-Format-ISO8601
perl-DateTime-Format-Mail
perl-DateTime-Format-Strptime
perl-DateTime-Locale
perl-DateTime-TimeZone
perl-DateTime-TimeZone-SystemV
perl-DateTime-TimeZone-Tzfile
perl-DBD-MySQL
perl-Devel-CallChecker
perl-Devel-Caller
perl-Devel-CheckBin
perl-Devel-CheckLib
perl-Devel-Cycle
perl-Devel-EnforceEncapsulation
perl-Devel-GlobalDestruction
perl-Devel-GlobalDestruction-XS
perl-Devel-Hide
perl-Devel-Leak
perl-Devel-LexAlias
perl-Devel-Refcount
perl-Devel-Size
perl-Devel-StackTrace
perl-Devel-Symdump
perl-Digest-BubbleBabble
perl-Digest-CRC
perl-Digest-HMAC
perl-Digest-SHA1
perl-Dist-CheckConflicts
perl-DynaLoader-Functions
perl-Email-Address
perl-Email-Date-Format
perl-Encode-Detect
perl-Encode-EUCJPASCII
perl-Encode-IMAPUTF7
perl-Encode-Locale
perl-Env-ShellWords
perl-Error
perl-EV
perl-Eval-Closure
perl-Event
perl-Exception-Class
perl-Expect
perl-ExtUtils-Config
perl-ExtUtils-Depends
perl-ExtUtils-Helpers
perl-ExtUtils-InstallPaths
perl-ExtUtils-PkgConfig
perl-FCGI
perl-Fedora-VSP
perl-FFI-CheckLib
perl-File-BaseDir
perl-File-BOM
perl-File-chdir
perl-File-CheckTree
perl-File-Copy-Recursive
perl-File-DesktopEntry
perl-File-Find-Object
perl-File-Find-Object-Rule
perl-File-Find-Rule
perl-File-Find-Rule-Perl
perl-File-Inplace
perl-File-Listing
perl-File-MimeInfo
perl-File-pushd
perl-File-ReadBackwards
perl-File-Remove
perl-File-ShareDir
perl-File-ShareDir-Install
perl-File-Slurp
perl-File-Slurp-Tiny
perl-File-Slurper
perl-File-TreeCreate
perl-File-Type
perl-Font-TTF
perl-FreezeThaw
perl-GD
perl-GD-Barcode
perl-generators
perl-Getopt-ArgvFile
perl-gettext
perl-Graphics-ColorNamesLite-WWW
perl-GSSAPI
perl-Guard
perl-Hook-LexWrap
perl-HTML-Parser
perl-HTML-Tagset
perl-HTML-Tree
perl-HTTP-Cookies
perl-HTTP-Daemon
perl-HTTP-Date
perl-HTTP-Message
perl-HTTP-Negotiate
perl-Image-Base
perl-Image-Info
perl-Image-Xbm
perl-Image-Xpm
perl-Import-Into
perl-Importer
perl-inc-latest
perl-indirect
perl-Inline-Files
perl-IO-AIO
perl-IO-All
perl-IO-CaptureOutput
perl-IO-Compress-Lzma
perl-IO-HTML
perl-IO-Multiplex
perl-IO-SessionData
perl-IO-Socket-INET6
perl-IO-String
perl-IO-stringy
perl-IO-Tty
perl-IPC-Run
perl-IPC-Run3
perl-IPC-System-Simple
perl-JSON
perl-JSON-Color
perl-JSON-MaybeXS
perl-LDAP
perl-libnet
perl-libwww-perl
perl-libxml-perl
perl-Lingua-EN-Inflect
perl-List-MoreUtils-XS
perl-local-lib
perl-Locale-Codes
perl-Locale-Maketext-Gettext
perl-Locale-Msgfmt
perl-Locale-PO
perl-Log-Message
perl-Log-Message-Simple
perl-LWP-MediaTypes
perl-LWP-Protocol-https
perl-Mail-AuthenticationResults
perl-Mail-DKIM
perl-Mail-IMAPTalk
perl-Mail-SPF
perl-MailTools
perl-Match-Simple
perl-Math-Int64
perl-Math-Random-ISAAC
perl-MIME-Charset
perl-MIME-Lite
perl-MIME-Types
perl-Mixin-Linewise
perl-MLDBM
perl-Mock-Config
perl-Module-Build-Tiny
perl-Module-CPANfile
perl-Module-Implementation
perl-Module-Install-AuthorRequires
perl-Module-Install-AuthorTests
perl-Module-Install-AutoLicense
perl-Module-Install-GithubMeta
perl-Module-Install-ManifestSkip
perl-Module-Install-ReadmeFromPod
perl-Module-Install-ReadmeMarkdownFromPod
perl-Module-Install-Repository
perl-Module-Install-TestBase
perl-Module-Load-Util
perl-Module-Manifest
perl-Module-Manifest-Skip
perl-Module-Package
perl-Module-Package-Au
perl-Module-Pluggable
perl-Module-Runtime
perl-Module-Signature
perl-Mojolicious
perl-Moo
perl-Mozilla-CA
perl-Mozilla-LDAP
perl-MRO-Compat
perl-multidimensional
perl-namespace-autoclean
perl-namespace-clean
perl-Net-CIDR-Lite
perl-Net-Daemon
perl-Net-DNS
perl-Net-DNS-Resolver-Mock
perl-Net-DNS-Resolver-Programmable
perl-Net-HTTP
perl-Net-IMAP-Simple
perl-Net-IMAP-Simple-SSL
perl-Net-IP
perl-Net-LibIDN2
perl-Net-Patricia
perl-Net-SMTP-SSL
perl-Net-SNMP
perl-Net-Telnet
perl-Newt
perl-NNTPClient
perl-NTLM
perl-Number-Compare
perl-Object-Deadly
perl-Object-HashBase
perl-Package-Anon
perl-Package-Constants
perl-Package-DeprecationManager
perl-Package-Generator
perl-Package-Stash
perl-Package-Stash-XS
perl-PadWalker
perl-Paper-Specs
perl-PAR-Dist
perl-Parallel-Iterator
perl-Params-Classify
perl-Params-Util
perl-Params-Validate
perl-Params-ValidationCompiler
perl-Parse-PMFile
perl-Parse-RecDescent
perl-Parse-Yapp
perl-Path-Tiny
perl-Perl-Critic
perl-Perl-Critic-More
perl-Perl-Destruct-Level
perl-Perl-MinimumVersion
perl-Perl4-CoreLibs
perl-PerlIO-gzip
perl-PerlIO-utf8_strict
perl-PkgConfig-LibPkgConf
perl-Pod-Coverage
perl-Pod-Coverage-TrustPod
perl-Pod-Escapes
perl-Pod-Eventual
perl-Pod-LaTeX
perl-Pod-Markdown
perl-Pod-Parser
perl-Pod-Plainer
perl-Pod-POM
perl-Pod-Spell
perl-PPI
perl-PPI-HTML
perl-PPIx-QuoteLike
perl-PPIx-Regexp
perl-PPIx-Utilities
perl-prefork
perl-Probe-Perl
perl-Razor-Agent
perl-Readonly
perl-Readonly-XS
perl-Ref-Util
perl-Ref-Util-XS
perl-Regexp-Pattern-Perl
perl-Return-MultiLevel
perl-Role-Tiny
perl-Scope-Guard
perl-Scope-Upper
perl-SGMLSpm
perl-SNMP_Session
perl-Socket6
perl-Software-License
perl-Sort-Versions
perl-Specio
perl-Spiffy
perl-strictures
perl-String-CRC32
perl-String-Format
perl-String-ShellQuote
perl-String-Similarity
perl-Sub-Exporter
perl-Sub-Exporter-Progressive
perl-Sub-Identify
perl-Sub-Infix
perl-Sub-Info
perl-Sub-Install
perl-Sub-Name
perl-Sub-Quote
perl-Sub-Uplevel
perl-SUPER
perl-Switch
perl-Syntax-Highlight-Engine-Kate
perl-Sys-CPU
perl-Sys-MemInfo
perl-Sys-Virt
perl-Taint-Runtime
perl-Task-Weaken
perl-Term-Size-Any
perl-Term-Size-Perl
perl-Term-Table
perl-Term-UI
perl-TermReadKey
perl-Test-Base
perl-Test-ClassAPI
perl-Test-CPAN-Meta
perl-Test-CPAN-Meta-JSON
perl-Test-Deep
perl-Test-Differences
perl-Test-DistManifest
perl-Test-Distribution
perl-Test-EOL
perl-Test-Exception
perl-Test-Exit
perl-Test-FailWarnings
perl-Test-Fatal
perl-Test-File
perl-Test-File-ShareDir
perl-Test-Harness
perl-Test-HasVersion
perl-Test-InDistDir
perl-Test-Inter
perl-Test-LeakTrace
perl-Test-LongString
perl-Test-Manifest
perl-Test-Memory-Cycle
perl-Test-MinimumVersion
perl-Test-MockObject
perl-Test-MockRandom
perl-Test-Needs
perl-Test-NoTabs
perl-Test-NoWarnings
perl-Test-Object
perl-Test-Output
perl-Test-Pod
perl-Test-Pod-Coverage
perl-Test-Portability-Files
perl-Test-Requires
perl-Test-RequiresInternet
perl-Test-Script
perl-Test-Simple
perl-Test-SubCalls
perl-Test-Synopsis
perl-Test-Taint
perl-Test-TrailingSpace
perl-Test-utf8
perl-Test-Vars
perl-Test-Warn
perl-Test-Without-Module
perl-Test2-Plugin-NoWarnings
perl-Test2-Suite
perl-Test2-Tools-Explain
perl-Text-CharWidth
perl-Text-CSV_XS
perl-Text-Diff
perl-Text-Glob
perl-Text-Iconv
perl-Text-Soundex
perl-Text-Unidecode
perl-Text-WrapI18N
perl-Tie-IxHash
perl-TimeDate
perl-Tree-DAG_Node
perl-Type-Tiny
perl-Unicode-EastAsianWidth
perl-Unicode-LineBreak
perl-Unicode-Map8
perl-Unicode-String
perl-Unicode-UTF8
perl-UNIVERSAL-can
perl-UNIVERSAL-isa
perl-Unix-Syslog
perl-URI
perl-Variable-Magic
perl-Version-Requirements
perl-WWW-RobotRules
perl-XML-Catalog
perl-XML-DOM
perl-XML-Dumper
perl-XML-Filter-BufferText
perl-XML-Generator
perl-XML-Grove
perl-XML-Handler-YAWriter
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser-Lite
perl-XML-RegExp
perl-XML-SAX
perl-XML-SAX-Base
perl-XML-SAX-Writer
perl-XML-Simple
perl-XML-TokeParser
perl-XML-TreeBuilder
perl-XML-Twig
perl-XML-Writer
perl-XML-XPath
perl-XML-XPathEngine
perl-XString
perl-YAML-LibYAML
perl-YAML-PP
perl-YAML-Syck
perltidy
pesign
phodav
php
php-pear
php-pecl-apcu
php-pecl-zip
physfs
picosat
pinfo
pipewire
pixman
pkcs11-helper
pkgconf
plexus-cipher
plexus-containers
plexus-pom
plexus-sec-dispatcher
plotutils
pmdk-convert
pmix
pngcrush
pngnq
po4a
podman
poetry
policycoreutils
polkit-pkla-compat
polkit-qt-1
portreserve
postfix
potrace
powertop
ppp
pps-tools
pptp
priv_wrapper
procmail
prometheus-node-exporter
ps_mem
psacct
pssh
psutils
ptlib
publicsuffix-list
pugixml
pulseaudio
puppet
pwgen
pyatspi
pybind11
pycairo
pyelftools
pyflakes
pygobject3
PyGreSQL
pykickstart
pylint
pyparted
pyproject-rpm-macros
pyserial
python-absl-py
python-aiodns
python-aiohttp
python-alsa
python-apscheduler
python-archspec
python-argcomplete
python-argparse-manpage
python-astroid
python-astunparse
python-async-generator
python-augeas
python-azure-sdk
python-backoff
python-beautifulsoup4
python-betamax
python-blinker
python-blivet
python-boltons
python-breathe
python-cached_property
python-cbor2
python-charset-normalizer
python-cheetah
python-click
python-cmd2
python-colorama
python-CommonMark
python-conda-libmamba-solver
python-conda-package-handling
python-conda-package-streaming
python-configshell
python-cpuinfo
python-cups
python-curio
python-cytoolz
python-d2to1
python-dbus-client-gen
python-dbus-python-client-gen
python-dbus-signature-pyparsing
python-dbusmock
python-ddt
python-debtcollector
python-decorator
python-distlib
python-dmidecode
python-dns
python-dtopt
python-dulwich
python-editables
python-elementpath
python-enchant
python-entrypoints
python-ethtool
python-evdev
python-extras
python-faker
python-fasteners
python-fastjsonschema
python-fields
python-filelock
python-fixtures
python-flake8
python-flaky
python-flask
python-flit
python-flit-core
python-fluidity-sm
python-frozendict
python-funcsigs
python-gast
python-genshi
python-google-auth
python-google-auth-oauthlib
python-greenlet
python-gssapi
python-h5py
python-hatch-fancy-pypi-readme
python-hatch-vcs
python-hatchling
python-hs-dbus-signature
python-html5lib
python-httplib2
python-humanize
python-hwdata
python-importlib-metadata
python-iniconfig
python-inotify
python-into-dbus-python
python-IPy
python-iso8601
python-isodate
python-isort
python-itsdangerous
python-jsonschema-specifications
python-junit_xml
python-junitxml
python-justbases
python-justbytes
python-jwcrypto
python-jwt
python-kdcproxy
python-kerberos
python-kmod
python-kubernetes
python-lark
python-lazy-object-proxy
python-ldap
python-linux-procfs
python-lit
python-looseversion
python-markdown
python-markdown-it-py
python-mccabe
python-mdurl
python-memcached
python-menuinst
python-mimeparse
python-mock
python-monotonic
python-more-itertools
python-mpmath
python-msal
python-msrestazure
python-mutagen
python-networkx
python-nose2
python-ntlm-auth
python-oauth2client
python-openpyxl
python-openstackdocstheme
python-oslo-i18n
python-oslo-sphinx
python-paho-mqtt
python-paramiko
python-pathspec
python-pefile
python-pexpect
python-pkgconfig
python-platformdirs
python-pluggy
python-podman-api
python-poetry-core
python-process-tests
python-productmd
python-prometheus_client
python-ptyprocess
python-pycosat
python-pydbus
python-pymongo
python-PyMySQL
python-pyperclip
python-pyproject-api
python-pyproject-metadata
python-pyroute2
python-pyrsistent
python-pysocks
python-pytest-benchmark
python-pytest-cov
python-pytest-expect
python-pytest-flake8
python-pytest-flakes
python-pytest-forked
python-pytest-mock
python-pytest-relaxed
python-pytest-runner
python-pytest-subtests
python-pytest-timeout
python-pytest-xdist
python-pytoml
python-pyudev
python-pywbem
python-qrcode
python-rdflib
python-recommonmark
python-referencing
python-requests-file
python-requests-ftp
python-requests-kerberos
python-requests-mock
python-requests-oauthlib
python-requests-toolbelt
python-requests_ntlm
python-responses
python-retrying
python-rfc3986
python-rich
python-rpm-generators
python-rpmautospec-core
python-rpmfluff
python-rtslib
python-ruamel-yaml
python-ruamel-yaml-clib
python-s3transfer
python-schedutils
python-semantic_version
python-shortuuid
python-should_dsl
python-simpleline
python-slip
python-smartypants
python-sniffio
python-sortedcontainers
python-soupsieve
python-sphinx
python-sphinx-epytext
python-sphinx-theme-py3doc-enhanced
python-sphinx_rtd_theme
python-sphinxcontrib-apidoc
python-sphinxcontrib-applehelp
python-sphinxcontrib-devhelp
python-sphinxcontrib-htmlhelp
python-sphinxcontrib-httpdomain
python-sphinxcontrib-jquery
python-sphinxcontrib-jsmath
python-sphinxcontrib-qthelp
python-sphinxcontrib-serializinghtml
python-sphinxygen
python-sqlalchemy
python-suds
python-systemd
python-tempita
python-templated-dictionary
python-termcolor
python-testpath
python-testresources
python-testscenarios
python-testtools
python-tidy
python-toml
python-tomli
python-toolz
python-tornado
python-tox
python-tox-current-env
python-tqdm
python-trio
python-trove-classifiers
python-typing-extensions
python-typogrify
python-tzlocal
python-uamqp
python-unittest2
python-untangle
python-uritemplate
python-url-normalize
python-urwid
python-uswid
python-varlink
python-versioneer
python-virt-firmware
python-voluptuous
python-waitress
python-webencodings
python-webtest
python-wheel
python-whoosh
python-winrm
python-wrapt
python-xlrd
python-xlsxwriter
python-xmlschema
python-xmltodict
python-yubico
python-zipp
python-zmq
python-zstandard
python-zstd
python3-mallard-ducktype
python3-pycares
python3-pytest-asyncio
python3-typed_ast
pyusb
pywbem
pyxattr
qemu
qhull
qpdf
qperf
qr-code-generator
qt-rpm-macros
qt5-qtconnectivity
qt5-qtsensors
qt5-qtserialport
qtbase
qtdeclarative
qtsvg
qttools
quagga
quota
radvd
ragel
raptor2
rarian
rasdaemon
rasqal
rcs
rdist
rdma-core
re2
re2c
realmd
rear
recode
reproc
resource-agents
rest
rhash
rlwrap
rp-pppoe
rpm-mpi-hooks
rpmdevtools
rpmlint
rr
rtkit
rtl-sdr
ruby-augeas
rubygem-bson
rubygem-coderay
rubygem-diff-lcs
rubygem-flexmock
rubygem-hpricot
rubygem-introspection
rubygem-liquid
rubygem-maruku
rubygem-metaclass
rubygem-mongo
rubygem-mustache
rubygem-mysql2
rubygem-pkg-config
rubygem-rake
rubygem-rake-compiler
rubygem-ronn
rubygem-rouge
rubygem-rspec
rubygem-rspec-expectations
rubygem-rspec-mocks
rubygem-rspec-support
rubygem-scanf
rubygem-sys-filesystem
rubygem-thread_order
rusers
rust-cbindgen
s-nail
samba
sanlock
sassist
satyr
sbc
sblim-cim-client2
sblim-cmpi-base
sblim-cmpi-devel
sblim-cmpi-fsvol
sblim-cmpi-network
sblim-cmpi-nfsv3
sblim-cmpi-nfsv4
sblim-cmpi-params
sblim-cmpi-sysfs
sblim-cmpi-syslog
sblim-indication_helper
sblim-sfcb
sblim-sfcc
sblim-sfcCommon
sblim-testsuite
sblim-wbemcli
scl-utils
scotch
screen
scrub
sdl12-compat
SDL2
SDL_sound
sdparm
seabios
secilc
selinux-policy
serd
setools
setserial
setuptool
sgabios
sgml-common
sgpio
shared-mime-info
sharutils
shim-unsigned-aarch64
shim-unsigned-x64
simdjson
sip
sisu
skkdic
sleuthkit
slirp4netns
smartmontools
smc-tools
socket_wrapper
softhsm
sombok
sord
sos
sound-theme-freedesktop
soundtouch
sox
soxr
sparsehash
spausedd
spdlog
speex
speexdsp
spice-protocol
spice-vdagent
spirv-headers
spirv-llvm-translator
spirv-llvm15-translator
spirv-tools
splix
squashfs-tools
squid
sratom
sscg
star
startup-notification
stress-ng
strongswan
subscription-manager
subunit
suitesparse
SuperLU
supermin
switcheroo-control
swtpm
symlinks
sympy
sysfsutils
systemd
systemd-bootchart
t1lib
t1utils
taglib
tang
targetcli
tbb
tcl-pgtcl
tclx
teckit
telnet
thrift
tidy
time
tini
tinycdb
tix
tk
tlog
tmpwatch
tn5250
tofrodos
tokyocabinet
trace-cmd
tss2
ttembed
ttmkfdir
tuna
twolame
uchardet
uclibc-ng
ucpp
ucs-miscfixed-fonts
ucx
udftools
udica
udisks2
uglify-js
uid_wrapper
umockdev
unicode-emoji
unicode-ucd
unique3
units
upower
uriparser
urlview
usb_modeswitch
usb_modeswitch-data
usbguard
usbip
usbmuxd
usbredir
usermode
ustr
uthash
uuid
uw-imap
v4l-utils
vc-intrinsics
vhostmd
vino
virglrenderer
virt-p2v
virt-top
virt-what
virt-who
vmem
volume_key
vorbis-tools
vte291
vulkan-headers
vulkan-loader
watchdog
wavpack
wayland
wayland-protocols
web-assets
webrtc-audio-processing
websocketpp
wget
whois
wireguard-tools
wireless-regdb
wireshark
woff2
wordnet
words
wpebackend-fdo
wsmancli
wvdial
x3270
xapian-core
Xaw3d
xcb-proto
xcb-util
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdelta
xdg-dbus-proxy
xdg-utils
xdp-tools
xerces-c
xfconf
xfsdump
xhtml1-dtds
xkeyboard-config
xmlstarlet
xmltoman
xmvn
xorg-x11-apps
xorg-x11-drv-libinput
xorg-x11-font-utils
xorg-x11-fonts
xorg-x11-proto-devel
xorg-x11-server
xorg-x11-server-utils
xorg-x11-server-Xwayland
xorg-x11-util-macros
xorg-x11-utils
xorg-x11-xauth
xorg-x11-xbitmaps
xorg-x11-xinit
xorg-x11-xkb-utils
xorg-x11-xtrans-devel
xpp3
xrestop
xxhash
yajl
yaml-cpp
yasm
yelp-tools
yelp-xsl
ykclient
yp-tools
ypbind
ypserv
z3
zenity
zerofree
zfs-fuse
zipper
zix
zopfli
zziplib | | Fedora (Copyright Remi Collet) | [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode) | libmemcached-awesome
librabbitmq | | Fedora (ISC) | [ISC License](https://github.com/sarugaku/resolvelib/blob/main/LICENSE) | python-resolvelib | | Intel | [MIT License](/LICENSES-AND-NOTICES/LICENSE.md) | cluster-agent
device-discovery
edge-release
edge-repos
edge-rpm-macros
hardware-discovery-agent
in-band-manageability
intel-idv-services
intel-igsc
intel-lms
intel-npu-firmware
intel-xpu-smi
node-agent
nvidia-data-center-driver
os-update
otelcol-contrib
persistent-mount
platform-manageability-agent
platform-observability-agent
platform-telemetry-agent
platform-update-agent
python-snoop
reporting-agent
rpc
tink-worker
tpm-cryptsetup
tpm2-initramfs-tool | | Magnus Edenhill Open Source | [Magnus Edenhill Open Source BSD License](https://github.com/jemalloc/jemalloc/blob/dev/COPYING) | librdkafka | -| Microsoft | [Microsoft MIT License](https://github.com/microsoft/azurelinux/blob/3.0/LICENSES-AND-NOTICES/LICENSE.md) | alsa-lib
application-gateway-kubernetes-ingress
asc
azcopy
azl-otel-collector
azure-iot-sdk-c
azure-nvme-utils
azure-storage-cpp
azurelinux-image-tools
azurelinux-sysinfo
bazel
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
containerd2
coredns
dasel
debugedit
dejavu-fonts
distroless-packages
docker-buildx
docker-cli
docker-compose
doxygen
dtc
edk2-hvloader-signed
elfutils
elixir
espeak-ng
espeakup
flannel
fluent-bit
freefont
gflags
gh
go-md2man
groff
grpc
grub2-efi-binary-signed
GSL
gstreamer1
gtk-update-icon-cache
helm
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
kata-packages-uvm
keda
keras
kernel-64k-signed
kernel-hwe-signed
kernel-mshv-signed
kernel-rt
kernel-signed
kernel-uki
kernel-uki-signed
kpatch
kube-vip-cloud-provider
kubernetes
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libutempter
libuv
libvirt
libxml++
linuxptp
lld
lsb-release
ltp
lttng-consume
mm-common
moby-containerd-cc
moby-engine
msgpack
ncompress
networkd-dispatcher
nlohmann-json
nmap
ntopng
opentelemetry-cpp
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-cstruct
python-execnet
python-google-pasta
python-libclang
python-libevdev
python-logutils
python-ml-dtypes
python-namex
python-nocasedict
python-omegaconf
python-opt-einsum
python-optree
python-pecan
python-pip
python-pyrpm
python-remoto
python-repoze-lru
python-routes
python-rsa
python-setuptools
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-yamlloader
R
rabbitmq-server
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
runc
sdbus-cpp
sgx-backwards-compatibility
shim
skopeo
span-lite
sriov-network-device-plugin
SymCrypt
SymCrypt-OpenSSL
systemd-boot-signed
tardev-snapshotter
tensorflow
tinyxml2
toml11
tracelogging
umoci
usrsctp
vala
valkey
vnstat
xterm
zstd | +| Microsoft | [Microsoft MIT License](https://github.com/microsoft/azurelinux/blob/3.0/LICENSES-AND-NOTICES/LICENSE.md) | alsa-lib
application-gateway-kubernetes-ingress
asc
azcopy
azl-otel-collector
azure-iot-sdk-c
azure-nvme-utils
azure-storage-cpp
azurelinux-image-tools
azurelinux-sysinfo
bazel
bmon
bpftrace
ccache
cert-manager
cf-cli
check-restart
clamav
cloud-hypervisor
cmake-fedora
containerd2
dasel
debugedit
dejavu-fonts
distroless-packages
docker-buildx
docker-cli
docker-compose
doxygen
dtc
edk2-hvloader-signed
elfutils
elixir
espeak-ng
espeakup
expat
flannel
fluent-bit
freefont
gflags
gh
go-md2man
groff
grpc
grub2-efi-binary-signed
GSL
gstreamer1
gtk-update-icon-cache
helm
intel-pf-bb-config
ivykis
jsonbuilder
jx
kata-containers-cc
kata-packages-uvm
keda
keras
kernel-64k-signed
kernel-hwe-signed
kernel-mshv-signed
kernel-rt
kernel-signed
kernel-uki
kernel-uki-signed
kpatch
kube-vip-cloud-provider
kubernetes
libacvp
libconfini
libconfuse
libgdiplus
libmaxminddb
libmetalink
libsafec
libutempter
libuv
libvirt
libvirt-python
libxml++
linuxptp
lld
lsb-release
ltp
lttng-consume
mm-common
moby-containerd-cc
moby-engine
msgpack
ncompress
networkd-dispatcher
nlohmann-json
nmap
ntopng
opentelemetry-cpp
packer
pcaudiolib
pcre2
perl-Test-Warnings
perl-Text-Template
pigz
prebuilt-ca-certificates
prebuilt-ca-certificates-base
prometheus-adapter
python-cachetools
python-cherrypy
python-cstruct
python-execnet
python-google-pasta
python-libclang
python-libevdev
python-logutils
python-ml-dtypes
python-namex
python-nocasedict
python-omegaconf
python-opt-einsum
python-optree
python-pecan
python-pip
python-pyrpm
python-remoto
python-repoze-lru
python-routes
python-rsa
python-setuptools
python-sphinxcontrib-websupport
python-tensorboard
python-tensorboard-plugin-wit
python-yamlloader
R
rabbitmq-server
rocksdb
rubygem-addressable
rubygem-asciidoctor
rubygem-bindata
rubygem-concurrent-ruby
rubygem-connection_pool
rubygem-cool.io
rubygem-deep_merge
rubygem-digest-crc
rubygem-elastic-transport
rubygem-elasticsearch
rubygem-elasticsearch-api
rubygem-eventmachine
rubygem-excon
rubygem-faraday
rubygem-faraday-em_http
rubygem-faraday-em_synchrony
rubygem-faraday-excon
rubygem-faraday-httpclient
rubygem-faraday-multipart
rubygem-faraday-net_http
rubygem-faraday-net_http_persistent
rubygem-faraday-rack
rubygem-faraday-retry
rubygem-ffi
rubygem-fiber-local
rubygem-hirb
rubygem-hocon
rubygem-hoe
rubygem-http_parser
rubygem-httpclient
rubygem-io-event
rubygem-jmespath
rubygem-ltsv
rubygem-mini_portile2
rubygem-minitest
rubygem-mocha
rubygem-msgpack
rubygem-multi_json
rubygem-multipart-post
rubygem-net-http-persistent
rubygem-nio4r
rubygem-nokogiri
rubygem-oj
rubygem-parallel
rubygem-power_assert
rubygem-prometheus-client
rubygem-protocol-hpack
rubygem-protocol-http
rubygem-protocol-http1
rubygem-protocol-http2
rubygem-public_suffix
rubygem-puppet-resource_api
rubygem-rdiscount
rubygem-rdkafka
rubygem-rexml
rubygem-ruby-kafka
rubygem-ruby-progressbar
rubygem-rubyzip
rubygem-semantic_puppet
rubygem-serverengine
rubygem-sigdump
rubygem-strptime
rubygem-systemd-journal
rubygem-test-unit
rubygem-thor
rubygem-timers
rubygem-tzinfo
rubygem-tzinfo-data
rubygem-webhdfs
rubygem-webrick
rubygem-yajl-ruby
rubygem-zip-zip
runc
sdbus-cpp
sgx-backwards-compatibility
shim
skopeo
span-lite
sriov-network-device-plugin
stunnel
SymCrypt
SymCrypt-OpenSSL
systemd-boot-signed
tardev-snapshotter
tensorflow
tinyxml2
toml11
tracelogging
trident
umoci
usrsctp
vala
valkey
vnstat
xterm
zstd | | Netplan source | [GPLv3](https://github.com/canonical/netplan/blob/main/COPYING) | netplan | | Numad source | [LGPLv2 License](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) | numad | -| NVIDIA | [ASL 2.0 License and spec specific licenses](http://www.apache.org/licenses/LICENSE-2.0) | fwctl-signed
ibarr
ibsim
iser-signed
isert-signed
knem-modules-signed
libnvidia-container
mlnx-nfsrdma-signed
mlx-steering-dump
multiperf
nvidia-container-toolkit
ofed-docs
ofed-scripts
perftest
rshim
sockperf
xpmem-modules-signed | +| NVIDIA | [ASL 2.0 License and spec specific licenses](http://www.apache.org/licenses/LICENSE-2.0) | fwctl-signed
ibarr
ibsim
iser-signed
isert-signed
knem-modules-signed
libnvidia-container
libvma
mlnx-nfsrdma-signed
multiperf
nvidia-container-toolkit
ofed-docs
ofed-scripts
perftest
rshim
sockperf
xpmem-modules-signed | | NVIDIA (BSD) | [BSD](https://github.com/Mellanox/sockperf/blob/sockperf_v2/copying) | | | OpenEuler | [BSD-3 License](https://github.com/pytorch/pytorch/blob/master/LICENSE) | pytorch | | OpenMamba | [Openmamba GPLv2 License](https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt) | bash-completion | -| OpenSUSE | Following [openSUSE guidelines](https://en.opensuse.org/openSUSE:Specfile_guidelines#Specfile_Licensing) | ant
ant-junit
antlr
aopalliance
apache-commons-beanutils
apache-commons-cli
apache-commons-codec
apache-commons-collections
apache-commons-collections4
apache-commons-compress
apache-commons-daemon
apache-commons-dbcp
apache-commons-digester
apache-commons-httpclient
apache-commons-io
apache-commons-jexl
apache-commons-lang
apache-commons-lang3
apache-commons-logging
apache-commons-net
apache-commons-pool
apache-commons-pool2
apache-commons-validator
apache-commons-vfs2
apache-parent
args4j
atinject
base64coder
bcel
bea-stax
beust-jcommander
bsf
byaccj
cal10n
cdparanoia
cglib
cni
containerized-data-importer
cpulimit
cri-o
ecj
fillup
flux
gd
geronimo-specs
glassfish-annotation-api
gnu-getopt
gnu-regexp
golang-packaging
guava
hamcrest
hawtjni-runtime
httpcomponents-core
influx-cli
influxdb
jakarta-taglibs-standard
jansi
jarjar
java-cup
java-cup-bootstrap
javacc
javacc-bootstrap
javassist
jboss-interceptors-1.2-api
jdepend
jflex
jflex-bootstrap
jlex
jline
jna
jsch
jsoup
jsr-305
jtidy
junit
junitperf
jzlib
kubevirt
kured
libcontainers-common
libtheora
libva
libvdpau
lynx
multus
objectweb-anttask
objectweb-asm
objenesis
oro
osgi-annotation
osgi-compendium
osgi-core
patterns-ceph-containers
plexus-classworlds
plexus-interpolation
plexus-utils
proj
psl-make-dafsa
publicsuffix
qdox
regexp
relaxngDatatype
rhino
ripgrep
servletapi4
servletapi5
shapelib
slf4j
trilead-ssh2
virtiofsd
xalan-j2
xbean
xcursor-themes
xerces-j2
xml-commons-apis
xml-commons-resolver
xmldb-api
xmlrpc-c
xmlunit
xpp2
xz-java | -| Photon | [Photon License](LICENSE-PHOTON.md) and [Photon Notice](NOTICE.APACHE2).
Also see [LICENSE-EXCEPTIONS.PHOTON](LICENSE-EXCEPTIONS.PHOTON). | acl
alsa-utils
ansible
apr
apr-util
asciidoc
atftp
audit
autoconf
autoconf-archive
autofs
autogen
automake
babel
bash
bc
bcc
bind
binutils
bison
blktrace
boost
btrfs-progs
bubblewrap
build-essential
bzip2
c-ares
cairo
cassandra
cassandra-driver
cdrkit
check
chkconfig
chrpath
cifs-utils
clang
cloud-init
cloud-utils-growpart
cmake
cni-plugins
core-packages
coreutils
cpio
cppunit
cqlsh
cracklib
crash
crash-gcore-command
createrepo_c
cri-tools
cronie
curl
cyrus-sasl
cyrus-sasl-bootstrap
dbus
dbus-glib
dejagnu
device-mapper-multipath
dialog
diffutils
dkms
dmidecode
dnsmasq
docbook-dtd-xml
docbook-style-xsl
dosfstools
dracut
dstat
e2fsprogs
ed
efibootmgr
efivar
emacs
erlang
etcd
ethtool
expat
expect
fcgi
file
filesystem
findutils
flex
fontconfig
fping
freetype
fuse
gawk
gc
gcc
gdb
gdbm
gettext
git
git-lfs
glib
glib-networking
glibc
glibmm
gmp
gnome-common
gnupg2
gnuplot
gnutls
gobject-introspection
golang
golang-1.23
golang-1.24
gperf
gperftools
gpgme
gptfdisk
grep
grub2
gtest
gtk-doc
guile
gzip
haproxy
harfbuzz
haveged
hdparm
http-parser
httpd
i2c-tools
iana-etc
icu
initramfs
initscripts
inotify-tools
intltool
iotop
iperf3
iproute
ipset
iptables
iputils
ipvsadm
ipxe
irqbalance
itstool
jansson
jq
json-c
json-glib
kbd
keepalived
kernel
kernel-64k
kernel-headers
kernel-hwe
kernel-hwe-headers
kernel-ipe
kernel-lpg-innovate
kernel-uvm
keyutils
kmod
krb5
less
libaio
libarchive
libassuan
libatomic_ops
libcap
libcap-ng
libconfig
libdb
libdnet
libedit
libestr
libevent
libfastjson
libffi
libgcrypt
libgpg-error
libgssglue
libgudev
libjpeg-turbo
libksba
liblogging
libmbim
libmnl
libmodulemd
libmpc
libmspack
libndp
libnetfilter_conntrack
libnetfilter_cthelper
libnetfilter_cttimeout
libnetfilter_queue
libnfnetlink
libnftnl
libnl3
libnsl2
libpcap
libpipeline
libpng
libpsl
libqmi
librelp
librepo
librsync
libseccomp
libselinux
libsepol
libserf
libsigc++30
libsolv
libsoup
libssh2
libtalloc
libtar
libtasn1
libtiff
libtirpc
libtool
libunistring
libunwind
libusb
libwebp
libxml2
libxslt
libyaml
linux-firmware
lldb
lldpad
llvm
lm-sensors
lmdb
log4cpp
logrotate
lshw
lsof
lsscsi
ltrace
lttng-tools
lttng-ust
lvm2
lz4
lzo
m2crypto
m4
make
man-db
man-pages
maven
mc
mercurial
meson
mlocate
ModemManager
mpfr
msr-tools
mysql
nano
nasm
ncurses
ndctl
net-snmp
net-tools
nettle
newt
nfs-utils
nghttp2
nginx
ninja-build
nodejs
npth
nspr
nss
nss-altfiles
ntp
numactl
nvme-cli
oniguruma
OpenIPMI
openldap
openscap
openssh
openvswitch
ostree
pam
pango
parted
patch
pciutils
perl-Canary-Stability
perl-CGI
perl-common-sense
perl-Crypt-SSLeay
perl-DBD-SQLite
perl-DBI
perl-Exporter-Tiny
perl-File-HomeDir
perl-File-Which
perl-IO-Socket-SSL
perl-JSON-Any
perl-JSON-XS
perl-libintl-perl
perl-List-MoreUtils
perl-Module-Build
perl-Module-Install
perl-Module-ScanDeps
perl-Net-SSLeay
perl-NetAddr-IP
perl-Object-Accessor
perl-Path-Class
perl-Try-Tiny
perl-Types-Serialiser
perl-WWW-Curl
perl-XML-Parser
perl-YAML
perl-YAML-Tiny
pgbouncer
pinentry
polkit
popt
postgresql
procps-ng
protobuf
protobuf-c
psmisc
pth
pyasn1-modules
pyOpenSSL
pyparsing
pytest
python-appdirs
python-asn1crypto
python-atomicwrites
python-attrs
python-bcrypt
python-certifi
python-cffi
python-chardet
python-configobj
python-constantly
python-coverage
python-cryptography
python-daemon
python-dateutil
python-defusedxml
python-distro
python-docopt
python-docutils
python-ecdsa
python-geomet
python-gevent
python-hyperlink
python-hypothesis
python-idna
python-imagesize
python-incremental
python-iniparse
python-ipaddr
python-jinja2
python-jmespath
python-jsonpatch
python-jsonpointer
python-jsonschema
python-lockfile
python-lxml
python-mako
python-markupsafe
python-mistune
python-msgpack
python-netaddr
python-netifaces
python-ntplib
python-oauthlib
python-packaging
python-pam
python-pbr
python-ply
python-prettytable
python-psutil
python-psycopg2
python-py
python-pyasn1
python-pycodestyle
python-pycparser
python-pycurl
python-pygments
python-pynacl
python-requests
python-setuptools_scm
python-simplejson
python-six
python-snowballstemmer
python-sphinx-theme-alabaster
python-twisted
python-urllib3
python-vcversioner
python-virtualenv
python-wcwidth
python-webob
python-websocket-client
python-werkzeug
python-zope-event
python-zope-interface
python3
pytz
PyYAML
rapidjson
readline
rng-tools
rpcbind
rpcsvc-proto
rpm
rpm-ostree
rrdtool
rsync
rsyslog
ruby
rust
rust-1.75
scons
sed
sg3_utils
shadow-utils
slang
snappy
socat
sqlite
sshpass
strace
subversion
sudo
swig
syslinux
syslog-ng
sysstat
systemd-bootstrap
systemtap
tar
tboot
tcl
tcpdump
tcsh
tdnf
telegraf
texinfo
tmux
tpm2-abrmd
tpm2-pkcs11
tpm2-pytss
tpm2-tools
tpm2-tss
traceroute
tree
tzdata
unbound
unixODBC
unzip
usbutils
userspace-rcu
utf8proc
util-linux
valgrind
vim
vsftpd
WALinuxAgent
which
wpa_supplicant
xfsprogs
xinetd
xmlsec1
xmlto
xz
zchunk
zeromq
zip
zlib
zsh | +| OpenSUSE | Following [openSUSE guidelines](https://en.opensuse.org/openSUSE:Specfile_guidelines#Specfile_Licensing) | ant
ant-junit
antlr
aopalliance
apache-commons-beanutils
apache-commons-cli
apache-commons-codec
apache-commons-collections
apache-commons-collections4
apache-commons-compress
apache-commons-daemon
apache-commons-dbcp
apache-commons-digester
apache-commons-httpclient
apache-commons-io
apache-commons-jexl
apache-commons-lang
apache-commons-lang3
apache-commons-logging
apache-commons-net
apache-commons-pool
apache-commons-pool2
apache-commons-validator
apache-commons-vfs2
apache-parent
args4j
atinject
base64coder
bcel
bea-stax
beust-jcommander
bsf
byaccj
cal10n
cdparanoia
cglib
cni
containerized-data-importer
cpulimit
cri-o
ecj
fillup
flux
gd
geronimo-specs
glassfish-annotation-api
gnu-getopt
gnu-regexp
golang-packaging
guava
hamcrest
hawtjni-runtime
httpcomponents-core
influx-cli
influxdb
jakarta-taglibs-standard
jansi
jarjar
java-cup
java-cup-bootstrap
javacc
javacc-bootstrap
javassist
jboss-interceptors-1.2-api
jdepend
jflex
jflex-bootstrap
jlex
jline
jna
jsch
jsoup
jsr-305
jtidy
junit
junitperf
jzlib
kubevirt
kured
libcontainers-common
libtheora
libva
libvdpau
lynx
multus
objectweb-anttask
objectweb-asm
objenesis
oro
osgi-annotation
osgi-compendium
osgi-core
plexus-classworlds
plexus-interpolation
plexus-utils
proj
psl-make-dafsa
publicsuffix
qdox
regexp
relaxngDatatype
rhino
ripgrep
servletapi4
servletapi5
shapelib
slf4j
trilead-ssh2
virtiofsd
xalan-j2
xbean
xcursor-themes
xerces-j2
xml-commons-apis
xml-commons-resolver
xmldb-api
xmlrpc-c
xmlunit
xpp2
xz-java | +| Photon | [Photon License](LICENSE-PHOTON.md) and [Photon Notice](NOTICE.APACHE2).
Also see [LICENSE-EXCEPTIONS.PHOTON](LICENSE-EXCEPTIONS.PHOTON). | acl
alsa-utils
ansible
apr
apr-util
asciidoc
atftp
audit
autoconf
autoconf-archive
autofs
autogen
automake
babel
bash
bc
bcc
bind
binutils
bison
blktrace
boost
btrfs-progs
bubblewrap
build-essential
bzip2
c-ares
cairo
cassandra
cassandra-driver
cdrkit
check
chkconfig
chrpath
cifs-utils
clang
cloud-init
cloud-utils-growpart
cmake
cni-plugins
core-packages
coreutils
cpio
cppunit
cqlsh
cracklib
crash
crash-gcore-command
createrepo_c
cri-tools
cronie
curl
cyrus-sasl
cyrus-sasl-bootstrap
dbus
dbus-glib
dejagnu
device-mapper-multipath
dialog
diffutils
dkms
dmidecode
dnsmasq
docbook-dtd-xml
docbook-style-xsl
dosfstools
dracut
dstat
e2fsprogs
ed
efibootmgr
efivar
emacs
erlang
etcd
ethtool
expect
fcgi
file
filesystem
findutils
flex
fontconfig
fping
freetype
fuse
gawk
gc
gcc
gdb
gdbm
gettext
git
git-lfs
glib
glib-networking
glibc
glibmm
gmp
gnome-common
gnupg2
gnuplot
gnutls
gobject-introspection
golang
golang-1.22
golang-1.23
golang-1.24
golang-1.25
gperf
gperftools
gpgme
gptfdisk
grep
grub2
gtest
gtk-doc
guile
gzip
haproxy
harfbuzz
haveged
hdparm
http-parser
httpd
i2c-tools
iana-etc
icu
initramfs
initscripts
inotify-tools
intltool
iotop
iperf3
iproute
ipset
iptables
iputils
ipvsadm
ipxe
irqbalance
itstool
jansson
jq
json-c
json-glib
kbd
keepalived
kernel
kernel-64k
kernel-headers
kernel-ipe
kernel-lpg-innovate
kernel-uvm
keyutils
kmod
krb5
less
libaio
libarchive
libassuan
libatomic_ops
libcap
libcap-ng
libconfig
libdb
libdnet
libedit
libestr
libevent
libfastjson
libffi
libgcrypt
libgpg-error
libgssglue
libgudev
libjpeg-turbo
libksba
liblogging
libmbim
libmnl
libmodulemd
libmpc
libmspack
libndp
libnetfilter_conntrack
libnetfilter_cthelper
libnetfilter_cttimeout
libnetfilter_queue
libnfnetlink
libnftnl
libnl3
libnsl2
libpcap
libpipeline
libpng
libpsl
libqmi
librelp
librepo
librsync
libseccomp
libselinux
libsepol
libserf
libsigc++30
libsolv
libsoup
libssh2
libtalloc
libtar
libtasn1
libtiff
libtirpc
libtool
libunistring
libunwind
libusb
libwebp
libxml2
libxslt
libyaml
linux-firmware
lldb
lldpad
llvm
lm-sensors
lmdb
log4cpp
logrotate
lshw
lsof
lsscsi
ltrace
lttng-tools
lttng-ust
lvm2
lz4
lzo
m2crypto
m4
make
man-db
man-pages
maven
mc
mercurial
meson
mlocate
ModemManager
mpfr
msr-tools
mysql
nano
nasm
ncurses
ndctl
net-snmp
net-tools
nettle
newt
nfs-utils
nghttp2
nginx
ninja-build
nodejs
npth
nspr
nss
nss-altfiles
ntp
numactl
nvme-cli
oniguruma
OpenIPMI
openldap
openscap
openssh
openvswitch
ostree
pam
pango
parted
patch
pciutils
perl-Canary-Stability
perl-CGI
perl-common-sense
perl-Crypt-SSLeay
perl-DBD-SQLite
perl-DBI
perl-DBIx-Simple
perl-Exporter-Tiny
perl-File-HomeDir
perl-File-Which
perl-IO-Socket-SSL
perl-JSON-Any
perl-JSON-XS
perl-libintl-perl
perl-List-MoreUtils
perl-Module-Build
perl-Module-Install
perl-Module-ScanDeps
perl-Net-SSLeay
perl-NetAddr-IP
perl-Object-Accessor
perl-Path-Class
perl-Try-Tiny
perl-Types-Serialiser
perl-WWW-Curl
perl-XML-Parser
perl-YAML
perl-YAML-Tiny
pgbouncer
pinentry
polkit
popt
postgresql
procps-ng
protobuf
protobuf-c
psmisc
pth
pyasn1-modules
pyOpenSSL
pyparsing
pytest
python-appdirs
python-asn1crypto
python-atomicwrites
python-attrs
python-bcrypt
python-certifi
python-cffi
python-chardet
python-configobj
python-constantly
python-coverage
python-cryptography
python-daemon
python-dateutil
python-defusedxml
python-distro
python-docopt
python-docutils
python-ecdsa
python-geomet
python-gevent
python-hyperlink
python-hypothesis
python-idna
python-imagesize
python-incremental
python-iniparse
python-ipaddr
python-jinja2
python-jmespath
python-jsonpatch
python-jsonpointer
python-jsonschema
python-lockfile
python-lxml
python-mako
python-markupsafe
python-mistune
python-msgpack
python-netaddr
python-netifaces
python-ntplib
python-oauthlib
python-packaging
python-pam
python-pbr
python-ply
python-prettytable
python-psutil
python-psycopg2
python-py
python-pyasn1
python-pycodestyle
python-pycparser
python-pycurl
python-pygments
python-pynacl
python-requests
python-setuptools_scm
python-simplejson
python-six
python-snowballstemmer
python-sphinx-theme-alabaster
python-twisted
python-urllib3
python-vcversioner
python-virtualenv
python-wcwidth
python-webob
python-websocket-client
python-werkzeug
python-zope-event
python-zope-interface
python3
pytz
PyYAML
rapidjson
readline
rng-tools
rpcbind
rpcsvc-proto
rpm
rpm-ostree
rrdtool
rsync
rsyslog
ruby
rust
rust-1.75
scons
sed
sg3_utils
shadow-utils
slang
snappy
socat
sqlite
sshpass
strace
subversion
sudo
swig
syslinux
syslog-ng
sysstat
systemd-bootstrap
systemtap
tar
tboot
tcl
tcpdump
tcsh
tdnf
telegraf
texinfo
tmux
tpm2-abrmd
tpm2-pkcs11
tpm2-pytss
tpm2-tools
tpm2-tss
traceroute
tree
tzdata
unbound
unixODBC
unzip
usbutils
userspace-rcu
utf8proc
util-linux
valgrind
vim
vsftpd
WALinuxAgent
which
wpa_supplicant
xfsprogs
xinetd
xmlsec1
xmlto
xz
zchunk
zeromq
zip
zlib
zsh | | RPM software management source | [GPLv2+ License](https://github.com/rpm-software-management/dnf5/blob/main/COPYING.md) | dnf5 | | Source project | Same as the source project. | python-nocaselist | | Sysbench source | [GPLv2+ License](https://github.com/akopytov/sysbench/blob/master/COPYING) | sysbench | diff --git a/LICENSES-AND-NOTICES/SPECS/data/licenses.json b/LICENSES-AND-NOTICES/SPECS/data/licenses.json index c72029b8a6..12ea6b4752 100644 --- a/LICENSES-AND-NOTICES/SPECS/data/licenses.json +++ b/LICENSES-AND-NOTICES/SPECS/data/licenses.json @@ -22,9 +22,7 @@ }, "Ceph source": { "license": "[LGPL2.1](https://github.com/ceph/ceph/blob/master/COPYING-LGPL2.1)", - "specs": [ - "ceph" - ] + "specs": [] }, "Debian": { "license": "[MIT](https://opensource.org/licenses/MIT)", @@ -817,7 +815,6 @@ "libvirt-dbus", "libvirt-glib", "libvirt-java", - "libvirt-python", "libvisio", "libvisual", "libvoikko", @@ -2098,7 +2095,6 @@ "startup-notification", "stress-ng", "strongswan", - "stunnel", "subscription-manager", "subunit", "suitesparse", @@ -2334,7 +2330,6 @@ "cloud-hypervisor", "cmake-fedora", "containerd2", - "coredns", "dasel", "debugedit", "dejavu-fonts", @@ -2349,6 +2344,7 @@ "elixir", "espeak-ng", "espeakup", + "expat", "flannel", "fluent-bit", "freefont", @@ -2390,6 +2386,7 @@ "libutempter", "libuv", "libvirt", + "libvirt-python", "libxml++", "linuxptp", "lld", @@ -2523,6 +2520,7 @@ "skopeo", "span-lite", "sriov-network-device-plugin", + "stunnel", "SymCrypt", "SymCrypt-OpenSSL", "systemd-boot-signed", @@ -2531,6 +2529,7 @@ "tinyxml2", "toml11", "tracelogging", + "trident", "umoci", "usrsctp", "vala", @@ -2562,8 +2561,8 @@ "isert-signed", "knem-modules-signed", "libnvidia-container", + "libvma", "mlnx-nfsrdma-signed", - "mlx-steering-dump", "multiperf", "nvidia-container-toolkit", "ofed-docs", @@ -2685,7 +2684,6 @@ "osgi-annotation", "osgi-compendium", "osgi-core", - "patterns-ceph-containers", "plexus-classworlds", "plexus-interpolation", "plexus-utils", @@ -2795,7 +2793,6 @@ "erlang", "etcd", "ethtool", - "expat", "expect", "fcgi", "file", @@ -2825,8 +2822,10 @@ "gnutls", "gobject-introspection", "golang", + "golang-1.22", "golang-1.23", "golang-1.24", + "golang-1.25", "gperf", "gperftools", "gpgme", @@ -2869,8 +2868,6 @@ "kernel", "kernel-64k", "kernel-headers", - "kernel-hwe", - "kernel-hwe-headers", "kernel-ipe", "kernel-lpg-innovate", "kernel-uvm", @@ -3011,6 +3008,7 @@ "perl-Crypt-SSLeay", "perl-DBD-SQLite", "perl-DBI", + "perl-DBIx-Simple", "perl-Exporter-Tiny", "perl-File-HomeDir", "perl-File-Which", diff --git a/SPECS/.gitignore b/SPECS/.gitignore index 8de37795cd..04c9fcc529 100644 --- a/SPECS/.gitignore +++ b/SPECS/.gitignore @@ -14,7 +14,6 @@ acpica-tools adwaita-icon-theme afflib aide -alsa-utils annobin ansible ant @@ -83,6 +82,7 @@ ccache cdrkit ceph cereal +cert-manager check check-restart checkpolicy @@ -98,6 +98,8 @@ cloud-hypervisor cloud-utils-growpart cmake cmocka +cni +cni-plugins collectd colm color-filesystem @@ -106,7 +108,7 @@ compiler-rt conda conmon conntrack-tools -coredns +containerized-data-importer coreutils cpio cpprest @@ -152,6 +154,7 @@ docbook-dtds docbook-style-xsl docbook5-schemas docker-buildx +docker-compose dos2unix doxygen dpdk @@ -163,6 +166,7 @@ dwz e2fsprogs ebtables ed +edk2 efivar egl-wayland eglexternalplatform @@ -175,7 +179,6 @@ erofs-utils espeak-ng espeakup execstack -expat expect expected extra-cmake-modules @@ -220,10 +223,12 @@ geos gettext gflags gfs2-utils +gh giflib git glib glib-networking +glibc glibmm glslang glusterfs @@ -331,13 +336,13 @@ kata-packages-uvm kbd kde-settings keepalived +keda keras kernel-64k kernel-hwe kernel-hwe-headers kernel-srpm-macros kernel-uvm -kexec-tools keyutils kf kf-kconfig @@ -516,10 +521,10 @@ liburing libusb libuser libuv +libvma libvirt-dbus libvirt-glib libvirt-java -libvirt-python libvoikko libwacom libwebp @@ -630,6 +635,7 @@ nlohmann-json nlopt nmap nodejs +nodejs24 npth nspr nss @@ -712,6 +718,7 @@ orangefs ostree p11-kit p7zip +packer pam pam_krb5 pam_wrapper @@ -1234,6 +1241,7 @@ rubygem-webhdfs rubygem-webrick rubygem-yajl-ruby rubygem-zip-zip +runc rust sanlock scons @@ -1247,6 +1255,7 @@ sg3_utils sgabios sgml-common sgx-backwards-compatibility +skopeo shared-mime-info sharutils shim @@ -1272,7 +1281,6 @@ squid sscg sshpass strongswan -stunnel subunit subversion sudo @@ -1310,6 +1318,7 @@ trace-cmd tracelogging traceroute tree +trident ttembed tuna tuned diff --git a/SPECS/alsa-lib/CVE-2026-25068.patch b/SPECS/alsa-lib/CVE-2026-25068.patch new file mode 100644 index 0000000000..2023cf5912 --- /dev/null +++ b/SPECS/alsa-lib/CVE-2026-25068.patch @@ -0,0 +1,36 @@ +From 0bb8a3f223be367ec0db859577d15ad366f0fb48 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Thu, 29 Jan 2026 16:51:09 +0100 +Subject: [PATCH] topology: decoder - add boundary check for channel mixer + count + +Malicious binary topology file may cause heap corruption. + +CVE: CVE-2026-25068 + +Signed-off-by: Jaroslav Kysela +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/alsa-project/alsa-lib/commit/5f7fe33002d2d98d84f72e381ec2cccc0d5d3d40.patch +--- + src/topology/ctl.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/topology/ctl.c b/src/topology/ctl.c +index dd05424..311dd05 100644 +--- a/src/topology/ctl.c ++++ b/src/topology/ctl.c +@@ -1246,6 +1246,11 @@ int tplg_decode_control_mixer1(snd_tplg_t *tplg, + if (mc->num_channels > 0) { + map = tplg_calloc(heap, sizeof(*map)); + map->num_channels = mc->num_channels; ++ if (map->num_channels > SND_TPLG_MAX_CHAN || ++ map->num_channels > SND_SOC_TPLG_MAX_CHAN) { ++ SNDERR("mixer: unexpected channel count %d", map->num_channels); ++ return -EINVAL; ++ } + for (i = 0; i < map->num_channels; i++) { + map->channel[i].reg = mc->channel[i].reg; + map->channel[i].shift = mc->channel[i].shift; +-- +2.45.4 + diff --git a/SPECS/alsa-lib/alsa-lib.spec b/SPECS/alsa-lib/alsa-lib.spec index 133289292b..ca7f6ffd7f 100644 --- a/SPECS/alsa-lib/alsa-lib.spec +++ b/SPECS/alsa-lib/alsa-lib.spec @@ -3,7 +3,7 @@ Summary: ALSA library Name: alsa-lib Version: 1.2.9 -Release: 2%{?dist} +Release: 3%{?dist} License: LGPLv2+ Distribution: Edge Microvisor Toolkit Vendor: Intel Corporation @@ -11,6 +11,7 @@ Group: Applications/Internet URL: https://alsa-project.org Source0: https://www.alsa-project.org/files/pub/lib/%{name}-%{version}.tar.bz2 Source1: https://www.alsa-project.org/files/pub/lib/alsa-topology-conf-%{version_alsa_tplg}.tar.bz2 +Patch0: CVE-2026-25068.patch BuildRequires: python3-devel BuildRequires: python3-libs @@ -37,7 +38,7 @@ The Advanced Linux Sound Architecture (ALSA) topology configuration contains alsa-lib configuration of SoC topology (widgets, mixers, pipelines). %prep -%setup -q +%autosetup -p1 %build %configure @@ -68,6 +69,10 @@ tar xvjf %{SOURCE1} -C %{buildroot}/%{_datadir}/alsa --strip-components=1 --wild %{_datadir}/alsa/topology/* %changelog +* Mon Mar 16 2026 Lee Chee Yang - 1.2.9-3 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2026-25068 + * Tue Aug 26 2025 Basavaraj unniche - 1.2.9-2 - Generate alsa-topology, which is needed for alsa-sof-firmware - Initial Edge Microvisor Toolkit import from Azure Linux (license: MIT). License verified. diff --git a/SPECS/alsa-utils/alsa-utils.signatures.json b/SPECS/alsa-utils/alsa-utils.signatures.json new file mode 100644 index 0000000000..e69ee9dd32 --- /dev/null +++ b/SPECS/alsa-utils/alsa-utils.signatures.json @@ -0,0 +1,5 @@ +{ + "Signatures": { + "alsa-utils-1.2.9.tar.bz2": "e7623d4525595f92e11ce25ee9a97f2040a14c6e4dcd027aa96e06cbce7817bd" + } +} diff --git a/SPECS/alsa-utils/alsa-utils.spec b/SPECS/alsa-utils/alsa-utils.spec new file mode 100644 index 0000000000..a0d732424c --- /dev/null +++ b/SPECS/alsa-utils/alsa-utils.spec @@ -0,0 +1,70 @@ +Summary: ALSA Utilities. +Name: alsa-utils +Version: 1.2.9 +Release: 2%{?dist} +License: GPLv2+ +URL: https://alsa-project.org +Group: Applications/Internet +Vendor: Microsoft Corporation +Distribution: Azure Linux +Source0: https://www.alsa-project.org/files/pub/utils/%{name}-%{version}.tar.bz2 +Patch0: ens1371.patch +BuildRequires: alsa-lib-devel >= %{version} +BuildRequires: ncurses-devel +Requires: alsa-lib ncurses >= %{version} +%description +The ALSA Utilities package contains various utilities which are useful +for controlling your sound card. + +%prep +%setup -q +%patch 0 -p1 + +%build +%configure --disable-alsaconf --disable-xmlto +make %{?_smp_mflags} + +%install +make DESTDIR=%{buildroot} install +install -d -m 755 $RPM_BUILD_ROOT/var/lib/alsa + +%post +alsactl init +alsactl -L store + +%files +%defattr(-,root,root) +%license COPYING +%{_bindir}/* +%{_libdir}/* +%exclude %{_libdir}/debug/ +/lib/* +%{_sbindir}/* +%{_datadir}/* +%{_localstatedir}/* + +%changelog +* Fri Feb 27 2026 Andy - 1.2.9-2 +- Update Requires to remove kernel-drivers-sound + +* Fri Oct 27 2023 CBL-Mariner Servicing Account - 1.2.9-1 +- Auto-upgrade to 1.2.9 - Azure Linux 3.0 - package upgrades + +* Wed Sep 20 2023 Jon Slobodzian - 1.2.6-2 +- Recompile with stack-protection fixed gcc version (CVE-2023-4039) + +* Tue Jan 4 2022 Nicolas Guibourge 1.2.6-1 +- Update to version 1.2.6 +- License verified +* Fri May 29 2020 Andrew Phelps 1.2.2-1 +- Update to version 1.2.2 to fix CVE-2009-0035 +* Sat May 09 2020 Nick Samson 1.1.9-3 +- Added %%license line automatically +* Tue Apr 28 2020 Emre Girgin 1.1.9-2 +- Renaming linux to kernel +* Thu Mar 19 2020 Emre Girgin 1.1.9-1 +- Update version to 1.1.9. Correct license info. +* Tue Sep 03 2019 Mateusz Malisz 1.1.7-2 +- Initial CBL-Mariner import from Photon (license: Apache2). +* Mon Dec 10 2018 Alexey Makhalov 1.1.7-1 +- initial version, moved from Vivace diff --git a/SPECS/alsa-utils/ens1371.patch b/SPECS/alsa-utils/ens1371.patch new file mode 100644 index 0000000000..f11c55ba16 --- /dev/null +++ b/SPECS/alsa-utils/ens1371.patch @@ -0,0 +1,54 @@ +diff -Naur alsa-utils-1.0.29/alsactl/init/00main alsa-utils-1.0.29_/alsactl/init/00main +--- alsa-utils-1.0.29/alsactl/init/00main 2015-02-26 06:49:40.000000000 -0800 ++++ alsa-utils-1.0.29_/alsactl/init/00main 2015-06-02 09:57:23.342226526 -0700 +@@ -32,6 +32,7 @@ + # real ALSA configuration database + CARDINFO{driver}=="HDA-Intel", INCLUDE="hda", GOTO="init_end" + CARDINFO{driver}=="CA0106", INCLUDE="ca0106", GOTO="init_end" ++CARDINFO{driver}=="ENS1371", INCLUDE="ens1371", GOTO="init_end" + CARDINFO{driver}=="Test", INCLUDE="test", GOTO="init_end" + + LABEL="init_end" +diff -Naur alsa-utils-1.0.29/alsactl/init/ens1371 alsa-utils-1.0.29_/alsactl/init/ens1371 +--- alsa-utils-1.0.29/alsactl/init/ens1371 1969-12-31 16:00:00.000000000 -0800 ++++ alsa-utils-1.0.29_/alsactl/init/ens1371 2014-01-16 20:20:09.000000000 -0800 +@@ -0,0 +1,15 @@ ++# Configuration for ensoniq based cards ++ ++CARDINFO{mixername}=="Cirrus Logic CS4297A rev 3", \ ++ ATTR{subsystem_vendor}=="0x1274", ATTR{subsystem_device}=="0x1371", \ ++ GOTO="vmware-ac97" ++RESULT="false", EXIT="return" ++ ++LABEL="vmware-ac97" ++# playback ++CTL{reset}="mixer" ++CTL{name}="Master Playback Volume", CTL{value}="0dB,0dB" ++CTL{name}="Master Playback Switch", CTL{value}="on" ++CTL{name}="PCM Playback Volume", CTL{value}="51dB,51dB" ++CTL{name}="PCM Playback Switch", CTL{value}="on" ++RESULT="true", EXIT="return" +diff -Naur alsa-utils-1.0.29/alsactl/init/Makefile.am alsa-utils-1.0.29_/alsactl/init/Makefile.am +--- alsa-utils-1.0.29/alsactl/init/Makefile.am 2015-02-26 06:49:40.000000000 -0800 ++++ alsa-utils-1.0.29_/alsactl/init/Makefile.am 2015-06-02 10:50:52.732086372 -0700 +@@ -1,7 +1,7 @@ + + init_files = \ + 00main default help info test \ +- hda ca0106 ++ hda ca0106 ens1371 + EXTRA_DIST = $(init_files) + alsainitdir = $(datadir)/alsa/init + alsainit_DATA = $(init_files) +diff -Naur alsa-utils-1.0.29/alsactl/init/Makefile.in alsa-utils-1.0.29_/alsactl/init/Makefile.in +--- alsa-utils-1.0.29/alsactl/init/Makefile.in 2015-02-26 06:50:21.000000000 -0800 ++++ alsa-utils-1.0.29_/alsactl/init/Makefile.in 2015-06-02 10:50:45.164213531 -0700 +@@ -246,7 +246,7 @@ + xmlto_available = @xmlto_available@ + init_files = \ + 00main default help info test \ +- hda ca0106 ++ hda ca0106 ens1371 + + EXTRA_DIST = $(init_files) + alsainitdir = $(datadir)/alsa/init diff --git a/SPECS/caddy/CVE-2025-47911.patch b/SPECS/application-gateway-kubernetes-ingress/CVE-2025-47911.patch similarity index 59% rename from SPECS/caddy/CVE-2025-47911.patch rename to SPECS/application-gateway-kubernetes-ingress/CVE-2025-47911.patch index 7456902a12..b41a61f04a 100644 --- a/SPECS/caddy/CVE-2025-47911.patch +++ b/SPECS/application-gateway-kubernetes-ingress/CVE-2025-47911.patch @@ -1,27 +1,32 @@ -commit 59706cdaa8f95502fdec64b67b4c61d6ca58727d -Author: Roland Shoemaker -Date: Mon Sep 29 16:33:18 2025 -0700 +From 827a9738fa121994c1fc20b99872414039752e51 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit - html: impose open element stack size limit - - The HTML specification contains a number of algorithms which are - quadratic in complexity by design. Instead of adding complicated - workarounds to prevent these cases from becoming extremely expensive in - pathological cases, we impose a limit of 512 to the size of the stack of - open elements. It is extremely unlikely that non-adversarial HTML - documents will ever hit this limit (but if we see cases of this, we may - want to make the limit configurable via a ParseOption). - - Thanks to Guido Vranken and Jakub Ciolek for both independently - reporting this issue. - - Fixes CVE-2025-47911 - Fixes golang/go#75682 - - Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad - Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 - Reviewed-by: Damien Neil - LUCI-TryBot-Result: Go LUCI +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go index 04c6bec..12f2273 100644 @@ -37,7 +42,7 @@ index 04c6bec..12f2273 100644 s = s[i+1:] if _, err := w.WriteString(esc); err != nil { diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 722e927..88fc005 100644 +index bf1715b..3d3ae4a 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { @@ -90,3 +95,6 @@ index 722e927..88fc005 100644 // The input is assumed to be UTF-8 encoded. func Parse(r io.Reader) (*Node, error) { return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/caddy/CVE-2025-58190.patch b/SPECS/application-gateway-kubernetes-ingress/CVE-2025-58190.patch similarity index 71% rename from SPECS/caddy/CVE-2025-58190.patch rename to SPECS/application-gateway-kubernetes-ingress/CVE-2025-58190.patch index 9cc3618c20..89e38a9330 100644 --- a/SPECS/caddy/CVE-2025-58190.patch +++ b/SPECS/application-gateway-kubernetes-ingress/CVE-2025-58190.patch @@ -1,24 +1,28 @@ -commit 6ec8895aa5f6594da7356da7d341b98133629009 -Author: Roland Shoemaker -Date: Mon Sep 29 19:38:24 2025 -0700 +From 7adedf22a25575a212d641a5445302d47bb0b051 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec - html: align in row insertion mode with spec - - Update inRowIM to match the HTML specification. This fixes an issue - where a specific HTML document could cause the parser to enter an - infinite loop when trying to parse a and implied next to - each other. - - Fixes CVE-2025-58190 - Fixes golang/go#70179 - - Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea - Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 - LUCI-TryBot-Result: Go LUCI - Reviewed-by: Damien Neil +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 518ee4c..722e927 100644 +index 643c674..bf1715b 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { @@ -117,3 +121,6 @@ index 518ee4c..722e927 100644 default: // Ignore the token. } +-- +2.45.4 + diff --git a/SPECS/application-gateway-kubernetes-ingress/application-gateway-kubernetes-ingress.spec b/SPECS/application-gateway-kubernetes-ingress/application-gateway-kubernetes-ingress.spec index b905064b28..49dc82085f 100644 --- a/SPECS/application-gateway-kubernetes-ingress/application-gateway-kubernetes-ingress.spec +++ b/SPECS/application-gateway-kubernetes-ingress/application-gateway-kubernetes-ingress.spec @@ -2,7 +2,7 @@ Summary: Application Gateway Ingress Controller Name: application-gateway-kubernetes-ingress Version: 1.7.7 -Release: 3%{?dist} +Release: 4%{?dist} License: MIT Vendor: Microsoft Corporation Distribution: Azure Linux @@ -14,6 +14,8 @@ Source0: https://github.com/Azure/application-gateway-kubernetes-ingress/ # After fixing any possible CVE for the vendored source, we must bump v1 -> v2 Source1: %{name}-%{version}-govendor-v1.tar.gz Patch0: CVE-2025-30204.patch +Patch1: CVE-2025-47911.patch +Patch2: CVE-2025-58190.patch BuildRequires: golang >= 1.23 @@ -22,11 +24,7 @@ This is an ingress controller that can be run on Azure Kubernetes Service (AKS) to act as the ingress for an AKS cluster. %prep -%autosetup -N - -rm -rf vendor -tar -xf %{SOURCE1} --no-same-owner -%autopatch -p1 +%autosetup -p1 -a1 %build export VERSION=%{version} @@ -45,6 +43,10 @@ cp appgw-ingress %{buildroot}%{_bindir}/ %{_bindir}/appgw-ingress %changelog +* Mon Mar 16 2026 Lee Chee Yang - 1.7.7-4 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-58190, CVE-2025-47911 + * Fri Apr 28 2025 Ranjan Dutta - 1.7.7-3 - merge from Azure Linux 3.0.20250423. - Patch CVE-2025-30204 diff --git a/SPECS/busybox/CVE-2026-26157.patch b/SPECS/busybox/CVE-2026-26157.patch new file mode 100644 index 0000000000..cee37279d6 --- /dev/null +++ b/SPECS/busybox/CVE-2026-26157.patch @@ -0,0 +1,176 @@ +From 77a3ee825c430d054492b0101750b1c7ee8edf1c Mon Sep 17 00:00:00 2001 +From: AllSpark +Date: Mon, 16 Feb 2026 08:13:03 +0000 +Subject: [PATCH] tar: strip unsafe hardlink components - GNU tar does the same + +Signed-off-by: Denys Vlasenko +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: AI Backport of https://github.com/mirror/busybox/commit/3fb6b31c716669e12f75a2accd31bb7685b1a1cb.patch +--- + archival/libarchive/data_extract_all.c | 7 +++-- + archival/libarchive/get_header_tar.c | 11 ++++++-- + archival/libarchive/unsafe_prefix.c | 30 +++++++++++++++++---- + archival/libarchive/unsafe_symlink_target.c | 1 + + archival/tar.c | 2 +- + archival/unzip.c | 2 +- + include/bb_archive.h | 3 ++- + 7 files changed, 42 insertions(+), 14 deletions(-) + +diff --git a/archival/libarchive/data_extract_all.c b/archival/libarchive/data_extract_all.c +index 8a69711..b84b960 100644 +--- a/archival/libarchive/data_extract_all.c ++++ b/archival/libarchive/data_extract_all.c +@@ -66,8 +66,8 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) + } + #endif + #if ENABLE_FEATURE_PATH_TRAVERSAL_PROTECTION +- /* Strip leading "/" and up to last "/../" path component */ +- dst_name = (char *)strip_unsafe_prefix(dst_name); ++ /* Skip leading "/" and past last ".." path component */ ++ dst_name = (char *)skip_unsafe_prefix(dst_name); + #endif + // ^^^ This may be a problem if some applets do need to extract absolute names. + // (Probably will need to invent ARCHIVE_ALLOW_UNSAFE_NAME flag). +@@ -185,8 +185,7 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) + + /* To avoid a directory traversal attack via symlinks, + * do not restore symlinks with ".." components +- * or symlinks starting with "/", unless a magic +- * envvar is set. ++ * or symlinks starting with "/" + * + * For example, consider a .tar created via: + * $ tar cvf bug.tar anything.txt +diff --git a/archival/libarchive/get_header_tar.c b/archival/libarchive/get_header_tar.c +index cc6f3f0..1c40ece 100644 +--- a/archival/libarchive/get_header_tar.c ++++ b/archival/libarchive/get_header_tar.c +@@ -454,8 +454,15 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle) + #endif + + /* Everything up to and including last ".." component is stripped */ +- overlapping_strcpy(file_header->name, strip_unsafe_prefix(file_header->name)); +-//TODO: do the same for file_header->link_target? ++ strip_unsafe_prefix(file_header->name); ++ if (file_header->link_target) { ++ /* GNU tar 1.34 examples: ++ * tar: Removing leading '/' from hard link targets ++ * tar: Removing leading '../' from hard link targets ++ * tar: Removing leading 'etc/../' from hard link targets ++ */ ++ strip_unsafe_prefix(file_header->link_target); ++ } + + /* Strip trailing '/' in directories */ + /* Must be done after mode is set as '/' is used to check if it's a directory */ +diff --git a/archival/libarchive/unsafe_prefix.c b/archival/libarchive/unsafe_prefix.c +index 6670811..89a371a 100644 +--- a/archival/libarchive/unsafe_prefix.c ++++ b/archival/libarchive/unsafe_prefix.c +@@ -5,11 +5,11 @@ + #include "libbb.h" + #include "bb_archive.h" + +-const char* FAST_FUNC strip_unsafe_prefix(const char *str) ++const char* FAST_FUNC skip_unsafe_prefix(const char *str) + { + const char *cp = str; + while (1) { +- char *cp2; ++ const char *cp2; + if (*cp == '/') { + cp++; + continue; +@@ -22,10 +22,25 @@ const char* FAST_FUNC strip_unsafe_prefix(const char *str) + cp += 3; + continue; + } +- cp2 = strstr(cp, "/../"); ++ cp2 = cp; ++ find_dotdot: ++ cp2 = strstr(cp2, "/.."); + if (!cp2) +- break; +- cp = cp2 + 4; ++ break; /* No (more) malicious components */ ++ ++ /* We found "/..something" */ ++ cp2 += 3; ++ if (*cp2 != '/') { ++ if (*cp2 == '\0') { ++ /* Trailing "/..": malicious, return "" */ ++ /* (causes harmless errors trying to create or hardlink a file named "") */ ++ return cp2; ++ } ++ /* "/..name" is not malicious, look for next "/.." */ ++ goto find_dotdot; ++ } ++ /* Found "/../": malicious, advance past it */ ++ cp = cp2 + 1; + } + if (cp != str) { + static smallint warned = 0; +@@ -37,3 +52,8 @@ const char* FAST_FUNC strip_unsafe_prefix(const char *str) + } + return cp; + } ++ ++void FAST_FUNC strip_unsafe_prefix(char *str) ++{ ++ overlapping_strcpy(str, skip_unsafe_prefix(str)); ++} +diff --git a/archival/libarchive/unsafe_symlink_target.c b/archival/libarchive/unsafe_symlink_target.c +index f8dc803..d764c89 100644 +--- a/archival/libarchive/unsafe_symlink_target.c ++++ b/archival/libarchive/unsafe_symlink_target.c +@@ -36,6 +36,7 @@ void FAST_FUNC create_links_from_list(llist_t *list) + *list->data ? "hard" : "sym", + list->data + 1, target + ); ++ /* Note: GNU tar 1.34 errors out only _after_ all links are (attempted to be) created */ + } + list = list->link; + } +diff --git a/archival/tar.c b/archival/tar.c +index 9de3759..cf8c2d1 100644 +--- a/archival/tar.c ++++ b/archival/tar.c +@@ -475,7 +475,7 @@ static int FAST_FUNC writeFileToTarball(struct recursive_state *state, + DBG("writeFileToTarball('%s')", fileName); + + /* Strip leading '/' and such (must be before memorizing hardlink's name) */ +- header_name = strip_unsafe_prefix(fileName); ++ header_name = skip_unsafe_prefix(fileName); + + if (header_name[0] == '\0') + return TRUE; +diff --git a/archival/unzip.c b/archival/unzip.c +index 691a2d8..5844215 100644 +--- a/archival/unzip.c ++++ b/archival/unzip.c +@@ -853,7 +853,7 @@ int unzip_main(int argc, char **argv) + unzip_skip(zip.fmt.extra_len); + + /* Guard against "/abspath", "/../" and similar attacks */ +- overlapping_strcpy(dst_fn, strip_unsafe_prefix(dst_fn)); ++ strip_unsafe_prefix(dst_fn); + + /* Filter zip entries */ + if (find_list_entry(zreject, dst_fn) +diff --git a/include/bb_archive.h b/include/bb_archive.h +index e0ef8fc..1dc77f3 100644 +--- a/include/bb_archive.h ++++ b/include/bb_archive.h +@@ -202,7 +202,8 @@ char get_header_tar_xz(archive_handle_t *archive_handle) FAST_FUNC; + void seek_by_jump(int fd, off_t amount) FAST_FUNC; + void seek_by_read(int fd, off_t amount) FAST_FUNC; + +-const char *strip_unsafe_prefix(const char *str) FAST_FUNC; ++const char *skip_unsafe_prefix(const char *str) FAST_FUNC; ++void strip_unsafe_prefix(char *str) FAST_FUNC; + void create_or_remember_link(llist_t **link_placeholders, + const char *target, + const char *linkname, +-- +2.45.4 + diff --git a/SPECS/busybox/busybox.spec b/SPECS/busybox/busybox.spec index 98c0d919d6..cc5e50aeab 100644 --- a/SPECS/busybox/busybox.spec +++ b/SPECS/busybox/busybox.spec @@ -1,7 +1,7 @@ Summary: Statically linked binary providing simplified versions of system commands Name: busybox Version: 1.36.1 -Release: 15%{?dist} +Release: 22%{?dist} License: GPLv2 Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -16,11 +16,12 @@ Patch3: CVE-2023-42363.patch # Also Fixes CVE-2023-42364 Patch4: CVE-2023-42365.patch Patch5: CVE-2023-42366.patch -Patch6: no-cbq.patch -Patch7: CVE-2023-39810.patch -Patch8: CVE-2022-48174.patch +Patch6: CVE-2023-39810.patch +Patch7: CVE-2022-48174.patch +Patch8: CVE-2026-26157.patch +Patch99: no-cbq.patch BuildRequires: gcc -BuildRequires: glibc-static >= 2.38-12%{?dist} +BuildRequires: glibc-static >= 2.38-18%{?dist} BuildRequires: libselinux-devel >= 1.27.7-2 BuildRequires: libsepol-devel %if 0%{?with_check} @@ -92,7 +93,10 @@ install -m 644 docs/busybox.petitboot.1 %{buildroot}/%{_mandir}/man1/busybox.pet %check cd testsuite -SKIP_KNOWN_BUGS=1 ./runtest + +# CVE-2026-26157: hardened tar extraction blocks symlink + hardlink write attacks +# These tests validate insecure legacy behavior and are expected to fail +./runtest --skip "tar-symlink-attack,tar-symlink-hardlink-coexist" %files %license LICENSE @@ -107,6 +111,11 @@ SKIP_KNOWN_BUGS=1 ./runtest %{_mandir}/man1/busybox.petitboot.1.gz %changelog +* Thu Mar 12 2026 Lee Chee Yang - 1.36.1-22 +- merge from Azure Linux 3.0.20260304-3.0 +- Bump to rebuild with updated glibc +- Patch for CVE-2026-26157 + * Fri Oct 3 2025 Lee Chee Yang - 1.36.1-15 - merge from Azure Linux 3.0.20250910-3.0 - Patch CVE-2022-48174 diff --git a/SPECS/ca-certificates/ca-certificates.signatures.json b/SPECS/ca-certificates/ca-certificates.signatures.json index 73e57fe636..3c8c538f71 100644 --- a/SPECS/ca-certificates/ca-certificates.signatures.json +++ b/SPECS/ca-certificates/ca-certificates.signatures.json @@ -10,9 +10,9 @@ "README.src": "86184318d451bec55d70c84e618cbfe10c8adb7dc893964ce4aaecff99d83433", "README.usr": "0d2e90b6cf575678cd9d4f409d92258ef0d676995d4d733acdb2425309a38ff8", "bundle2pem.sh": "a61e0d9f34e21456cfe175e9a682f56959240e66dfeb75bd2457226226aa413a", - "certdata.base.txt": "8896c309aef808c7769dc630abee75adbb6bfb5c8a961461b51f845a1740ea66", + "certdata.base.txt": "4bef2bd5e4f4693c424b92a4b9862d9fa8a62a654c998a4ca8c1e82bdcd62e99", "certdata.distrusted.txt": "536b1235c5b0b3c82ddf303eca696ec164cdb21899cd9e5313d8b29ce9cdc268", - "certdata.microsoft.txt": "9c802e9f5a0bd90ba51a4f04ec1d2304a11d1cf321e4e5bdff97459b46ba3e02", + "certdata.microsoft.txt": "38cd7da10bce27751cfee01b2fdaa55f52321cdf1a408ec658bbf591b64cc484", "certdata2pem.py": "4f5848c14210758f19ab9fdc9ffd83733303a48642a3d47c4d682f904fdc0f33", "pem2bundle.sh": "f96a2f0071fb80e30332c0bd95853183f2f49a3c98d5e9fc4716aeeb001e3426", "trust-fixes": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", diff --git a/SPECS/ca-certificates/ca-certificates.spec b/SPECS/ca-certificates/ca-certificates.spec index 77c4937433..dbddafa6a3 100644 --- a/SPECS/ca-certificates/ca-certificates.spec +++ b/SPECS/ca-certificates/ca-certificates.spec @@ -47,7 +47,7 @@ Name: ca-certificates # When updating, "Epoch, "Version", AND "Release" tags must be updated in the "prebuilt-ca-certificates*" packages as well. Epoch: 1 Version: %{emt}.0.0 -Release: 11%{?dist} +Release: 14%{?dist} License: MPLv2.0 Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -340,6 +340,12 @@ rm -f %{pkidir}/tls/certs/*.{0,pem} %{_bindir}/bundle2pem.sh %changelog +* Fri Oct 3 2025 Lee Chee Yang - 1:3.0.0-14 +- merge from Azure Linux 3.0.20251206-3.0 +- Adding 2 new base CAs: 'Microsoft TLS RSA Root G2' and 'Microsoft TLS ECC Root G2'. +- Revert: Adding 2 new base CAs: 'Microsoft TLS RSA Root G2' and 'Microsoft TLS ECC Root G2'. +- Updating Microsoft trusted root CAs. + * Fri Oct 3 2025 Lee Chee Yang - 1:3.0.0-11 - merge from Azure Linux 3.0.20250910-3.0 - Adding 2 new base CAs: 'Microsoft TLS RSA Root G2' and 'Microsoft TLS ECC Root G2'. diff --git a/SPECS/ca-certificates/certdata.base.txt b/SPECS/ca-certificates/certdata.base.txt index caf5f5f5b8..fb9c22d064 100644 --- a/SPECS/ca-certificates/certdata.base.txt +++ b/SPECS/ca-certificates/certdata.base.txt @@ -3196,115 +3196,142 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Microsoft TLS ECC Root G2" +# Certificate "DigiCert Global Root CA" # -# Issuer: CN=Microsoft TLS ECC Root G2,O=Microsoft Corporation,C=US -# Serial Number:72:e2:02:2b:c5:b2:c1:b0:4d:25:05:6e:62:e2:76:79 -# Subject: CN=Microsoft TLS ECC Root G2,O=Microsoft Corporation,C=US -# Not Valid Before: Thu Apr 10 20:52:36 2025 -# Not Valid After : Tue Apr 10 20:58:59 2040 -# Fingerprint (SHA-256): 87:75:5C:FE:88:BD:B0:D1:09:9D:CD:ED:3E:AE:11:4B:A9:76:E6:64:B3:24:8E:E3:DC:64:9E:35:7F:17:E8:A7 -# Fingerprint (SHA1): F8:2B:B9:51:BA:6B:8A:85:AD:FA:75:15:02:85:60:D1:25:0E:72:37 +# Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a +# Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Fri Nov 10 00:00:00 2006 +# Not Valid After : Mon Nov 10 00:00:00 2031 +# Fingerprint (SHA-256): 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61 +# Fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft TLS ECC Root G2" +CKA_LABEL UTF8 "DigiCert Global Root CA" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\105\103\103\040\122\157\157\164 -\040\107\062 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\103\101 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\105\103\103\040\122\157\157\164 -\040\107\062 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\162\342\002\053\305\262\301\260\115\045\005\156\142\342 -\166\171 +\002\020\010\073\340\126\220\102\106\261\241\165\152\311\131\221 +\307\112 END CKA_VALUE MULTILINE_OCTAL -\060\202\002\061\060\202\001\267\240\003\002\001\002\002\020\162 -\342\002\053\305\262\301\260\115\045\005\156\142\342\166\171\060 -\012\006\010\052\206\110\316\075\004\003\003\060\121\061\013\060 -\011\006\003\125\004\006\023\002\125\123\061\036\060\034\006\003 -\125\004\012\023\025\115\151\143\162\157\163\157\146\164\040\103 -\157\162\160\157\162\141\164\151\157\156\061\042\060\040\006\003 -\125\004\003\023\031\115\151\143\162\157\163\157\146\164\040\124 -\114\123\040\105\103\103\040\122\157\157\164\040\107\062\060\036 -\027\015\062\065\060\064\061\060\062\060\065\062\063\066\132\027 -\015\064\060\060\064\061\060\062\060\065\070\065\071\132\060\121 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\036\060 -\034\006\003\125\004\012\023\025\115\151\143\162\157\163\157\146 -\164\040\103\157\162\160\157\162\141\164\151\157\156\061\042\060 -\040\006\003\125\004\003\023\031\115\151\143\162\157\163\157\146 -\164\040\124\114\123\040\105\103\103\040\122\157\157\164\040\107 -\062\060\166\060\020\006\007\052\206\110\316\075\002\001\006\005 -\053\201\004\000\042\003\142\000\004\121\302\070\204\366\153\056 -\265\355\067\026\112\345\343\327\115\000\204\073\100\124\374\011 -\346\364\305\247\246\153\126\104\116\255\140\236\025\230\216\003 -\356\342\262\315\165\075\130\144\300\026\014\337\132\334\054\235 -\100\133\276\113\124\052\316\217\074\277\225\274\216\254\211\357 -\151\076\027\006\367\175\301\270\002\145\043\313\365\035\032\343 -\123\241\364\007\176\012\213\135\131\243\124\060\122\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\206\060\017\006 -\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060\035 -\006\003\125\035\016\004\026\004\024\157\253\176\332\377\227\103 -\162\354\073\147\167\336\202\141\065\210\107\102\205\060\020\006 -\011\053\006\001\004\001\202\067\025\001\004\003\002\001\000\060 -\012\006\010\052\206\110\316\075\004\003\003\003\150\000\060\145 -\002\061\000\330\063\132\321\341\314\222\262\315\037\360\362\214 -\261\075\262\264\324\312\230\334\332\211\005\364\033\127\161\337 -\224\115\042\166\005\120\111\115\220\051\222\054\277\057\067\345 -\271\165\342\002\060\001\222\151\130\235\123\262\310\125\146\133 -\272\311\120\132\052\201\266\216\317\021\320\362\176\204\334\177 -\066\337\303\055\332\115\370\042\260\330\263\213\064\237\235\061 -\034\254\017\021\031 +\060\202\003\257\060\202\002\227\240\003\002\001\002\002\020\010 +\073\340\126\220\102\106\261\241\165\152\311\131\221\307\112\060 +\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\141 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\025\060 +\023\006\003\125\004\012\023\014\104\151\147\151\103\145\162\164 +\040\111\156\143\061\031\060\027\006\003\125\004\013\023\020\167 +\167\167\056\144\151\147\151\143\145\162\164\056\143\157\155\061 +\040\060\036\006\003\125\004\003\023\027\104\151\147\151\103\145 +\162\164\040\107\154\157\142\141\154\040\122\157\157\164\040\103 +\101\060\036\027\015\060\066\061\061\061\060\060\060\060\060\060 +\060\132\027\015\063\061\061\061\061\060\060\060\060\060\060\060 +\132\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103 +\145\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013 +\023\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143 +\157\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147 +\151\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157 +\164\040\103\101\060\202\001\042\060\015\006\011\052\206\110\206 +\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012 +\002\202\001\001\000\342\073\341\021\162\336\250\244\323\243\127 +\252\120\242\217\013\167\220\311\242\245\356\022\316\226\133\001 +\011\040\314\001\223\247\116\060\267\123\367\103\304\151\000\127 +\235\342\215\042\335\207\006\100\000\201\011\316\316\033\203\277 +\337\315\073\161\106\342\326\146\307\005\263\166\047\026\217\173 +\236\036\225\175\356\267\110\243\010\332\326\257\172\014\071\006 +\145\177\112\135\037\274\027\370\253\276\356\050\327\164\177\172 +\170\231\131\205\150\156\134\043\062\113\277\116\300\350\132\155 +\343\160\277\167\020\277\374\001\366\205\331\250\104\020\130\062 +\251\165\030\325\321\242\276\107\342\047\152\364\232\063\370\111 +\010\140\213\324\137\264\072\204\277\241\252\112\114\175\076\317 +\117\137\154\166\136\240\113\067\221\236\334\042\346\155\316\024 +\032\216\152\313\376\315\263\024\144\027\307\133\051\236\062\277 +\362\356\372\323\013\102\324\253\267\101\062\332\014\324\357\370 +\201\325\273\215\130\077\265\033\350\111\050\242\160\332\061\004 +\335\367\262\026\362\114\012\116\007\250\355\112\075\136\265\177 +\243\220\303\257\047\002\003\001\000\001\243\143\060\141\060\016 +\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\035\006\003\125\035\016\004\026\004\024\003\336\120\065\126\321 +\114\273\146\360\243\342\033\033\303\227\262\075\321\125\060\037 +\006\003\125\035\043\004\030\060\026\200\024\003\336\120\065\126 +\321\114\273\146\360\243\342\033\033\303\227\262\075\321\125\060 +\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003\202 +\001\001\000\313\234\067\252\110\023\022\012\372\335\104\234\117 +\122\260\364\337\256\004\365\171\171\010\243\044\030\374\113\053 +\204\300\055\271\325\307\376\364\301\037\130\313\270\155\234\172 +\164\347\230\051\253\021\265\343\160\240\241\315\114\210\231\223 +\214\221\160\342\253\017\034\276\223\251\377\143\325\344\007\140 +\323\243\277\235\133\011\361\325\216\343\123\364\216\143\372\077 +\247\333\264\146\337\142\146\326\321\156\101\215\362\055\265\352 +\167\112\237\235\130\342\053\131\300\100\043\355\055\050\202\105 +\076\171\124\222\046\230\340\200\110\250\067\357\360\326\171\140 +\026\336\254\350\016\315\156\254\104\027\070\057\111\332\341\105 +\076\052\271\066\123\317\072\120\006\367\056\350\304\127\111\154 +\141\041\030\325\004\255\170\074\054\072\200\153\247\353\257\025 +\024\351\330\211\301\271\070\154\342\221\154\212\377\144\271\167 +\045\127\060\300\033\044\243\341\334\351\337\107\174\265\264\044 +\010\005\060\354\055\275\013\277\105\277\120\271\251\363\353\230 +\001\022\255\310\210\306\230\064\137\215\012\074\306\351\325\225 +\225\155\336 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Microsoft TLS ECC Root G2" -# Issuer: CN=Microsoft TLS ECC Root G2,O=Microsoft Corporation,C=US -# Serial Number:72:e2:02:2b:c5:b2:c1:b0:4d:25:05:6e:62:e2:76:79 -# Subject: CN=Microsoft TLS ECC Root G2,O=Microsoft Corporation,C=US -# Not Valid Before: Thu Apr 10 20:52:36 2025 -# Not Valid After : Tue Apr 10 20:58:59 2040 -# Fingerprint (SHA-256): 87:75:5C:FE:88:BD:B0:D1:09:9D:CD:ED:3E:AE:11:4B:A9:76:E6:64:B3:24:8E:E3:DC:64:9E:35:7F:17:E8:A7 -# Fingerprint (SHA1): F8:2B:B9:51:BA:6B:8A:85:AD:FA:75:15:02:85:60:D1:25:0E:72:37 +# Trust for "DigiCert Global Root CA" +# Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a +# Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Fri Nov 10 00:00:00 2006 +# Not Valid After : Mon Nov 10 00:00:00 2031 +# Fingerprint (SHA-256): 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61 +# Fingerprint (SHA1): A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft TLS ECC Root G2" +CKA_LABEL UTF8 "DigiCert Global Root CA" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\370\053\271\121\272\153\212\205\255\372\165\025\002\205\140\321 -\045\016\162\067 +\250\230\135\072\145\345\345\304\262\327\326\155\100\306\335\057 +\261\234\124\066 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\145\135\363\235\302\063\135\000\103\264\133\132\216\042\341\167 +\171\344\251\204\015\175\072\226\327\300\117\342\103\114\211\056 END CKA_ISSUER MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\105\103\103\040\122\157\157\164 -\040\107\062 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\103\101 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\162\342\002\053\305\262\301\260\115\045\005\156\142\342 -\166\171 +\002\020\010\073\340\126\220\102\106\261\241\165\152\311\131\221 +\307\112 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST @@ -3312,168 +3339,260 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Microsoft TLS RSA Root G2" +# Certificate "DigiCert Global Root G3" # -# Issuer: CN=Microsoft TLS RSA Root G2,O=Microsoft Corporation,C=US -# Serial Number:64:86:e3:b2:69:18:0f:bf:40:40:39:2e:2e:53:4b:9b -# Subject: CN=Microsoft TLS RSA Root G2,O=Microsoft Corporation,C=US -# Not Valid Before: Thu Apr 10 18:36:30 2025 -# Not Valid After : Tue Apr 10 18:43:51 2040 -# Fingerprint (SHA-256): 6A:17:05:83:DB:58:41:51:E1:C4:54:EE:CA:2A:64:CC:5D:8E:48:4A:5B:D1:15:6E:72:0B:44:58:65:4E:E9:E5 -# Fingerprint (SHA1): 21:73:4D:95:A2:47:3B:E2:5C:BF:D1:2A:84:C6:FB:C5:BC:8E:24:14 +# Issuer: CN=DigiCert Global Root G3,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:05:55:56:bc:f2:5e:a4:35:35:c3:a4:0f:d5:ab:45:72 +# Subject: CN=DigiCert Global Root G3,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Thu Aug 01 12:00:00 2013 +# Not Valid After : Fri Jan 15 12:00:00 2038 +# Fingerprint (SHA-256): 31:AD:66:48:F8:10:41:38:C7:38:F3:9E:A4:32:01:33:39:3E:3A:18:CC:02:29:6E:F9:7C:2A:C9:EF:67:31:D0 +# Fingerprint (SHA1): 7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft TLS RSA Root G2" +CKA_LABEL UTF8 "DigiCert Global Root G3" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\122\123\101\040\122\157\157\164 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\107\063 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\107\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\005\125\126\274\362\136\244\065\065\303\244\017\325\253 +\105\162 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\077\060\202\001\305\240\003\002\001\002\002\020\005 +\125\126\274\362\136\244\065\065\303\244\017\325\253\105\162\060 +\012\006\010\052\206\110\316\075\004\003\003\060\141\061\013\060 +\011\006\003\125\004\006\023\002\125\123\061\025\060\023\006\003 +\125\004\012\023\014\104\151\147\151\103\145\162\164\040\111\156 +\143\061\031\060\027\006\003\125\004\013\023\020\167\167\167\056 +\144\151\147\151\143\145\162\164\056\143\157\155\061\040\060\036 +\006\003\125\004\003\023\027\104\151\147\151\103\145\162\164\040 +\107\154\157\142\141\154\040\122\157\157\164\040\107\063\060\036 +\027\015\061\063\060\070\060\061\061\062\060\060\060\060\132\027 +\015\063\070\060\061\061\065\061\062\060\060\060\060\132\060\141 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\025\060 +\023\006\003\125\004\012\023\014\104\151\147\151\103\145\162\164 +\040\111\156\143\061\031\060\027\006\003\125\004\013\023\020\167 +\167\167\056\144\151\147\151\143\145\162\164\056\143\157\155\061 +\040\060\036\006\003\125\004\003\023\027\104\151\147\151\103\145 +\162\164\040\107\154\157\142\141\154\040\122\157\157\164\040\107 +\063\060\166\060\020\006\007\052\206\110\316\075\002\001\006\005 +\053\201\004\000\042\003\142\000\004\335\247\331\273\212\270\013 +\373\013\177\041\322\360\276\276\163\363\063\135\032\274\064\352 +\336\306\233\274\320\225\366\360\314\320\013\272\141\133\121\106 +\176\236\055\237\356\216\143\014\027\354\007\160\365\317\204\056 +\100\203\234\350\077\101\155\073\255\323\244\024\131\066\170\235 +\003\103\356\020\023\154\162\336\256\210\247\241\153\265\103\316 +\147\334\043\377\003\034\243\342\076\243\102\060\100\060\017\006 +\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016 +\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060\035 +\006\003\125\035\016\004\026\004\024\263\333\110\244\371\241\305 +\330\256\066\101\314\021\143\151\142\051\274\113\306\060\012\006 +\010\052\206\110\316\075\004\003\003\003\150\000\060\145\002\061 +\000\255\274\362\154\077\022\112\321\055\071\303\012\011\227\163 +\364\210\066\214\210\047\273\346\210\215\120\205\247\143\371\236 +\062\336\146\223\017\361\314\261\011\217\335\154\253\372\153\177 +\240\002\060\071\146\133\302\144\215\270\236\120\334\250\325\111 +\242\355\307\334\321\111\177\027\001\270\310\206\217\116\214\210 +\053\250\232\251\212\305\321\000\275\370\124\342\232\345\133\174 +\263\047\027 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE +CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE +CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE + +# Trust for "DigiCert Global Root G3" +# Issuer: CN=DigiCert Global Root G3,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:05:55:56:bc:f2:5e:a4:35:35:c3:a4:0f:d5:ab:45:72 +# Subject: CN=DigiCert Global Root G3,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Thu Aug 01 12:00:00 2013 +# Not Valid After : Fri Jan 15 12:00:00 2038 +# Fingerprint (SHA-256): 31:AD:66:48:F8:10:41:38:C7:38:F3:9E:A4:32:01:33:39:3E:3A:18:CC:02:29:6E:F9:7C:2A:C9:EF:67:31:D0 +# Fingerprint (SHA1): 7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "DigiCert Global Root G3" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\176\004\336\211\152\076\146\155\000\346\207\323\077\372\331\073 +\350\075\064\236 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\365\135\244\120\245\373\050\176\036\017\015\314\226\127\126\312 +END +CKA_ISSUER MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 +\040\107\063 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\020\005\125\126\274\362\136\244\065\065\303\244\017\325\253 +\105\162 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "DigiCert Global Root G2" +# +# Issuer: CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:03:3a:f1:e6:a7:11:a9:a0:bb:28:64:b1:1d:09:fa:e5 +# Subject: CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Thu Aug 01 12:00:00 2013 +# Not Valid After : Fri Jan 15 12:00:00 2038 +# Fingerprint (SHA-256): CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F +# Fingerprint (SHA1): DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "DigiCert Global Root G2" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 \040\107\062 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\122\123\101\040\122\157\157\164 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 \040\107\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\144\206\343\262\151\030\017\277\100\100\071\056\056\123 -\113\233 +\002\020\003\072\361\346\247\021\251\240\273\050\144\261\035\011 +\372\345 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\200\060\202\003\150\240\003\002\001\002\002\020\144 -\206\343\262\151\030\017\277\100\100\071\056\056\123\113\233\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\121 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\036\060 -\034\006\003\125\004\012\023\025\115\151\143\162\157\163\157\146 -\164\040\103\157\162\160\157\162\141\164\151\157\156\061\042\060 -\040\006\003\125\004\003\023\031\115\151\143\162\157\163\157\146 -\164\040\124\114\123\040\122\123\101\040\122\157\157\164\040\107 -\062\060\036\027\015\062\065\060\064\061\060\061\070\063\066\063 -\060\132\027\015\064\060\060\064\061\060\061\070\064\063\065\061 -\132\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157 -\163\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156 -\061\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157 -\163\157\146\164\040\124\114\123\040\122\123\101\040\122\157\157 -\164\040\107\062\060\202\002\042\060\015\006\011\052\206\110\206 -\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 -\002\202\002\001\000\337\352\213\237\107\341\050\020\161\257\101 -\326\031\333\222\127\336\153\253\346\056\336\255\072\140\203\267 -\023\230\254\133\271\062\013\173\353\237\162\047\153\135\100\253 -\276\030\006\223\262\015\322\022\355\270\164\365\177\057\352\250 -\027\224\366\063\026\127\212\336\040\174\041\335\267\332\254\336 -\116\144\260\132\315\113\165\363\357\002\144\115\355\122\332\243 -\217\004\350\221\370\327\373\077\031\375\116\105\071\136\350\051 -\303\326\362\147\257\263\000\224\301\215\341\360\112\030\230\071 -\372\300\011\204\063\101\005\003\005\253\364\165\341\123\245\041 -\222\134\104\114\346\140\127\244\220\002\227\307\325\330\223\004 -\062\112\355\205\121\355\326\305\272\240\077\066\212\057\157\114 -\071\250\004\151\042\204\073\165\024\367\331\076\264\251\320\007 -\101\070\201\176\106\110\035\350\031\346\160\270\240\252\030\335 -\162\277\176\175\265\154\116\031\160\021\204\004\023\201\324\142 -\375\234\153\361\034\335\377\354\247\340\346\307\215\061\113\277 -\362\153\063\314\321\214\266\376\261\033\243\112\250\137\016\177 -\061\166\070\077\007\107\154\001\250\254\245\024\332\202\260\137 -\037\154\274\211\032\300\022\052\313\173\227\037\050\056\061\026 -\212\123\114\165\146\371\175\001\326\302\140\252\145\217\061\236 -\162\313\314\233\055\345\104\031\223\127\253\156\216\302\331\056 -\145\260\162\055\347\241\303\241\176\111\035\131\147\326\011\324 -\030\022\155\300\225\105\170\311\361\140\152\344\366\356\006\044 -\073\163\112\132\021\302\076\227\141\300\170\356\357\023\247\060 -\342\112\070\055\356\130\027\023\040\267\066\052\337\013\062\264 -\302\070\261\221\335\022\260\105\266\174\300\261\035\142\241\235 -\335\161\022\025\226\001\235\012\011\365\261\335\263\331\340\070 -\102\064\366\151\266\303\257\026\163\376\324\103\370\103\344\130 -\371\117\263\363\354\326\075\224\072\100\070\025\253\014\206\320 -\144\316\032\143\350\204\224\125\011\132\266\004\266\321\076\232 -\025\307\144\021\200\320\033\202\016\115\377\105\236\262\145\007 -\045\037\333\232\310\306\354\326\133\205\120\004\237\034\313\135 -\040\202\147\236\171\342\337\350\362\350\157\304\040\162\060\206 -\345\235\165\047\065\002\003\001\000\001\243\124\060\122\060\016 -\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060\017 +\060\202\003\216\060\202\002\166\240\003\002\001\002\002\020\003 +\072\361\346\247\021\251\240\273\050\144\261\035\011\372\345\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\141 +\061\013\060\011\006\003\125\004\006\023\002\125\123\061\025\060 +\023\006\003\125\004\012\023\014\104\151\147\151\103\145\162\164 +\040\111\156\143\061\031\060\027\006\003\125\004\013\023\020\167 +\167\167\056\144\151\147\151\143\145\162\164\056\143\157\155\061 +\040\060\036\006\003\125\004\003\023\027\104\151\147\151\103\145 +\162\164\040\107\154\157\142\141\154\040\122\157\157\164\040\107 +\062\060\036\027\015\061\063\060\070\060\061\061\062\060\060\060 +\060\132\027\015\063\070\060\061\061\065\061\062\060\060\060\060 +\132\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103 +\145\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013 +\023\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143 +\157\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147 +\151\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157 +\164\040\107\062\060\202\001\042\060\015\006\011\052\206\110\206 +\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012 +\002\202\001\001\000\273\067\315\064\334\173\153\311\262\150\220 +\255\112\165\377\106\272\041\012\010\215\365\031\124\311\373\210 +\333\363\256\362\072\211\221\074\172\346\253\006\032\153\317\254 +\055\350\136\011\044\104\272\142\232\176\326\243\250\176\340\124 +\165\040\005\254\120\267\234\143\032\154\060\334\332\037\031\261 +\327\036\336\375\327\340\313\224\203\067\256\354\037\103\116\335 +\173\054\322\275\056\245\057\344\251\270\255\072\324\231\244\266 +\045\351\233\153\000\140\222\140\377\117\041\111\030\367\147\220 +\253\141\006\234\217\362\272\351\264\351\222\062\153\265\363\127 +\350\135\033\315\214\035\253\225\004\225\111\363\065\055\226\343 +\111\155\335\167\343\373\111\113\264\254\125\007\251\217\225\263 +\264\043\273\114\155\105\360\366\251\262\225\060\264\375\114\125 +\214\047\112\127\024\174\202\235\315\163\222\323\026\112\006\014 +\214\120\321\217\036\011\276\027\241\346\041\312\375\203\345\020 +\274\203\245\012\304\147\050\366\163\024\024\075\106\166\303\207 +\024\211\041\064\115\257\017\105\014\246\111\241\272\273\234\305 +\261\063\203\051\205\002\003\001\000\001\243\102\060\100\060\017 \006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\035\006\003\125\035\016\004\026\004\024\336\221\206\110\267\241 -\061\131\061\361\113\137\007\251\334\210\171\332\250\166\060\020 -\006\011\053\006\001\004\001\202\067\025\001\004\003\002\001\000 -\060\015\006\011\052\206\110\206\367\015\001\001\014\005\000\003 -\202\002\001\000\164\063\232\120\171\256\201\126\045\317\233\157 -\121\021\336\125\022\220\223\154\063\340\056\044\014\136\144\142 -\064\116\066\031\265\240\024\363\265\306\170\323\243\355\260\073 -\012\136\222\076\162\033\056\012\203\336\277\237\250\323\071\250 -\016\330\043\065\007\005\217\266\363\306\032\324\103\044\027\223 -\232\033\100\360\171\335\311\300\017\163\032\005\207\213\012\272 -\333\044\210\264\204\275\315\352\177\033\355\166\245\064\007\272 -\156\016\352\163\072\110\302\355\361\235\177\367\216\005\023\333 -\313\323\175\050\134\314\262\276\240\171\020\052\046\353\162\344 -\246\241\227\036\166\304\074\176\126\232\363\346\075\317\342\325 -\004\031\152\074\327\070\345\343\273\036\005\017\335\110\053\174 -\071\235\351\117\115\167\250\275\111\050\237\347\271\050\133\066 -\364\163\040\202\126\026\325\301\132\115\304\355\373\007\314\150 -\067\256\303\164\123\253\227\050\000\003\106\204\321\332\071\236 -\117\020\112\077\231\102\053\065\250\071\225\267\176\201\076\154 -\257\375\274\251\256\300\222\114\302\064\045\073\027\247\233\213 -\100\012\043\362\212\326\270\000\077\122\136\126\273\171\353\213 -\211\370\044\211\340\315\346\016\372\317\010\110\146\315\312\226 -\240\265\313\057\157\104\023\346\306\070\236\361\004\220\361\023 -\110\265\110\102\050\375\377\201\110\142\121\125\224\237\147\111 -\137\154\110\376\307\321\355\221\240\264\033\266\320\153\273\023 -\140\240\250\237\222\375\063\125\314\201\117\063\343\232\107\243 -\305\063\231\234\065\157\174\037\244\113\137\075\017\071\143\017 -\372\055\120\216\254\031\224\375\277\227\331\216\130\314\200\151 -\100\147\070\266\306\027\353\034\252\257\204\126\122\237\140\045 -\062\173\220\146\362\343\227\061\042\042\301\265\072\075\211\024 -\341\264\220\152\265\062\142\260\226\070\125\006\373\212\257\052 -\203\114\172\352\031\255\304\364\224\032\266\320\027\122\207\255 -\371\014\345\047\234\110\075\306\262\324\261\076\060\017\223\063 -\254\002\345\240\240\122\151\240\362\305\110\056\277\106\303\046 -\105\346\352\327\371\113\051\342\326\270\340\111\267\272\224\257 -\170\317\207\047\043\054\243\362\376\066\013\102\371\341\327\044 -\273\253\346\310 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060 +\035\006\003\125\035\016\004\026\004\024\116\042\124\040\030\225 +\346\343\156\346\017\372\372\271\022\355\006\027\217\071\060\015 +\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202\001 +\001\000\140\147\050\224\157\016\110\143\353\061\335\352\147\030 +\325\211\175\074\305\213\112\177\351\276\333\053\027\337\260\137 +\163\167\052\062\023\071\201\147\102\204\043\362\105\147\065\354 +\210\277\370\217\260\141\014\064\244\256\040\114\204\306\333\370 +\065\341\166\331\337\246\102\273\307\104\010\206\177\066\164\044 +\132\332\154\015\024\131\065\275\362\111\335\266\037\311\263\015 +\107\052\075\231\057\273\134\273\265\324\040\341\231\137\123\106 +\025\333\150\233\360\363\060\325\076\061\342\215\204\236\343\212 +\332\332\226\076\065\023\245\137\360\371\160\120\160\107\101\021 +\127\031\116\300\217\256\006\304\225\023\027\057\033\045\237\165 +\362\261\216\231\241\157\023\261\101\161\376\210\052\310\117\020 +\040\125\327\363\024\105\345\340\104\364\352\207\225\062\223\016 +\376\123\106\372\054\235\377\213\042\271\113\331\011\105\244\336 +\244\270\232\130\335\033\175\122\237\216\131\103\210\201\244\236 +\046\325\157\255\335\015\306\067\175\355\003\222\033\345\167\137 +\166\356\074\215\304\135\126\133\242\331\146\156\263\065\067\345 +\062\266 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Microsoft TLS RSA Root G2" -# Issuer: CN=Microsoft TLS RSA Root G2,O=Microsoft Corporation,C=US -# Serial Number:64:86:e3:b2:69:18:0f:bf:40:40:39:2e:2e:53:4b:9b -# Subject: CN=Microsoft TLS RSA Root G2,O=Microsoft Corporation,C=US -# Not Valid Before: Thu Apr 10 18:36:30 2025 -# Not Valid After : Tue Apr 10 18:43:51 2040 -# Fingerprint (SHA-256): 6A:17:05:83:DB:58:41:51:E1:C4:54:EE:CA:2A:64:CC:5D:8E:48:4A:5B:D1:15:6E:72:0B:44:58:65:4E:E9:E5 -# Fingerprint (SHA1): 21:73:4D:95:A2:47:3B:E2:5C:BF:D1:2A:84:C6:FB:C5:BC:8E:24:14 +# Trust for "DigiCert Global Root G2" +# Issuer: CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US +# Serial Number:03:3a:f1:e6:a7:11:a9:a0:bb:28:64:b1:1d:09:fa:e5 +# Subject: CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US +# Not Valid Before: Thu Aug 01 12:00:00 2013 +# Not Valid After : Fri Jan 15 12:00:00 2038 +# Fingerprint (SHA-256): CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F +# Fingerprint (SHA1): DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Microsoft TLS RSA Root G2" +CKA_LABEL UTF8 "DigiCert Global Root G2" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\041\163\115\225\242\107\073\342\134\277\321\052\204\306\373\305 -\274\216\044\024 +\337\074\044\371\277\326\146\166\033\046\200\163\376\006\321\314 +\215\117\202\244 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\026\212\065\244\272\263\236\123\271\074\053\101\136\351\342\233 +\344\246\212\310\124\254\122\102\106\012\375\162\110\033\052\104 END CKA_ISSUER MULTILINE_OCTAL -\060\121\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\036\060\034\006\003\125\004\012\023\025\115\151\143\162\157\163 -\157\146\164\040\103\157\162\160\157\162\141\164\151\157\156\061 -\042\060\040\006\003\125\004\003\023\031\115\151\143\162\157\163 -\157\146\164\040\124\114\123\040\122\123\101\040\122\157\157\164 +\060\141\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\025\060\023\006\003\125\004\012\023\014\104\151\147\151\103\145 +\162\164\040\111\156\143\061\031\060\027\006\003\125\004\013\023 +\020\167\167\167\056\144\151\147\151\143\145\162\164\056\143\157 +\155\061\040\060\036\006\003\125\004\003\023\027\104\151\147\151 +\103\145\162\164\040\107\154\157\142\141\154\040\122\157\157\164 \040\107\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\144\206\343\262\151\030\017\277\100\100\071\056\056\123 -\113\233 +\002\020\003\072\361\346\247\021\251\240\273\050\144\261\035\011 +\372\345 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST diff --git a/SPECS/ca-certificates/certdata.microsoft.txt b/SPECS/ca-certificates/certdata.microsoft.txt index 4e919e50d8..24d0efded3 100644 --- a/SPECS/ca-certificates/certdata.microsoft.txt +++ b/SPECS/ca-certificates/certdata.microsoft.txt @@ -1,4 +1,4 @@ -# Release: May 2025 +# Release: August 2025 # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this @@ -1432,131 +1432,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "RXC-R2" -# -# Issuer: CN=Cisco RXC-R2,O=Cisco Systems,C=US -# Serial Number: 1 (0x1) -# Subject: CN=Cisco RXC-R2,O=Cisco Systems,C=US -# Not Valid Before: Wed Jul 09 21:46:56 2014 -# Not Valid After : Sun Jul 09 21:46:56 2034 -# Fingerprint (SHA-256): 22:9C:CC:19:6D:32:C9:84:21:CC:11:9E:78:48:6E:EB:EF:60:3A:EC:D5:25:C6:B8:8B:47:AB:B7:40:69:2B:96 -# Fingerprint (SHA1): 2C:8A:FF:CE:96:64:30:BA:04:C0:4F:81:DD:4B:49:C7:1B:5B:81:A0 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "RXC-R2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\074\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\103\151\163\143\157\040 -\123\171\163\164\145\155\163\061\025\060\023\006\003\125\004\003 -\023\014\103\151\163\143\157\040\122\130\103\055\122\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\074\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\103\151\163\143\157\040 -\123\171\163\164\145\155\163\061\025\060\023\006\003\125\004\003 -\023\014\103\151\163\143\157\040\122\130\103\055\122\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\065\060\202\002\035\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\074\061\013\060\011\006\003\125\004\006\023\002\125\123\061\026 -\060\024\006\003\125\004\012\023\015\103\151\163\143\157\040\123 -\171\163\164\145\155\163\061\025\060\023\006\003\125\004\003\023 -\014\103\151\163\143\157\040\122\130\103\055\122\062\060\036\027 -\015\061\064\060\067\060\071\062\061\064\066\065\066\132\027\015 -\063\064\060\067\060\071\062\061\064\066\065\066\132\060\074\061 -\013\060\011\006\003\125\004\006\023\002\125\123\061\026\060\024 -\006\003\125\004\012\023\015\103\151\163\143\157\040\123\171\163 -\164\145\155\163\061\025\060\023\006\003\125\004\003\023\014\103 -\151\163\143\157\040\122\130\103\055\122\062\060\202\001\042\060 -\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202 -\001\017\000\060\202\001\012\002\202\001\001\000\333\102\061\173 -\012\323\234\052\115\307\272\322\144\006\144\260\010\057\314\023 -\352\055\066\076\167\356\076\330\166\024\001\203\301\113\117\057 -\210\313\034\022\126\362\345\111\044\100\113\242\155\351\312\023 -\351\163\370\332\251\335\140\351\327\135\053\034\012\341\215\213 -\274\165\277\163\130\374\350\203\052\215\162\336\023\337\377\273 -\237\061\064\077\241\210\350\101\307\124\020\244\357\201\025\356 -\043\245\005\272\065\022\230\251\151\163\354\156\132\074\357\214 -\176\115\363\015\141\047\021\144\151\242\053\037\332\063\116\234 -\326\025\251\024\035\021\216\076\305\237\115\035\073\000\115\055 -\315\154\001\205\000\064\142\355\134\164\013\247\122\211\342\076 -\012\323\154\115\021\272\164\305\074\307\317\310\137\215\025\315 -\021\062\076\322\052\061\045\255\033\013\263\323\031\072\051\254 -\201\324\000\330\270\025\274\230\176\143\176\347\310\070\271\365 -\375\164\240\127\076\337\225\253\062\174\237\042\051\265\265\172 -\202\040\244\143\162\134\221\201\043\177\142\075\144\330\146\314 -\041\370\351\073\263\006\154\222\075\046\077\061\002\003\001\000 -\001\243\102\060\100\060\016\006\003\125\035\017\001\001\377\004 -\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377\004 -\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004 -\024\220\162\004\140\375\335\372\204\354\216\132\004\130\367\317 -\373\303\162\011\026\060\015\006\011\052\206\110\206\367\015\001 -\001\013\005\000\003\202\001\001\000\201\015\364\141\145\143\233 -\156\127\032\112\072\164\003\313\121\022\046\043\035\240\326\366 -\204\172\076\115\361\167\224\214\140\115\232\306\234\270\346\161 -\143\155\365\302\257\321\323\007\077\246\213\304\253\272\165\060 -\077\211\163\202\377\217\370\114\262\117\362\246\267\242\221\256 -\155\263\370\043\353\350\225\032\173\026\040\261\351\347\066\057 -\323\106\150\252\165\144\127\143\210\062\255\204\254\012\002\101 -\217\015\300\356\312\300\122\366\122\231\256\211\022\043\366\023 -\213\044\307\162\225\036\151\142\303\040\132\053\116\012\112\102 -\212\301\216\033\372\204\010\145\132\266\162\014\222\233\146\301 -\326\255\276\110\302\071\214\311\075\245\025\041\321\251\310\231 -\260\362\144\360\200\106\302\020\272\025\003\344\303\222\142\037 -\206\210\156\350\116\352\357\261\376\364\037\124\161\271\232\320 -\375\034\041\014\253\036\012\124\225\133\060\142\056\330\203\133 -\162\316\002\216\124\066\072\262\100\006\140\145\304\265\312\020 -\054\031\313\017\134\036\336\172\136\374\334\206\103\156\256\320 -\220\256\021\111\103\106\002\221\016 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "RXC-R2" -# Issuer: CN=Cisco RXC-R2,O=Cisco Systems,C=US -# Serial Number: 1 (0x1) -# Subject: CN=Cisco RXC-R2,O=Cisco Systems,C=US -# Not Valid Before: Wed Jul 09 21:46:56 2014 -# Not Valid After : Sun Jul 09 21:46:56 2034 -# Fingerprint (SHA-256): 22:9C:CC:19:6D:32:C9:84:21:CC:11:9E:78:48:6E:EB:EF:60:3A:EC:D5:25:C6:B8:8B:47:AB:B7:40:69:2B:96 -# Fingerprint (SHA1): 2C:8A:FF:CE:96:64:30:BA:04:C0:4F:81:DD:4B:49:C7:1B:5B:81:A0 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "RXC-R2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\054\212\377\316\226\144\060\272\004\300\117\201\335\113\111\307 -\033\133\201\240 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\370\254\130\302\266\102\025\143\005\202\363\066\357\306\057\022 -END -CKA_ISSUER MULTILINE_OCTAL -\060\074\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\103\151\163\143\157\040 -\123\171\163\164\145\155\163\061\025\060\023\006\003\125\004\003 -\023\014\103\151\163\143\157\040\122\130\103\055\122\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "GlobalSign Root CA - R6" # @@ -2077,130 +1952,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "CCA India 2015" -# -# Issuer: CN=CCA India 2015 SPL,O=India PKI,C=IN -# Serial Number: 10165 (0x27b5) -# Subject: CN=CCA India 2015 SPL,O=India PKI,C=IN -# Not Valid Before: Thu Jan 29 11:36:43 2015 -# Not Valid After : Wed Jan 29 11:36:43 2025 -# Fingerprint (SHA-256): C3:4C:5D:F5:30:80:07:8F:FE:45:B2:1A:7F:60:04:69:91:72:04:F4:F0:29:3F:1D:72:09:39:3E:52:65:C0:4F -# Fingerprint (SHA1): 3B:C6:DC:E0:03:07:BD:67:60:41:EB:D8:59:70:C6:2F:8F:DA:51:09 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CCA India 2015" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\022\060\020\006\003\125\004\012\023\011\111\156\144\151\141\040 -\120\113\111\061\033\060\031\006\003\125\004\003\023\022\103\103 -\101\040\111\156\144\151\141\040\062\060\061\065\040\123\120\114 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\022\060\020\006\003\125\004\012\023\011\111\156\144\151\141\040 -\120\113\111\061\033\060\031\006\003\125\004\003\023\022\103\103 -\101\040\111\156\144\151\141\040\062\060\061\065\040\123\120\114 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\002\047\265 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\053\060\202\002\023\240\003\002\001\002\002\002\047 -\265\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000 -\060\076\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\022\060\020\006\003\125\004\012\023\011\111\156\144\151\141\040 -\120\113\111\061\033\060\031\006\003\125\004\003\023\022\103\103 -\101\040\111\156\144\151\141\040\062\060\061\065\040\123\120\114 -\060\036\027\015\061\065\060\061\062\071\061\061\063\066\064\063 -\132\027\015\062\065\060\061\062\071\061\061\063\066\064\063\132 -\060\076\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\022\060\020\006\003\125\004\012\023\011\111\156\144\151\141\040 -\120\113\111\061\033\060\031\006\003\125\004\003\023\022\103\103 -\101\040\111\156\144\151\141\040\062\060\061\065\040\123\120\114 -\060\202\001\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001\001 -\000\227\327\066\211\075\067\101\016\221\077\153\040\137\374\072 -\176\073\132\135\057\303\014\207\123\074\030\242\310\141\163\015 -\010\016\126\036\322\156\140\245\127\145\334\376\317\120\206\017 -\132\116\253\142\213\004\312\126\357\341\321\236\256\164\255\252 -\372\077\101\130\321\125\160\160\076\105\311\033\200\163\374\010 -\210\344\213\162\250\012\265\051\127\260\255\012\221\101\032\234 -\137\120\175\254\027\032\045\133\041\360\225\053\347\337\067\254 -\064\363\007\260\361\035\301\023\357\173\056\072\305\251\141\220 -\262\170\137\124\120\074\263\132\125\143\266\313\020\243\157\373 -\015\364\266\357\346\010\336\242\020\277\166\227\177\352\331\226 -\321\324\303\163\002\161\264\251\260\254\254\037\027\040\245\107 -\106\326\104\002\070\231\276\313\024\170\376\346\137\304\177\335 -\157\351\252\107\024\220\021\330\035\200\300\025\324\214\240\231 -\343\031\016\012\017\314\032\010\234\324\123\007\000\340\037\111 -\277\202\202\114\317\233\330\156\323\324\021\000\022\154\017\175 -\140\147\112\214\120\333\362\057\340\271\171\207\203\303\134\302 -\071\002\003\001\000\001\243\063\060\061\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\021\006\003\125 -\035\016\004\012\004\010\114\021\160\252\217\335\037\007\060\013 -\006\003\125\035\017\004\004\003\002\001\006\060\015\006\011\052 -\206\110\206\367\015\001\001\013\005\000\003\202\001\001\000\055 -\274\214\025\312\064\355\114\050\042\273\341\123\045\113\072\227 -\251\355\046\242\244\253\115\373\012\022\156\347\065\346\147\016 -\030\201\142\066\245\314\302\337\032\345\150\001\201\116\263\231 -\324\107\025\022\235\166\351\241\246\023\035\260\377\175\273\127 -\343\357\131\233\310\073\120\151\306\143\072\254\240\301\345\220 -\350\144\051\134\110\101\151\067\254\073\273\335\343\125\306\327 -\222\015\225\203\260\050\127\302\243\251\226\247\312\336\114\036 -\232\377\076\245\056\047\136\333\146\147\047\205\357\253\212\134 -\163\174\210\315\107\146\360\235\203\314\204\217\342\051\364\037 -\101\157\267\365\041\015\365\224\126\121\343\374\377\023\130\267 -\237\003\356\051\237\322\001\260\142\236\224\275\031\206\132\103 -\372\152\211\201\260\352\134\030\207\312\200\225\373\355\001\277 -\021\032\337\225\024\256\056\342\257\315\221\220\272\263\047\303 -\157\020\330\331\016\264\245\164\154\201\267\137\031\314\376\047 -\116\263\105\230\130\030\234\127\304\222\162\022\317\247\202\071 -\325\341\020\227\012\206\060\105\205\143\250\153\115\232\374 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "CCA India 2015" -# Issuer: CN=CCA India 2015 SPL,O=India PKI,C=IN -# Serial Number: 10165 (0x27b5) -# Subject: CN=CCA India 2015 SPL,O=India PKI,C=IN -# Not Valid Before: Thu Jan 29 11:36:43 2015 -# Not Valid After : Wed Jan 29 11:36:43 2025 -# Fingerprint (SHA-256): C3:4C:5D:F5:30:80:07:8F:FE:45:B2:1A:7F:60:04:69:91:72:04:F4:F0:29:3F:1D:72:09:39:3E:52:65:C0:4F -# Fingerprint (SHA1): 3B:C6:DC:E0:03:07:BD:67:60:41:EB:D8:59:70:C6:2F:8F:DA:51:09 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CCA India 2015" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\073\306\334\340\003\007\275\147\140\101\353\330\131\160\306\057 -\217\332\121\011 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\026\332\076\254\035\012\127\251\264\342\336\320\223\226\334\324 -END -CKA_ISSUER MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\111\116\061 -\022\060\020\006\003\125\004\012\023\011\111\156\144\151\141\040 -\120\113\111\061\033\060\031\006\003\125\004\003\023\022\103\103 -\101\040\111\156\144\151\141\040\062\060\061\065\040\123\120\114 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\002\047\265 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Swedish Government Root Authority v3" # @@ -2376,348 +2127,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Tunisian Root Certificate Authority - TunRootCA2" -# -# Issuer: O=National Digital Certification Agency,CN=Tunisian Root Certificate Authority - TunRootCA2,C=TN -# Serial Number:21:66:15:05:05:27:05:05:bc:8a:b0:1d:af:0a:be:c4 -# Subject: O=National Digital Certification Agency,CN=Tunisian Root Certificate Authority - TunRootCA2,C=TN -# Not Valid Before: Tue May 05 08:57:01 2015 -# Not Valid After : Wed May 05 08:57:01 2027 -# Fingerprint (SHA-256): C7:95:FF:8F:F2:0C:96:66:88:F0:64:A1:E0:91:42:1D:31:10:A3:45:6C:17:EC:24:04:B9:98:73:87:41:F6:22 -# Fingerprint (SHA1): 96:38:63:3C:90:56:AE:88:14:A0:65:D2:3B:DC:60:A0:EE:70:2F:A7 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Tunisian Root Certificate Authority - TunRootCA2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\071\060\067\006\003\125\004\003\023\060\124\165\156\151\163\151 -\141\156\040\122\157\157\164\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171\040\055\040 -\124\165\156\122\157\157\164\103\101\062\061\056\060\054\006\003 -\125\004\012\023\045\116\141\164\151\157\156\141\154\040\104\151 -\147\151\164\141\154\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\147\145\156\143\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\071\060\067\006\003\125\004\003\023\060\124\165\156\151\163\151 -\141\156\040\122\157\157\164\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171\040\055\040 -\124\165\156\122\157\157\164\103\101\062\061\056\060\054\006\003 -\125\004\012\023\045\116\141\164\151\157\156\141\154\040\104\151 -\147\151\164\141\154\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\147\145\156\143\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\041\146\025\005\005\047\005\005\274\212\260\035\257\012 -\276\304 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\274\060\202\003\244\240\003\002\001\002\002\020\041 -\146\025\005\005\047\005\005\274\212\260\035\257\012\276\304\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\170 -\061\013\060\011\006\003\125\004\006\023\002\124\116\061\071\060 -\067\006\003\125\004\003\023\060\124\165\156\151\163\151\141\156 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\145\040\101\165\164\150\157\162\151\164\171\040\055\040\124\165 -\156\122\157\157\164\103\101\062\061\056\060\054\006\003\125\004 -\012\023\045\116\141\164\151\157\156\141\154\040\104\151\147\151 -\164\141\154\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\147\145\156\143\171\060\036\027\015\061\065\060\065 -\060\065\060\070\065\067\060\061\132\027\015\062\067\060\065\060 -\065\060\070\065\067\060\061\132\060\170\061\013\060\011\006\003 -\125\004\006\023\002\124\116\061\071\060\067\006\003\125\004\003 -\023\060\124\165\156\151\163\151\141\156\040\122\157\157\164\040 -\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150 -\157\162\151\164\171\040\055\040\124\165\156\122\157\157\164\103 -\101\062\061\056\060\054\006\003\125\004\012\023\045\116\141\164 -\151\157\156\141\154\040\104\151\147\151\164\141\154\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\147\145\156 -\143\171\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\260\007\347\142\373\320\015\125\316\147\267\127\215 -\156\014\251\047\124\036\353\251\044\253\147\217\217\234\141\017 -\333\050\062\057\073\370\054\145\222\055\256\272\063\222\300\053 -\236\362\037\136\155\043\135\263\130\037\215\241\300\155\165\205 -\012\260\023\116\133\126\106\213\071\275\013\202\273\072\103\233 -\010\272\106\356\371\027\353\315\310\327\343\165\023\336\256\121 -\110\012\316\040\225\106\237\002\354\125\214\164\252\132\374\374 -\352\011\063\065\156\243\107\006\307\335\176\204\150\016\307\022 -\312\224\303\355\346\154\002\155\336\002\211\065\263\004\313\105 -\370\174\107\244\323\037\337\345\134\043\342\363\042\173\271\113 -\242\375\027\065\135\110\351\277\365\263\045\143\213\347\170\353 -\374\165\047\275\210\134\246\205\077\101\337\225\174\335\172\106 -\217\376\036\332\261\253\330\323\216\315\006\214\311\330\122\102 -\021\122\242\203\217\134\203\173\344\047\266\217\037\240\136\075 -\322\165\175\171\123\223\006\227\343\003\307\226\054\332\001\074 -\171\305\073\120\350\260\323\241\244\342\323\203\175\104\370\020 -\317\240\032\052\362\145\200\275\167\301\230\145\166\256\022\041 -\142\312\072\276\276\265\231\303\133\304\321\277\233\300\012\312 -\130\036\025\246\327\041\136\261\115\012\345\160\170\232\150\346 -\164\146\062\024\052\036\021\276\210\367\006\366\125\243\303\037 -\156\027\220\125\321\212\100\211\126\103\325\117\346\242\311\210 -\144\000\005\121\077\127\264\074\266\276\152\221\161\100\361\242 -\134\361\327\355\234\266\127\366\131\324\052\021\345\324\345\277 -\273\036\321\310\327\137\104\005\233\273\211\072\255\247\103\167 -\176\025\140\174\210\135\233\354\245\134\322\106\255\014\213\124 -\105\324\224\121\125\105\122\252\134\330\021\254\370\126\042\154 -\331\322\024\351\267\116\102\205\124\106\370\001\306\075\046\006 -\167\350\262\065\033\360\235\102\311\177\376\200\047\001\120\313 -\177\305\254\124\372\153\155\226\214\101\244\241\322\347\265\221 -\110\157\167\034\213\302\053\164\376\074\134\304\135\224\316\253 -\361\040\226\153\301\014\132\137\371\345\065\271\154\243\020\147 -\357\221\252\110\016\357\110\267\166\130\142\331\276\236\102\263 -\244\275\065\002\003\001\000\001\243\102\060\100\060\035\006\003 -\125\035\016\004\026\004\024\314\163\305\243\152\051\061\227\247 -\215\240\330\124\301\012\165\266\043\077\246\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\015\006\011 -\052\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000 -\056\362\207\110\355\231\236\237\001\014\074\311\012\170\123\174 -\030\065\336\266\345\154\364\000\200\341\233\213\331\372\373\252 -\373\145\267\322\311\365\327\247\313\176\311\261\242\161\130\155 -\131\067\326\340\063\020\312\265\331\162\333\116\045\067\252\246 -\335\035\030\275\365\311\212\234\172\210\356\037\002\304\055\222 -\124\175\127\342\134\031\030\043\002\172\134\111\225\266\230\347 -\302\140\101\145\100\273\354\132\267\161\234\120\362\163\166\373 -\137\015\357\065\317\264\151\215\205\350\114\220\027\003\013\311 -\263\056\040\067\143\021\142\246\117\343\064\340\373\171\125\347 -\306\302\256\102\376\260\064\154\111\043\016\162\007\173\146\005 -\125\110\373\022\017\240\300\372\116\321\373\075\314\376\375\026 -\113\126\120\315\021\054\247\233\367\261\012\317\246\353\357\335 -\216\270\256\102\010\174\244\214\224\352\206\307\103\343\367\074 -\212\337\107\322\060\100\310\055\123\365\157\021\111\314\041\214 -\226\103\117\020\240\107\241\126\215\037\034\133\330\126\133\353 -\064\166\341\065\072\161\324\314\041\057\236\065\050\362\132\336 -\236\344\356\107\152\020\350\070\275\112\264\175\004\177\005\256 -\110\012\264\003\277\056\263\012\033\237\313\255\335\115\320\207 -\041\267\107\166\202\203\055\307\127\276\232\025\243\033\060\030 -\154\243\072\161\157\144\107\050\222\333\021\141\040\232\167\145 -\055\371\254\126\023\154\113\243\137\377\233\244\350\357\347\130 -\350\173\236\073\177\152\247\276\071\012\023\224\311\110\116\146 -\144\330\123\114\354\101\153\375\374\066\056\327\016\337\141\013 -\173\265\100\254\335\102\111\155\236\200\277\140\225\360\351\300 -\077\173\273\030\351\070\265\126\116\247\176\212\142\357\230\036 -\370\170\100\251\273\330\351\345\264\264\371\343\147\234\354\123 -\317\270\102\264\057\223\201\065\240\154\366\272\040\212\150\075 -\367\155\377\177\323\114\367\172\224\150\003\167\103\073\065\121 -\252\123\022\076\107\023\024\071\254\326\145\217\250\106\377\074 -\041\364\322\277\320\110\244\176\247\121\233\227\022\365\231\064 -\027\043\126\204\023\143\313\064\312\037\312\272\250\007\051\363 -\103\044\012\111\177\375\016\324\220\360\253\103\041\142\234\217 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Tunisian Root Certificate Authority - TunRootCA2" -# Issuer: O=National Digital Certification Agency,CN=Tunisian Root Certificate Authority - TunRootCA2,C=TN -# Serial Number:21:66:15:05:05:27:05:05:bc:8a:b0:1d:af:0a:be:c4 -# Subject: O=National Digital Certification Agency,CN=Tunisian Root Certificate Authority - TunRootCA2,C=TN -# Not Valid Before: Tue May 05 08:57:01 2015 -# Not Valid After : Wed May 05 08:57:01 2027 -# Fingerprint (SHA-256): C7:95:FF:8F:F2:0C:96:66:88:F0:64:A1:E0:91:42:1D:31:10:A3:45:6C:17:EC:24:04:B9:98:73:87:41:F6:22 -# Fingerprint (SHA1): 96:38:63:3C:90:56:AE:88:14:A0:65:D2:3B:DC:60:A0:EE:70:2F:A7 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Tunisian Root Certificate Authority - TunRootCA2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\226\070\143\074\220\126\256\210\024\240\145\322\073\334\140\240 -\356\160\057\247 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\003\321\045\261\360\125\255\312\335\174\131\223\120\357\027\041 -END -CKA_ISSUER MULTILINE_OCTAL -\060\170\061\013\060\011\006\003\125\004\006\023\002\124\116\061 -\071\060\067\006\003\125\004\003\023\060\124\165\156\151\163\151 -\141\156\040\122\157\157\164\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171\040\055\040 -\124\165\156\122\157\157\164\103\101\062\061\056\060\054\006\003 -\125\004\012\023\045\116\141\164\151\157\156\141\154\040\104\151 -\147\151\164\141\154\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\147\145\156\143\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\041\146\025\005\005\047\005\005\274\212\260\035\257\012 -\276\304 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "TW Government Root Certification Authority 2" -# -# Issuer: O=Government Root Certification Authority,C=TW -# Serial Number:00:b6:4b:88:07:e2:23:ee:c8:5c:12:ad:a6:0e:06:a1:f2 -# Subject: O=Government Root Certification Authority,C=TW -# Not Valid Before: Fri Sep 28 08:58:51 2012 -# Not Valid After : Thu Dec 31 15:59:59 2037 -# Fingerprint (SHA-256): 70:B9:22:BF:DA:0E:3F:4A:34:2E:4E:E2:2D:57:9A:E5:98:D0:71:CC:5E:C9:C3:0F:12:36:80:34:03:88:AE:A5 -# Fingerprint (SHA1): B0:91:AA:91:38:47:F3:13:D7:27:BC:EF:C8:17:9F:08:6F:3A:8C:0F -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TW Government Root Certification Authority 2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\266\113\210\007\342\043\356\310\134\022\255\246\016 -\006\241\362 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\113\060\202\003\063\240\003\002\001\002\002\021\000 -\266\113\210\007\342\043\356\310\134\022\255\246\016\006\241\362 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061\060 -\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156\155 -\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146\151 -\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -\060\036\027\015\061\062\060\071\062\070\060\070\065\070\065\061 -\132\027\015\063\067\061\062\063\061\061\065\065\071\065\071\132 -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001 -\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002 -\001\000\266\377\227\074\201\276\001\130\044\047\257\216\001\053 -\326\162\222\060\062\033\137\233\174\324\324\177\350\241\140\163 -\060\127\020\000\372\120\226\044\376\120\346\214\072\225\321\127 -\171\204\325\147\123\014\052\202\076\030\134\270\060\046\032\326 -\136\306\055\262\004\121\016\357\337\014\143\107\353\304\022\010 -\121\053\231\161\136\325\151\173\341\135\311\167\035\040\354\126 -\216\345\141\140\055\374\351\034\200\337\372\152\203\273\005\265 -\036\043\022\234\202\312\012\363\024\035\040\344\006\217\103\044 -\231\237\266\012\223\132\163\033\026\071\276\005\266\361\214\245 -\144\222\217\005\344\134\166\367\071\303\317\055\275\016\330\313 -\250\016\061\233\311\106\017\147\123\103\004\217\310\262\310\203 -\200\137\272\362\017\253\201\065\242\040\041\227\316\017\211\064 -\170\017\317\037\116\351\373\214\050\074\336\064\347\355\237\322 -\146\365\305\312\061\170\322\316\120\321\140\202\143\235\340\114 -\367\007\256\203\064\235\111\111\103\324\176\275\055\342\352\307 -\161\145\200\010\344\066\236\171\160\012\074\207\051\351\344\222 -\224\352\006\222\051\047\170\346\255\327\075\351\012\013\136\364 -\340\326\206\235\055\162\313\213\144\126\346\364\256\170\245\240 -\071\063\130\074\334\250\217\215\264\152\055\375\210\163\351\225 -\120\163\004\337\021\210\076\102\326\002\164\373\054\304\157\274 -\154\326\340\200\157\321\206\245\062\127\003\326\115\364\116\012 -\231\042\166\176\112\100\202\370\311\344\116\313\123\055\307\261 -\266\342\323\302\165\047\156\271\016\161\262\064\374\277\034\116 -\302\075\370\066\351\012\314\130\232\241\030\206\116\342\341\252 -\263\163\131\156\136\235\264\302\010\257\257\134\375\244\002\157 -\377\270\015\273\325\253\327\156\237\032\117\221\100\360\037\106 -\125\155\240\222\303\211\315\267\261\377\034\263\313\243\234\012 -\343\376\315\252\274\001\354\335\124\312\221\335\117\023\207\244 -\366\230\357\375\111\326\127\052\074\246\134\366\140\067\277\330 -\076\176\116\150\052\043\062\072\276\156\344\042\075\007\044\317 -\212\313\233\135\121\263\060\322\161\155\316\106\212\155\174\112 -\063\104\332\022\057\066\113\362\351\361\121\011\155\333\152\227 -\016\027\002\003\001\000\001\243\102\060\100\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003 -\125\035\016\004\026\004\024\325\147\035\340\234\172\054\234\313 -\305\230\347\035\007\046\052\206\354\164\315\060\016\006\003\125 -\035\017\001\001\377\004\004\003\002\001\006\060\015\006\011\052 -\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\220 -\073\345\302\123\102\050\352\365\061\116\216\075\221\236\115\011 -\363\330\261\122\346\117\254\014\061\041\273\361\352\231\314\203 -\374\266\050\344\354\204\007\016\017\116\227\273\157\150\106\217 -\016\121\025\225\370\072\073\037\137\202\016\014\161\016\274\221 -\117\256\063\056\043\101\364\046\153\117\023\207\372\170\366\056 -\302\017\221\005\227\252\152\301\152\237\274\204\236\010\052\047 -\335\332\207\027\206\341\263\312\135\355\070\251\051\156\204\336 -\106\153\374\047\031\120\245\022\172\214\175\142\374\332\347\314 -\274\237\111\257\006\270\047\047\362\211\367\026\075\030\346\275 -\336\365\214\022\221\237\343\004\215\376\007\024\032\132\254\071 -\202\033\361\070\031\341\143\343\257\154\266\246\121\027\353\372 -\113\353\213\042\366\227\376\020\072\137\224\240\113\123\161\077 -\132\341\020\370\162\217\226\200\335\215\002\230\000\141\075\215 -\274\055\261\107\314\332\135\341\040\247\214\061\134\361\343\332 -\271\012\206\107\310\241\075\007\243\074\246\163\156\224\221\355 -\156\044\072\371\311\060\321\007\250\201\175\046\175\175\204\337 -\206\311\213\345\256\015\036\276\211\110\121\025\203\230\226\057 -\112\353\163\064\327\164\315\311\157\320\302\272\053\366\232\376 -\231\335\140\024\216\033\371\234\071\074\177\103\211\123\350\345 -\302\253\276\042\255\047\070\233\167\050\267\243\143\143\247\201 -\347\251\151\105\353\216\170\126\314\005\204\307\373\255\266\060 -\174\143\005\237\055\214\044\177\113\213\222\374\070\036\237\240 -\245\127\263\156\235\330\144\270\160\232\140\122\160\310\251\320 -\377\306\234\355\020\141\136\315\203\016\156\350\115\002\101\112 -\342\166\004\171\326\124\077\212\230\062\024\240\335\055\234\347 -\272\202\161\243\206\125\051\231\322\051\333\165\072\367\333\103 -\377\266\133\373\267\176\065\200\216\015\154\256\171\267\066\055 -\227\122\241\260\007\234\007\345\053\066\315\003\227\224\275\055 -\016\064\006\374\300\026\211\374\067\124\344\326\317\075\023\004 -\362\221\331\311\066\056\076\305\132\320\245\114\202\303\377\056 -\174\046\166\367\363\375\105\242\245\156\125\256\056\314\317\054 -\211\064\332\366\015\347\221\250\020\352\027\235\362\366\354 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "TW Government Root Certification Authority 2" -# Issuer: O=Government Root Certification Authority,C=TW -# Serial Number:00:b6:4b:88:07:e2:23:ee:c8:5c:12:ad:a6:0e:06:a1:f2 -# Subject: O=Government Root Certification Authority,C=TW -# Not Valid Before: Fri Sep 28 08:58:51 2012 -# Not Valid After : Thu Dec 31 15:59:59 2037 -# Fingerprint (SHA-256): 70:B9:22:BF:DA:0E:3F:4A:34:2E:4E:E2:2D:57:9A:E5:98:D0:71:CC:5E:C9:C3:0F:12:36:80:34:03:88:AE:A5 -# Fingerprint (SHA1): B0:91:AA:91:38:47:F3:13:D7:27:BC:EF:C8:17:9F:08:6F:3A:8C:0F -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TW Government Root Certification Authority 2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\260\221\252\221\070\107\363\023\327\047\274\357\310\027\237\010 -\157\072\214\017 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\057\324\055\315\206\177\066\260\137\034\340\123\215\266\242\133 -END -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\266\113\210\007\342\043\356\310\134\022\255\246\016 -\006\241\362 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Thailand National Root Certification Authority - G1" # @@ -3788,211 +3197,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "SAPO Class 3 Root CA" -# -# Issuer: E=pkiadmin@trustcentre.co.za,CN=SAPO Class 3 Root CA,OU=SAPO Trust Centre,O=South African Post Office Limited,L=Somerset West,ST=Western Cape,C=ZA -# Serial Number: 2 (0x2) -# Subject: E=pkiadmin@trustcentre.co.za,CN=SAPO Class 3 Root CA,OU=SAPO Trust Centre,O=South African Post Office Limited,L=Somerset West,ST=Western Cape,C=ZA -# Not Valid Before: Wed Sep 15 00:00:00 2010 -# Not Valid After : Sat Sep 14 00:00:00 2030 -# Fingerprint (SHA-256): 1A:25:12:CD:A6:74:4A:BE:A1:14:32:A2:FD:C9:F8:C0:88:DB:5A:98:C8:9E:13:35:25:74:CD:E4:D9:E8:0C:DD -# Fingerprint (SHA1): 38:DD:76:59:C7:35:10:0B:00:A2:37:E4:91:B7:BC:0F:FC:D2:31:6C -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SAPO Class 3 Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\316\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\025\060\023\006\003\125\004\010\023\014\127\145\163\164\145 -\162\156\040\103\141\160\145\061\026\060\024\006\003\125\004\007 -\023\015\123\157\155\145\162\163\145\164\040\127\145\163\164\061 -\052\060\050\006\003\125\004\012\023\041\123\157\165\164\150\040 -\101\146\162\151\143\141\156\040\120\157\163\164\040\117\146\146 -\151\143\145\040\114\151\155\151\164\145\144\061\032\060\030\006 -\003\125\004\013\023\021\123\101\120\117\040\124\162\165\163\164 -\040\103\145\156\164\162\145\061\035\060\033\006\003\125\004\003 -\023\024\123\101\120\117\040\103\154\141\163\163\040\063\040\122 -\157\157\164\040\103\101\061\051\060\047\006\011\052\206\110\206 -\367\015\001\011\001\026\032\160\153\151\141\144\155\151\156\100 -\164\162\165\163\164\143\145\156\164\162\145\056\143\157\056\172 -\141 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\316\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\025\060\023\006\003\125\004\010\023\014\127\145\163\164\145 -\162\156\040\103\141\160\145\061\026\060\024\006\003\125\004\007 -\023\015\123\157\155\145\162\163\145\164\040\127\145\163\164\061 -\052\060\050\006\003\125\004\012\023\041\123\157\165\164\150\040 -\101\146\162\151\143\141\156\040\120\157\163\164\040\117\146\146 -\151\143\145\040\114\151\155\151\164\145\144\061\032\060\030\006 -\003\125\004\013\023\021\123\101\120\117\040\124\162\165\163\164 -\040\103\145\156\164\162\145\061\035\060\033\006\003\125\004\003 -\023\024\123\101\120\117\040\103\154\141\163\163\040\063\040\122 -\157\157\164\040\103\101\061\051\060\047\006\011\052\206\110\206 -\367\015\001\011\001\026\032\160\153\151\141\144\155\151\156\100 -\164\162\165\163\164\143\145\156\164\162\145\056\143\157\056\172 -\141 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\002 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\006\130\060\202\004\100\240\003\002\001\002\002\001\002 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\201\316\061\013\060\011\006\003\125\004\006\023\002\132\101\061 -\025\060\023\006\003\125\004\010\023\014\127\145\163\164\145\162 -\156\040\103\141\160\145\061\026\060\024\006\003\125\004\007\023 -\015\123\157\155\145\162\163\145\164\040\127\145\163\164\061\052 -\060\050\006\003\125\004\012\023\041\123\157\165\164\150\040\101 -\146\162\151\143\141\156\040\120\157\163\164\040\117\146\146\151 -\143\145\040\114\151\155\151\164\145\144\061\032\060\030\006\003 -\125\004\013\023\021\123\101\120\117\040\124\162\165\163\164\040 -\103\145\156\164\162\145\061\035\060\033\006\003\125\004\003\023 -\024\123\101\120\117\040\103\154\141\163\163\040\063\040\122\157 -\157\164\040\103\101\061\051\060\047\006\011\052\206\110\206\367 -\015\001\011\001\026\032\160\153\151\141\144\155\151\156\100\164 -\162\165\163\164\143\145\156\164\162\145\056\143\157\056\172\141 -\060\036\027\015\061\060\060\071\061\065\060\060\060\060\060\060 -\132\027\015\063\060\060\071\061\064\060\060\060\060\060\060\132 -\060\201\316\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\025\060\023\006\003\125\004\010\023\014\127\145\163\164\145 -\162\156\040\103\141\160\145\061\026\060\024\006\003\125\004\007 -\023\015\123\157\155\145\162\163\145\164\040\127\145\163\164\061 -\052\060\050\006\003\125\004\012\023\041\123\157\165\164\150\040 -\101\146\162\151\143\141\156\040\120\157\163\164\040\117\146\146 -\151\143\145\040\114\151\155\151\164\145\144\061\032\060\030\006 -\003\125\004\013\023\021\123\101\120\117\040\124\162\165\163\164 -\040\103\145\156\164\162\145\061\035\060\033\006\003\125\004\003 -\023\024\123\101\120\117\040\103\154\141\163\163\040\063\040\122 -\157\157\164\040\103\101\061\051\060\047\006\011\052\206\110\206 -\367\015\001\011\001\026\032\160\153\151\141\144\155\151\156\100 -\164\162\165\163\164\143\145\156\164\162\145\056\143\157\056\172 -\141\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001 -\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002 -\001\000\312\170\032\007\274\366\373\264\267\211\274\320\031\126 -\070\052\131\235\007\352\032\371\370\370\150\147\136\217\357\312 -\367\365\152\211\346\243\225\177\251\333\051\044\034\065\320\070 -\226\154\076\126\044\377\136\142\121\220\056\207\350\234\307\332 -\274\063\361\236\241\157\013\216\012\044\364\370\115\220\246\262 -\315\136\021\323\302\227\114\365\137\100\035\046\044\115\215\011 -\020\013\377\273\040\033\223\046\031\014\103\077\351\216\274\061 -\067\020\156\221\312\110\202\126\106\307\274\271\072\236\106\201 -\146\317\331\350\134\020\317\071\236\145\303\236\305\132\364\113 -\314\104\231\146\206\364\162\033\243\123\111\352\256\107\315\062 -\015\160\346\240\240\166\007\235\377\130\357\344\074\221\300\265 -\344\334\270\001\014\323\376\263\102\240\073\141\002\324\067\133 -\327\114\105\225\322\165\135\365\156\060\137\127\121\213\262\377 -\176\310\213\234\252\243\101\067\014\020\221\250\246\205\134\271 -\307\217\005\121\262\320\170\322\342\113\111\351\324\032\247\073 -\254\252\063\346\232\052\003\100\230\157\164\122\023\061\224\321 -\022\301\264\313\060\371\377\104\270\222\133\122\326\060\331\063 -\321\165\343\031\245\026\025\267\124\127\361\126\120\316\116\276 -\003\073\057\354\266\060\356\024\140\136\137\172\065\364\116\144 -\007\021\352\245\007\146\033\156\223\342\260\117\136\326\340\104 -\340\263\334\256\357\270\375\250\263\354\354\345\071\210\104\264 -\241\273\024\140\144\217\326\222\223\313\363\314\120\335\351\007 -\310\147\147\371\360\207\204\221\262\000\142\351\277\112\025\164 -\305\277\004\114\005\106\135\012\313\345\352\141\000\341\157\101 -\261\064\216\246\000\242\174\246\245\246\372\154\114\103\345\250 -\046\232\064\230\036\207\230\347\114\170\321\217\237\005\125\135 -\212\113\311\317\240\013\175\006\220\234\030\222\262\304\262\327 -\343\105\331\153\163\303\227\071\277\051\036\006\011\125\100\272 -\274\332\110\165\103\355\376\104\176\075\054\346\142\221\003\375 -\075\211\357\176\364\135\044\217\245\013\053\263\076\172\051\050 -\274\273\077\277\353\167\205\004\046\213\224\262\220\365\353\215 -\117\242\104\042\120\250\234\052\104\110\000\170\031\253\235\010 -\226\025\002\003\001\000\001\243\077\060\075\060\016\006\003\125 -\035\017\001\001\377\004\004\003\002\001\006\060\014\006\003\125 -\035\023\004\005\060\003\001\001\377\060\035\006\003\125\035\016 -\004\026\004\024\141\263\171\122\235\112\225\222\121\216\202\044 -\160\323\216\100\310\305\146\320\060\015\006\011\052\206\110\206 -\367\015\001\001\005\005\000\003\202\002\001\000\177\306\263\044 -\204\120\067\371\304\260\305\060\074\026\351\120\015\172\272\264 -\073\322\043\345\351\211\170\152\345\343\033\005\036\221\034\316 -\006\227\215\146\026\007\104\357\201\271\010\176\243\307\071\064 -\270\277\232\155\215\260\301\040\102\056\015\367\013\006\003\117 -\156\313\274\267\260\057\031\161\215\216\257\012\115\130\061\213 -\104\231\052\050\146\205\307\200\046\146\260\107\302\071\262\372 -\117\076\125\275\334\211\047\113\163\063\004\376\173\107\220\311 -\005\300\055\063\370\267\010\202\051\101\103\375\046\123\346\372 -\037\067\126\215\117\027\272\330\375\072\204\160\330\076\360\063 -\256\304\005\110\124\241\271\325\041\077\352\076\307\251\061\107 -\367\233\256\112\142\230\321\147\040\145\336\171\341\261\062\036 -\153\337\373\200\153\107\134\071\307\016\010\252\307\243\356\051 -\351\064\342\233\371\165\270\046\353\210\235\264\071\021\056\160 -\375\121\004\062\273\017\171\204\120\041\105\174\057\344\331\377 -\045\070\006\043\253\116\261\016\334\073\061\012\255\332\113\000 -\151\153\056\342\303\014\311\005\001\105\146\341\245\211\141\034 -\144\231\215\013\230\220\263\176\146\073\013\330\253\350\165\016 -\331\177\232\156\175\311\203\047\311\274\350\064\070\302\132\207 -\062\162\007\014\376\325\224\321\360\300\170\362\200\250\106\365 -\153\232\354\342\331\026\216\212\372\204\366\321\122\311\234\262 -\041\126\140\103\246\020\367\177\111\277\276\007\323\120\144\155 -\002\272\052\125\054\317\331\302\156\257\174\013\110\320\361\341 -\247\302\255\164\217\206\344\355\252\372\134\203\175\102\350\175 -\007\035\007\125\314\053\151\062\271\167\202\150\306\167\362\042 -\151\246\311\012\135\207\231\345\161\236\175\057\023\036\322\364 -\375\011\171\047\130\053\012\207\201\052\373\152\043\055\113\044 -\205\164\026\107\030\017\011\305\376\251\110\044\343\254\320\151 -\075\137\123\230\062\275\354\340\121\301\123\112\261\366\073\360 -\064\110\365\232\336\334\321\340\343\275\045\263\104\350\072\163 -\311\171\320\254\321\355\342\000\012\137\241\035\146\131\112\163 -\150\324\005\162\063\070\247\153\257\221\333\015\307\214\100\350 -\236\220\210\311\373\376\044\327\201\254\363\336 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "SAPO Class 3 Root CA" -# Issuer: E=pkiadmin@trustcentre.co.za,CN=SAPO Class 3 Root CA,OU=SAPO Trust Centre,O=South African Post Office Limited,L=Somerset West,ST=Western Cape,C=ZA -# Serial Number: 2 (0x2) -# Subject: E=pkiadmin@trustcentre.co.za,CN=SAPO Class 3 Root CA,OU=SAPO Trust Centre,O=South African Post Office Limited,L=Somerset West,ST=Western Cape,C=ZA -# Not Valid Before: Wed Sep 15 00:00:00 2010 -# Not Valid After : Sat Sep 14 00:00:00 2030 -# Fingerprint (SHA-256): 1A:25:12:CD:A6:74:4A:BE:A1:14:32:A2:FD:C9:F8:C0:88:DB:5A:98:C8:9E:13:35:25:74:CD:E4:D9:E8:0C:DD -# Fingerprint (SHA1): 38:DD:76:59:C7:35:10:0B:00:A2:37:E4:91:B7:BC:0F:FC:D2:31:6C -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SAPO Class 3 Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\070\335\166\131\307\065\020\013\000\242\067\344\221\267\274\017 -\374\322\061\154 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\124\345\353\065\321\165\005\074\174\337\060\326\277\363\377\123 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\316\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\025\060\023\006\003\125\004\010\023\014\127\145\163\164\145 -\162\156\040\103\141\160\145\061\026\060\024\006\003\125\004\007 -\023\015\123\157\155\145\162\163\145\164\040\127\145\163\164\061 -\052\060\050\006\003\125\004\012\023\041\123\157\165\164\150\040 -\101\146\162\151\143\141\156\040\120\157\163\164\040\117\146\146 -\151\143\145\040\114\151\155\151\164\145\144\061\032\060\030\006 -\003\125\004\013\023\021\123\101\120\117\040\124\162\165\163\164 -\040\103\145\156\164\162\145\061\035\060\033\006\003\125\004\003 -\023\024\123\101\120\117\040\103\154\141\163\163\040\063\040\122 -\157\157\164\040\103\101\061\051\060\047\006\011\052\206\110\206 -\367\015\001\011\001\026\032\160\153\151\141\144\155\151\156\100 -\164\162\165\163\164\143\145\156\164\162\145\056\143\157\056\172 -\141 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\002 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "IdenTrust Commercial Root CA 1" # @@ -5190,375 +4394,20 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Autoridad Certificadora Raíz Nacional de Uruguay" +# Certificate "T-TeleSec GlobalRoot Class 2" # -# Issuer: C=UY,O=AGESIC,CN=Autoridad Certificadora Ra..z Nacional de Uruguay -# Serial Number:02:ee:00:9b:66:d8:6a:1d:67:fe:da:8a:25:6f:21:5a:75:1b -# Subject: C=UY,O=AGESIC,CN=Autoridad Certificadora Ra..z Nacional de Uruguay -# Not Valid Before: Thu Nov 03 15:02:49 2011 -# Not Valid After : Wed Oct 29 15:02:49 2031 -# Fingerprint (SHA-256): 55:33:A0:40:1F:61:2C:68:8E:BC:E5:BF:53:F2:EC:14:A7:34:EB:17:8B:FA:E0:0E:50:E8:5D:AE:67:23:07:8A -# Fingerprint (SHA1): 7A:1C:DD:E3:D2:19:7E:71:37:43:3D:3F:99:C0:B3:69:F7:06:C7:49 +# Issuer: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE +# Serial Number: 1 (0x1) +# Subject: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE +# Not Valid Before: Wed Oct 01 10:40:14 2008 +# Not Valid After : Sat Oct 01 23:59:59 2033 +# Fingerprint (SHA-256): 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52 +# Fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Autoridad Certificadora Raíz Nacional de Uruguay" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\132\061\072\060\070\006\003\125\004\003\014\061\101\165\164 -\157\162\151\144\141\144\040\103\145\162\164\151\146\151\143\141 -\144\157\162\141\040\122\141\303\255\172\040\116\141\143\151\157 -\156\141\154\040\144\145\040\125\162\165\147\165\141\171\061\017 -\060\015\006\003\125\004\012\023\006\101\107\105\123\111\103\061 -\013\060\011\006\003\125\004\006\023\002\125\131 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\132\061\072\060\070\006\003\125\004\003\014\061\101\165\164 -\157\162\151\144\141\144\040\103\145\162\164\151\146\151\143\141 -\144\157\162\141\040\122\141\303\255\172\040\116\141\143\151\157 -\156\141\154\040\144\145\040\125\162\165\147\165\141\171\061\017 -\060\015\006\003\125\004\012\023\006\101\107\105\123\111\103\061 -\013\060\011\006\003\125\004\006\023\002\125\131 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\002\356\000\233\146\330\152\035\147\376\332\212\045\157 -\041\132\165\033 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\006\235\060\202\004\205\240\003\002\001\002\002\022\002 -\356\000\233\146\330\152\035\147\376\332\212\045\157\041\132\165 -\033\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000 -\060\132\061\072\060\070\006\003\125\004\003\014\061\101\165\164 -\157\162\151\144\141\144\040\103\145\162\164\151\146\151\143\141 -\144\157\162\141\040\122\141\303\255\172\040\116\141\143\151\157 -\156\141\154\040\144\145\040\125\162\165\147\165\141\171\061\017 -\060\015\006\003\125\004\012\023\006\101\107\105\123\111\103\061 -\013\060\011\006\003\125\004\006\023\002\125\131\060\036\027\015 -\061\061\061\061\060\063\061\065\060\062\064\071\132\027\015\063 -\061\061\060\062\071\061\065\060\062\064\071\132\060\132\061\072 -\060\070\006\003\125\004\003\014\061\101\165\164\157\162\151\144 -\141\144\040\103\145\162\164\151\146\151\143\141\144\157\162\141 -\040\122\141\303\255\172\040\116\141\143\151\157\156\141\154\040 -\144\145\040\125\162\165\147\165\141\171\061\017\060\015\006\003 -\125\004\012\023\006\101\107\105\123\111\103\061\013\060\011\006 -\003\125\004\006\023\002\125\131\060\202\002\040\060\015\006\011 -\052\206\110\206\367\015\001\001\001\005\000\003\202\002\015\000 -\060\202\002\010\002\202\002\001\000\227\304\037\052\104\241\201 -\113\110\221\165\335\353\332\217\312\033\213\362\264\074\054\306 -\345\364\301\036\321\270\060\023\157\134\237\345\121\226\177\032 -\244\026\376\322\324\035\045\366\320\346\067\140\137\000\243\031 -\251\354\047\277\120\055\005\240\134\136\223\353\343\150\375\233 -\075\271\024\066\055\347\045\025\020\220\032\222\311\021\261\051 -\227\223\126\125\142\255\107\254\177\325\014\167\226\322\223\150 -\152\061\335\124\357\223\362\012\117\240\137\002\132\357\266\104 -\076\347\231\262\216\105\336\240\367\300\350\110\260\107\354\336 -\102\024\333\065\173\240\151\374\036\300\001\051\026\332\063\241 -\041\241\062\062\020\166\175\250\307\300\056\163\203\144\374\132 -\367\233\066\214\151\355\040\125\043\171\315\363\363\154\153\140 -\134\170\215\374\075\205\054\274\251\367\160\350\245\312\115\330 -\174\230\357\206\166\030\204\325\100\051\020\047\062\347\357\003 -\104\013\117\311\052\361\266\264\053\240\325\003\224\204\041\323 -\164\363\051\155\170\360\005\152\256\001\017\141\037\306\245\360 -\307\202\025\331\073\373\335\213\164\151\356\344\307\307\364\021 -\334\024\121\301\204\032\045\126\023\153\133\316\137\054\375\213 -\033\055\017\310\300\125\252\030\117\230\234\317\242\167\010\264 -\065\225\330\271\213\234\111\016\264\020\013\374\374\107\115\324 -\232\127\371\237\172\275\351\127\273\264\017\137\025\220\330\150 -\154\325\205\045\203\055\206\014\107\142\227\263\171\115\271\145 -\010\167\122\157\112\343\156\200\300\254\243\325\274\352\111\342 -\145\342\114\131\152\202\336\053\365\252\076\376\145\350\121\160 -\115\067\204\006\004\077\222\203\324\126\050\343\045\325\124\312 -\205\356\126\300\056\316\371\160\020\022\137\135\236\306\274\113 -\020\035\126\155\312\162\301\123\011\052\023\075\330\265\371\034 -\073\105\306\207\024\320\070\176\236\041\137\374\166\035\377\013 -\051\102\333\241\304\171\071\341\115\325\206\120\343\362\340\263 -\327\131\233\336\077\036\032\003\363\324\151\206\113\107\034\062 -\177\074\007\011\023\020\247\233\007\060\167\063\274\151\021\321 -\064\075\174\020\052\270\036\216\275\107\336\371\262\171\125\146 -\041\002\007\373\071\054\012\027\241\002\001\003\243\202\001\135 -\060\202\001\131\060\016\006\003\125\035\017\001\001\377\004\004 -\003\002\001\006\060\017\006\003\125\035\023\001\001\377\004\005 -\060\003\001\001\377\060\142\006\003\125\035\037\004\133\060\131 -\060\054\240\052\240\050\206\046\150\164\164\160\072\057\057\167 -\167\167\056\141\147\145\163\151\143\056\147\165\142\056\165\171 -\057\141\143\162\156\057\141\143\162\156\056\143\162\154\060\051 -\240\047\240\045\206\043\150\164\164\160\072\057\057\167\167\167 -\056\165\143\145\056\147\165\142\056\165\171\057\141\143\162\156 -\057\141\143\162\156\056\143\162\154\060\201\262\006\003\125\035 -\040\004\201\252\060\201\247\060\134\006\013\140\206\132\204\342 -\256\035\204\210\005\000\060\115\060\113\006\010\053\006\001\005 -\005\007\002\001\026\077\150\164\164\160\072\057\057\167\167\167 -\056\165\143\145\056\147\165\142\056\165\171\057\151\156\146\157 -\162\155\141\143\151\157\156\055\164\145\143\156\151\143\141\057 -\160\157\154\151\164\151\143\141\163\057\143\160\137\141\143\162 -\156\056\160\144\146\060\107\006\013\140\206\132\204\342\256\035 -\204\210\005\001\060\070\060\066\006\010\053\006\001\005\005\007 -\002\001\026\052\150\164\164\160\072\057\057\167\167\167\056\141 -\147\145\163\151\143\056\147\165\142\056\165\171\057\141\143\162 -\156\057\143\160\163\137\141\143\162\156\056\160\144\146\060\035 -\006\003\125\035\016\004\026\004\024\222\236\221\270\125\050\075 -\167\102\054\063\245\230\137\320\311\254\215\265\243\060\015\006 -\011\052\206\110\206\367\015\001\001\013\005\000\003\202\002\001 -\000\135\347\253\131\352\111\334\277\106\103\375\224\273\230\160 -\224\024\372\316\003\135\361\175\061\023\222\116\205\044\060\024 -\153\154\323\347\316\346\171\325\333\116\125\116\027\053\327\223 -\105\337\023\014\047\147\035\307\102\220\124\060\306\361\250\151 -\050\264\116\246\155\245\065\246\120\226\150\111\243\356\057\013 -\253\374\003\002\120\150\361\225\051\076\161\054\334\332\345\055 -\331\166\056\356\126\063\176\027\241\047\002\341\241\047\050\041 -\212\277\001\347\142\307\273\262\045\004\332\033\246\043\214\174 -\223\272\311\213\353\012\371\067\267\224\071\375\115\217\176\242 -\334\201\157\033\255\024\017\133\040\003\170\101\163\147\236\322 -\227\027\220\052\212\124\113\247\171\177\044\022\221\237\073\054 -\307\067\244\014\134\162\152\023\236\062\011\047\353\103\062\165 -\137\327\107\303\052\105\123\025\126\166\117\273\011\350\204\140 -\021\357\163\325\347\120\156\151\050\375\353\306\313\312\116\023 -\143\015\016\067\054\061\037\333\247\130\240\262\375\015\027\207 -\263\222\256\033\050\200\037\266\222\176\206\021\341\366\114\230 -\177\146\213\037\023\111\003\102\374\373\230\234\356\206\226\251 -\056\005\176\160\034\301\167\310\351\135\202\270\016\316\133\144 -\005\143\356\077\006\055\066\014\351\037\162\133\036\254\335\046 -\365\034\070\156\375\214\075\115\206\353\047\313\312\003\215\100 -\363\052\321\212\330\064\016\302\255\265\210\355\207\232\212\205 -\242\207\357\351\271\070\347\150\226\243\001\317\202\075\034\113 -\050\235\047\365\371\231\226\173\110\375\254\320\360\062\367\070 -\004\335\115\231\256\016\222\202\303\372\074\033\023\307\150\267 -\135\340\223\106\270\270\270\244\014\304\033\306\272\106\226\335 -\236\125\017\107\235\366\201\245\254\145\131\330\335\256\006\154 -\340\103\202\306\147\330\160\002\065\365\066\004\343\112\071\251 -\165\002\036\346\077\106\317\234\054\036\204\210\027\252\046\251 -\246\103\200\340\300\133\243\144\203\233\232\355\153\001\145\266 -\301\075\030\354\223\031\146\224\250\323\021\120\231\172\210\175 -\257\076\177\224\220\073\012\303\152\267\215\137\322\247\121\321 -\062\037\271\362\062\175\167\223\155\103\354\101\151\253\317\311 -\141 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Autoridad Certificadora Raíz Nacional de Uruguay" -# Issuer: C=UY,O=AGESIC,CN=Autoridad Certificadora Ra..z Nacional de Uruguay -# Serial Number:02:ee:00:9b:66:d8:6a:1d:67:fe:da:8a:25:6f:21:5a:75:1b -# Subject: C=UY,O=AGESIC,CN=Autoridad Certificadora Ra..z Nacional de Uruguay -# Not Valid Before: Thu Nov 03 15:02:49 2011 -# Not Valid After : Wed Oct 29 15:02:49 2031 -# Fingerprint (SHA-256): 55:33:A0:40:1F:61:2C:68:8E:BC:E5:BF:53:F2:EC:14:A7:34:EB:17:8B:FA:E0:0E:50:E8:5D:AE:67:23:07:8A -# Fingerprint (SHA1): 7A:1C:DD:E3:D2:19:7E:71:37:43:3D:3F:99:C0:B3:69:F7:06:C7:49 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Autoridad Certificadora Raíz Nacional de Uruguay" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\172\034\335\343\322\031\176\161\067\103\075\077\231\300\263\151 -\367\006\307\111 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\173\267\347\056\144\030\344\021\014\367\102\170\076\145\242\256 -END -CKA_ISSUER MULTILINE_OCTAL -\060\132\061\072\060\070\006\003\125\004\003\014\061\101\165\164 -\157\162\151\144\141\144\040\103\145\162\164\151\146\151\143\141 -\144\157\162\141\040\122\141\303\255\172\040\116\141\143\151\157 -\156\141\154\040\144\145\040\125\162\165\147\165\141\171\061\017 -\060\015\006\003\125\004\012\023\006\101\107\105\123\111\103\061 -\013\060\011\006\003\125\004\006\023\002\125\131 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\022\002\356\000\233\146\330\152\035\147\376\332\212\045\157 -\041\132\165\033 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "TM Applied Business Root Certificate" -# -# Issuer: CN=TM Applied Business Root Certificate,OU=TM Applied Business Certification Authority,O=TM,C=my -# Serial Number: 1 (0x1) -# Subject: CN=TM Applied Business Root Certificate,OU=TM Applied Business Certification Authority,O=TM,C=my -# Not Valid Before: Mon Oct 10 06:23:39 2011 -# Not Valid After : Fri Oct 10 06:53:39 2031 -# Fingerprint (SHA-256): A9:C7:7A:F1:BC:DF:AA:37:39:44:2B:0B:27:34:C6:8E:AF:2E:98:33:F0:D7:66:FB:CA:A6:F2:AE:B4:2D:EC:02 -# Fingerprint (SHA1): 99:57:C5:3F:C5:9F:B8:E7:39:F7:A4:B7:A7:0E:9B:8E:65:9F:20:8C -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TM Applied Business Root Certificate" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\177\061\013\060\011\006\003\125\004\006\023\002\155\171\061 -\013\060\011\006\003\125\004\012\014\002\124\115\061\064\060\062 -\006\003\125\004\013\014\053\124\115\040\101\160\160\154\151\145 -\144\040\102\165\163\151\156\145\163\163\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\061\055\060\053\006\003\125\004\003\014\044\124\115\040 -\101\160\160\154\151\145\144\040\102\165\163\151\156\145\163\163 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\145 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\177\061\013\060\011\006\003\125\004\006\023\002\155\171\061 -\013\060\011\006\003\125\004\012\014\002\124\115\061\064\060\062 -\006\003\125\004\013\014\053\124\115\040\101\160\160\154\151\145 -\144\040\102\165\163\151\156\145\163\163\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\061\055\060\053\006\003\125\004\003\014\044\124\115\040 -\101\160\160\154\151\145\144\040\102\165\163\151\156\145\163\163 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\344\060\202\003\314\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\177\061\013\060\011\006\003\125\004\006\023\002\155\171\061\013 -\060\011\006\003\125\004\012\014\002\124\115\061\064\060\062\006 -\003\125\004\013\014\053\124\115\040\101\160\160\154\151\145\144 -\040\102\165\163\151\156\145\163\163\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171\061\055\060\053\006\003\125\004\003\014\044\124\115\040\101 -\160\160\154\151\145\144\040\102\165\163\151\156\145\163\163\040 -\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164\145 -\060\036\027\015\061\061\061\060\061\060\060\066\062\063\063\071 -\132\027\015\063\061\061\060\061\060\060\066\065\063\063\071\132 -\060\177\061\013\060\011\006\003\125\004\006\023\002\155\171\061 -\013\060\011\006\003\125\004\012\014\002\124\115\061\064\060\062 -\006\003\125\004\013\014\053\124\115\040\101\160\160\154\151\145 -\144\040\102\165\163\151\156\145\163\163\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\061\055\060\053\006\003\125\004\003\014\044\124\115\040 -\101\160\160\154\151\145\144\040\102\165\163\151\156\145\163\163 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\145\060\202\001\040\060\015\006\011\052\206\110\206\367\015\001 -\001\001\005\000\003\202\001\015\000\060\202\001\010\002\202\001 -\001\000\305\267\165\031\136\353\364\102\011\215\261\152\154\156 -\062\166\244\005\007\017\217\053\144\072\357\153\307\267\033\127 -\132\045\063\300\141\030\243\202\035\200\167\355\355\034\144\262 -\100\272\310\302\125\265\137\216\302\335\221\156\363\305\347\243 -\071\233\114\057\176\243\346\367\217\025\134\175\033\132\272\226 -\226\223\240\141\162\040\104\210\047\253\101\107\167\076\136\060 -\245\213\065\350\060\106\240\130\352\116\002\155\075\142\015\071 -\363\144\256\146\356\334\022\176\031\113\321\277\302\202\104\372 -\371\327\231\110\354\263\014\364\142\147\065\233\235\106\150\107 -\227\246\042\136\023\126\000\013\121\365\373\144\137\133\340\277 -\362\157\357\105\324\256\306\257\334\234\037\355\024\035\262\246 -\357\007\070\347\010\167\066\252\271\250\074\071\032\345\221\150 -\252\220\216\301\230\031\344\352\155\205\223\033\006\346\334\121 -\013\241\000\354\304\256\162\247\034\151\021\162\076\334\316\363 -\070\127\327\032\032\127\024\115\213\120\166\105\125\163\060\043 -\157\113\257\112\110\102\223\102\137\371\361\332\071\134\006\325 -\017\311\002\001\003\243\202\001\153\060\202\001\147\060\201\253 -\006\003\125\035\043\004\201\243\060\201\240\200\024\100\032\373 -\264\226\067\226\203\337\054\073\024\355\034\306\313\336\040\155 -\010\241\201\204\244\201\201\060\177\061\013\060\011\006\003\125 -\004\006\023\002\155\171\061\013\060\011\006\003\125\004\012\014 -\002\124\115\061\064\060\062\006\003\125\004\013\014\053\124\115 -\040\101\160\160\154\151\145\144\040\102\165\163\151\156\145\163 -\163\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040 -\101\165\164\150\157\162\151\164\171\061\055\060\053\006\003\125 -\004\003\014\044\124\115\040\101\160\160\154\151\145\144\040\102 -\165\163\151\156\145\163\163\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\202\001\001\060\035\006\003\125 -\035\016\004\026\004\024\100\032\373\264\226\067\226\203\337\054 -\073\024\355\034\306\313\336\040\155\010\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\167\006\003\125 -\035\037\004\160\060\156\060\154\240\152\240\150\206\146\154\144 -\141\160\072\057\057\154\144\141\160\056\164\155\143\141\056\143 -\157\155\056\155\171\072\063\070\071\057\143\156\075\141\162\154 -\061\144\160\061\054\157\165\075\101\122\114\054\157\165\075\124 -\115\040\101\160\160\154\151\145\144\040\102\165\163\151\156\145 -\163\163\040\103\145\162\164\151\146\151\143\141\164\151\157\156 -\040\101\165\164\150\157\162\151\164\171\054\157\075\124\115\054 -\143\075\155\171\060\015\006\011\052\206\110\206\367\015\001\001 -\013\005\000\003\202\001\001\000\100\211\136\227\104\012\253\146 -\061\053\155\334\116\246\347\055\261\107\377\122\171\363\355\333 -\247\201\351\072\074\125\147\365\105\321\356\031\171\375\067\340 -\256\244\050\242\030\070\336\317\322\227\222\244\071\274\124\203 -\357\035\241\201\147\310\214\046\145\206\272\312\157\000\102\130 -\115\272\031\146\267\033\100\121\045\222\320\202\025\210\154\142 -\062\342\361\100\022\335\276\300\357\020\362\046\204\045\365\364 -\152\017\131\077\043\031\035\275\015\274\071\072\274\332\334\156 -\077\016\214\046\221\044\063\314\375\063\071\214\135\242\273\107 -\227\347\020\052\204\046\124\261\053\176\137\371\252\177\355\307 -\376\312\043\246\125\277\337\312\136\340\373\076\247\122\326\052 -\072\245\173\143\362\205\374\041\064\053\301\256\360\101\220\030 -\077\105\304\043\215\274\073\206\335\252\106\147\151\207\041\242 -\127\026\246\247\174\073\376\211\040\107\030\372\325\162\375\134 -\072\150\265\073\341\074\302\053\113\170\123\125\132\262\366\206 -\276\300\075\333\110\377\360\300\172\020\324\036\337\344\266\056 -\302\032\324\016\172\152\240\166 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "TM Applied Business Root Certificate" -# Issuer: CN=TM Applied Business Root Certificate,OU=TM Applied Business Certification Authority,O=TM,C=my -# Serial Number: 1 (0x1) -# Subject: CN=TM Applied Business Root Certificate,OU=TM Applied Business Certification Authority,O=TM,C=my -# Not Valid Before: Mon Oct 10 06:23:39 2011 -# Not Valid After : Fri Oct 10 06:53:39 2031 -# Fingerprint (SHA-256): A9:C7:7A:F1:BC:DF:AA:37:39:44:2B:0B:27:34:C6:8E:AF:2E:98:33:F0:D7:66:FB:CA:A6:F2:AE:B4:2D:EC:02 -# Fingerprint (SHA1): 99:57:C5:3F:C5:9F:B8:E7:39:F7:A4:B7:A7:0E:9B:8E:65:9F:20:8C -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TM Applied Business Root Certificate" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\231\127\305\077\305\237\270\347\071\367\244\267\247\016\233\216 -\145\237\040\214 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\272\240\127\377\263\142\143\322\121\066\203\010\243\102\160\170 -END -CKA_ISSUER MULTILINE_OCTAL -\060\177\061\013\060\011\006\003\125\004\006\023\002\155\171\061 -\013\060\011\006\003\125\004\012\014\002\124\115\061\064\060\062 -\006\003\125\004\013\014\053\124\115\040\101\160\160\154\151\145 -\144\040\102\165\163\151\156\145\163\163\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\061\055\060\053\006\003\125\004\003\014\044\124\115\040 -\101\160\160\154\151\145\144\040\102\165\163\151\156\145\163\163 -\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 -\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "T-TeleSec GlobalRoot Class 2" -# -# Issuer: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE -# Serial Number: 1 (0x1) -# Subject: CN=T-TeleSec GlobalRoot Class 2,OU=T-Systems Trust Center,O=T-Systems Enterprise Services GmbH,C=DE -# Not Valid Before: Wed Oct 01 10:40:14 2008 -# Not Valid After : Sat Oct 01 23:59:59 2033 -# Fingerprint (SHA-256): 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52 -# Fingerprint (SHA1): 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "T-TeleSec GlobalRoot Class 2" +CKA_LABEL UTF8 "T-TeleSec GlobalRoot Class 2" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL \060\201\202\061\013\060\011\006\003\125\004\006\023\002\104\105 @@ -7352,171 +6201,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Inera AB" -# -# Issuer: CN=SITHS Root CA v1,O=Inera AB,C=SE -# Serial Number:00:90:66:61:a8:62:3d:65:44:77:04:3f:71:9a:c3:97:0c -# Subject: CN=SITHS Root CA v1,O=Inera AB,C=SE -# Not Valid Before: Thu Mar 29 07:54:49 2012 -# Not Valid After : Mon Mar 29 07:54:49 2032 -# Fingerprint (SHA-256): FC:50:B2:6B:DC:4A:8F:DF:13:44:CC:80:15:7A:E1:3A:C6:71:E2:70:6F:AC:FC:06:05:FE:34:E2:49:EB:72:D6 -# Fingerprint (SHA1): 58:5F:78:75:BE:E7:43:3E:B0:79:EA:AB:7D:05:BB:0F:7A:F2:BC:CC -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Inera AB" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\073\061\013\060\011\006\003\125\004\006\023\002\123\105\061 -\021\060\017\006\003\125\004\012\014\010\111\156\145\162\141\040 -\101\102\061\031\060\027\006\003\125\004\003\014\020\123\111\124 -\110\123\040\122\157\157\164\040\103\101\040\166\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\073\061\013\060\011\006\003\125\004\006\023\002\123\105\061 -\021\060\017\006\003\125\004\012\014\010\111\156\145\162\141\040 -\101\102\061\031\060\027\006\003\125\004\003\014\020\123\111\124 -\110\123\040\122\157\157\164\040\103\101\040\166\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\220\146\141\250\142\075\145\104\167\004\077\161\232 -\303\227\014 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\223\060\202\003\173\240\003\002\001\002\002\021\000 -\220\146\141\250\142\075\145\104\167\004\077\161\232\303\227\014 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\073\061\013\060\011\006\003\125\004\006\023\002\123\105\061\021 -\060\017\006\003\125\004\012\014\010\111\156\145\162\141\040\101 -\102\061\031\060\027\006\003\125\004\003\014\020\123\111\124\110 -\123\040\122\157\157\164\040\103\101\040\166\061\060\036\027\015 -\061\062\060\063\062\071\060\067\065\064\064\071\132\027\015\063 -\062\060\063\062\071\060\067\065\064\064\071\132\060\073\061\013 -\060\011\006\003\125\004\006\023\002\123\105\061\021\060\017\006 -\003\125\004\012\014\010\111\156\145\162\141\040\101\102\061\031 -\060\027\006\003\125\004\003\014\020\123\111\124\110\123\040\122 -\157\157\164\040\103\101\040\166\061\060\202\002\042\060\015\006 -\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017 -\000\060\202\002\012\002\202\002\001\000\300\355\346\236\250\254 -\250\377\330\065\271\374\373\360\225\117\077\075\107\043\321\222 -\311\311\370\360\342\037\206\255\210\077\340\000\317\117\021\225 -\141\075\245\326\040\031\321\210\322\302\126\011\105\040\241\052 -\352\042\303\352\272\314\102\151\236\270\205\237\160\300\154\247 -\276\157\243\134\335\103\210\007\315\312\051\337\151\172\037\055 -\237\126\152\033\142\040\041\141\306\120\113\145\165\111\106\277 -\134\327\051\036\302\036\205\102\341\016\070\115\303\066\161\102 -\104\121\072\321\130\314\311\264\252\154\100\307\203\361\307\011 -\237\112\363\153\363\007\026\065\364\202\216\136\213\204\334\161 -\171\271\373\156\127\105\267\305\160\072\377\102\002\321\064\277 -\205\160\155\117\217\347\037\031\041\367\325\064\274\356\131\346 -\056\042\363\161\202\142\031\237\005\144\174\073\042\161\030\245 -\055\301\170\130\231\321\257\336\224\100\006\031\166\023\120\207 -\043\313\107\127\256\154\305\023\352\232\205\122\303\312\127\046 -\037\336\026\155\255\161\176\362\330\141\375\346\066\116\161\032 -\235\323\040\065\255\022\041\130\165\066\213\211\026\244\067\050 -\317\240\203\072\100\243\312\021\357\264\345\220\033\343\145\222 -\147\230\157\016\051\345\147\030\327\210\372\215\266\307\172\245 -\240\177\221\036\253\266\371\164\230\166\122\140\057\132\067\231 -\250\333\321\076\326\204\152\157\122\323\264\332\032\307\270\262 -\321\224\021\037\305\210\211\351\133\251\243\224\346\242\175\115 -\247\062\211\241\336\046\153\315\325\243\362\062\033\332\065\023 -\211\021\111\115\277\106\061\273\351\055\023\370\016\000\245\376 -\003\365\126\106\074\217\023\053\340\345\307\036\003\337\212\352 -\106\205\105\206\331\355\136\013\270\144\223\364\320\130\056\051 -\215\105\127\115\211\165\220\145\314\152\073\301\234\200\271\264 -\200\065\003\216\337\156\052\223\276\246\276\012\001\104\157\100 -\163\252\052\202\034\204\166\177\151\335\261\273\222\130\350\100 -\121\162\134\367\076\071\104\372\245\231\240\177\215\213\260\101 -\130\167\255\042\305\240\300\272\375\061\231\065\152\331\311\040 -\032\136\363\275\274\010\177\335\111\055\057\235\221\020\015\133 -\250\077\317\264\127\163\073\133\340\147\002\003\001\000\001\243 -\201\221\060\201\216\060\017\006\003\125\035\023\001\001\377\004 -\005\060\003\001\001\377\060\114\006\003\125\035\040\004\105\060 -\103\060\101\006\011\052\205\160\112\010\001\002\001\001\060\064 -\060\062\006\010\053\006\001\005\005\007\002\001\026\046\150\164 -\164\160\072\057\057\143\160\163\056\163\151\164\150\163\056\163 -\145\057\163\151\164\150\163\162\157\157\164\143\141\166\061\056 -\150\164\155\154\060\016\006\003\125\035\017\001\001\377\004\004 -\003\002\001\006\060\035\006\003\125\035\016\004\026\004\024\062 -\371\235\117\151\351\230\215\240\326\214\175\371\035\316\243\074 -\272\166\025\060\015\006\011\052\206\110\206\367\015\001\001\005 -\005\000\003\202\002\001\000\037\077\343\170\130\310\012\312\064 -\042\011\330\262\005\213\321\145\234\341\327\327\175\012\300\034 -\230\245\044\122\070\063\332\144\042\043\200\256\376\075\200\276 -\117\217\335\203\366\015\114\063\132\325\243\073\120\212\122\132 -\046\024\163\121\224\344\122\227\143\333\267\006\250\357\217\255 -\342\355\336\243\277\040\321\106\333\055\170\350\054\047\104\234 -\074\354\267\027\374\211\227\363\243\242\136\302\131\123\340\317 -\344\265\001\073\143\123\050\323\257\146\113\064\071\257\141\016 -\076\233\356\263\211\326\223\240\073\001\304\263\043\124\020\074 -\115\327\252\260\332\331\154\312\060\104\055\335\262\050\142\212 -\101\140\362\100\023\154\260\174\076\101\340\213\246\064\361\347 -\256\121\207\003\216\231\177\331\150\242\366\234\015\171\202\262 -\237\337\044\310\146\140\350\266\110\104\047\310\153\126\267\104 -\205\316\002\267\323\212\161\134\127\121\127\041\214\352\302\121 -\017\120\077\200\253\004\115\311\122\335\344\245\362\056\037\155 -\165\272\207\035\220\013\356\030\204\200\163\273\213\225\204\212 -\141\015\116\135\142\237\343\146\014\373\066\016\047\323\110\370 -\006\210\006\245\137\356\176\134\335\255\012\035\075\034\252\100 -\171\230\171\270\120\214\066\215\013\012\066\013\325\076\347\135 -\201\335\154\334\155\261\157\015\164\236\054\057\302\005\362\104 -\021\262\063\372\201\305\112\155\076\105\326\054\342\153\137\056 -\344\103\225\121\033\231\061\005\337\045\033\163\321\173\234\304 -\163\111\373\142\140\331\151\143\335\321\076\145\155\107\372\144 -\114\003\130\120\331\246\276\345\052\150\353\077\213\020\361\346 -\273\042\006\050\232\240\244\230\151\157\066\264\324\015\016\014 -\175\300\051\061\273\054\003\047\341\147\247\275\321\213\056\266 -\207\304\012\340\011\013\202\241\346\117\130\235\373\330\370\141 -\341\312\227\304\270\267\120\071\314\061\116\375\055\034\032\366 -\107\343\154\354\033\005\350\177\027\065\020\204\332\063\347\064 -\346\265\244\353\304\042\007\112\366\233\130\330\017\234\100\373 -\261\213\137\242\375\231\352\242\173\131\142\321\136\256\321\112 -\162\030\053\113\066\071\162\007\232\132\360\143\072\317\033\371 -\317\335\110\163\131\160\344 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Inera AB" -# Issuer: CN=SITHS Root CA v1,O=Inera AB,C=SE -# Serial Number:00:90:66:61:a8:62:3d:65:44:77:04:3f:71:9a:c3:97:0c -# Subject: CN=SITHS Root CA v1,O=Inera AB,C=SE -# Not Valid Before: Thu Mar 29 07:54:49 2012 -# Not Valid After : Mon Mar 29 07:54:49 2032 -# Fingerprint (SHA-256): FC:50:B2:6B:DC:4A:8F:DF:13:44:CC:80:15:7A:E1:3A:C6:71:E2:70:6F:AC:FC:06:05:FE:34:E2:49:EB:72:D6 -# Fingerprint (SHA1): 58:5F:78:75:BE:E7:43:3E:B0:79:EA:AB:7D:05:BB:0F:7A:F2:BC:CC -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Inera AB" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\130\137\170\165\276\347\103\076\260\171\352\253\175\005\273\017 -\172\362\274\314 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\177\173\002\154\150\237\062\003\307\257\004\235\354\043\337\363 -END -CKA_ISSUER MULTILINE_OCTAL -\060\073\061\013\060\011\006\003\125\004\006\023\002\123\105\061 -\021\060\017\006\003\125\004\012\014\010\111\156\145\162\141\040 -\101\102\061\031\060\027\006\003\125\004\003\014\020\123\111\124 -\110\123\040\122\157\157\164\040\103\101\040\166\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\021\000\220\146\141\250\142\075\145\104\167\004\077\161\232 -\303\227\014 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "GPKIRootCA1" # @@ -7943,204 +6627,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "?Autoridade Certificadora Raiz Brasileira v2" -# -# Issuer: CN=Autoridade Certificadora Raiz Brasileira v2,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Serial Number: 1 (0x1) -# Subject: CN=Autoridade Certificadora Raiz Brasileira v2,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Not Valid Before: Mon Jun 21 19:04:57 2010 -# Not Valid After : Wed Jun 21 19:04:57 2023 -# Fingerprint (SHA-256): FB:47:D9:2A:99:09:FD:4F:A9:BE:C0:27:37:54:3E:1F:35:14:CE:D7:47:40:7A:8D:9C:FA:39:7B:09:15:06:7C -# Fingerprint (SHA1): A9:82:2E:6C:69:33:C6:3C:14:8C:2D:CA:A4:4A:5C:F1:AA:D2:C4:2E -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "?Autoridade Certificadora Raiz Brasileira v2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\006\241\060\202\004\211\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000\060 -\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122\061 -\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102\162 -\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064\111 -\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156\141 -\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141\040 -\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055\040 -\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101\165 -\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146\151 -\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141\163 -\151\154\145\151\162\141\040\166\062\060\036\027\015\061\060\060 -\066\062\061\061\071\060\064\065\067\132\027\015\062\063\060\066 -\062\061\061\071\060\064\065\067\132\060\201\227\061\013\060\011 -\006\003\125\004\006\023\002\102\122\061\023\060\021\006\003\125 -\004\012\023\012\111\103\120\055\102\162\141\163\151\154\061\075 -\060\073\006\003\125\004\013\023\064\111\156\163\164\151\164\165 -\164\157\040\116\141\143\151\157\156\141\154\040\144\145\040\124 -\145\143\156\157\154\157\147\151\141\040\144\141\040\111\156\146 -\157\162\155\141\143\141\157\040\055\040\111\124\111\061\064\060 -\062\006\003\125\004\003\023\053\101\165\164\157\162\151\144\141 -\144\145\040\103\145\162\164\151\146\151\143\141\144\157\162\141 -\040\122\141\151\172\040\102\162\141\163\151\154\145\151\162\141 -\040\166\062\060\202\002\042\060\015\006\011\052\206\110\206\367 -\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002 -\202\002\001\000\272\106\244\016\335\347\100\362\265\240\174\122 -\225\127\105\374\155\204\363\206\001\311\205\003\255\230\253\322 -\362\136\005\231\311\273\157\142\147\375\167\104\271\003\007\074 -\322\033\000\142\324\160\054\102\203\171\146\253\231\126\256\201 -\274\152\111\275\363\164\017\142\267\353\133\007\146\224\102\044 -\235\106\254\232\102\030\060\360\044\250\121\101\352\253\225\361 -\250\053\002\170\151\265\051\047\136\234\056\163\306\376\043\245 -\343\246\316\375\154\033\153\000\124\353\000\255\117\072\114\074 -\347\012\210\133\332\136\232\013\126\344\265\124\070\035\362\012 -\223\144\116\303\101\222\123\040\052\317\374\164\156\324\333\063 -\070\142\344\376\216\114\130\034\367\217\052\115\377\305\222\331 -\011\122\275\317\160\000\235\151\232\063\152\210\207\105\041\231 -\026\121\015\064\337\202\275\264\151\250\174\174\324\335\323\362 -\025\134\113\305\130\020\352\205\031\313\066\042\130\052\162\014 -\232\226\336\312\317\010\121\141\277\264\005\051\006\053\206\220 -\376\351\115\303\004\005\107\313\317\166\331\177\161\246\207\173 -\025\100\344\063\200\170\007\035\244\362\216\233\100\073\311\162 -\120\337\151\276\360\054\226\037\220\265\325\256\164\343\145\264 -\214\032\351\152\033\373\162\134\305\202\124\352\340\123\007\304 -\314\022\351\367\336\327\057\324\110\057\107\077\046\141\004\261 -\022\232\063\153\265\206\113\023\053\320\206\235\107\355\151\373 -\374\204\022\146\370\126\345\016\212\154\166\304\153\032\172\302 -\240\132\022\321\043\211\130\001\174\010\130\332\025\216\025\331 -\176\175\067\266\244\105\365\003\205\314\107\372\213\171\105\270 -\146\142\063\323\046\112\336\034\351\324\177\346\155\046\271\074 -\175\315\017\050\012\051\017\233\335\143\253\271\246\107\032\204 -\327\205\244\003\145\006\004\113\122\215\203\064\102\177\061\216 -\021\056\346\263\147\225\100\176\227\172\100\000\371\021\154\203 -\070\130\255\003\063\133\246\304\301\305\260\254\015\251\006\360 -\246\151\001\064\266\351\370\224\110\117\076\246\165\011\354\112 -\305\073\340\311\136\260\062\377\237\151\131\317\074\060\157\015 -\316\047\127\354\132\033\150\377\354\117\157\170\062\076\171\305 -\264\135\225\177\002\003\001\000\001\243\201\365\060\201\362\060 -\116\006\003\125\035\040\004\107\060\105\060\103\006\005\140\114 -\001\001\000\060\072\060\070\006\010\053\006\001\005\005\007\002 -\001\026\054\150\164\164\160\072\057\057\141\143\162\141\151\172 -\056\151\143\160\142\162\141\163\151\154\056\147\157\166\056\142 -\162\057\104\120\103\141\143\162\141\151\172\056\160\144\146\060 -\077\006\003\125\035\037\004\070\060\066\060\064\240\062\240\060 -\206\056\150\164\164\160\072\057\057\141\143\162\141\151\172\056 -\151\143\160\142\162\141\163\151\154\056\147\157\166\056\142\162 -\057\114\103\122\141\143\162\141\151\172\166\062\056\143\162\154 -\060\037\006\003\125\035\043\004\030\060\026\200\024\014\071\040 -\072\267\001\037\313\327\050\175\101\240\307\372\112\255\062\044 -\276\060\035\006\003\125\035\016\004\026\004\024\014\071\040\072 -\267\001\037\313\327\050\175\101\240\307\372\112\255\062\044\276 -\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 -\377\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 -\006\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000 -\003\202\002\001\000\131\232\024\151\030\155\175\051\103\160\175 -\166\233\141\337\167\216\032\166\344\251\326\313\166\244\026\014 -\114\224\022\306\220\321\201\003\305\255\006\331\055\104\274\262 -\011\166\011\200\071\147\000\030\064\155\006\012\346\265\020\131 -\110\272\165\140\374\077\216\035\030\125\160\053\236\113\225\254 -\211\253\012\167\044\173\141\304\307\221\046\216\106\023\121\067 -\266\214\047\012\323\015\360\232\053\042\203\203\263\275\203\065 -\255\233\074\274\170\203\051\065\141\066\370\021\161\063\040\124 -\143\123\105\001\330\023\132\204\073\327\146\023\044\267\304\106 -\305\042\330\163\044\356\034\023\027\226\310\045\350\033\036\317 -\337\205\120\155\074\352\367\120\236\033\227\336\247\153\333\326 -\163\322\317\174\120\300\260\214\345\123\022\172\206\071\254\065 -\133\147\307\352\324\373\321\302\135\352\016\227\163\230\256\051 -\277\344\072\363\004\066\120\054\355\336\036\333\205\350\035\204 -\011\356\363\246\203\063\133\157\107\171\117\110\265\374\270\046 -\023\253\252\263\364\141\021\373\105\147\363\035\076\156\376\052 -\113\046\104\032\237\261\242\340\074\332\340\344\005\072\170\254 -\373\250\241\115\277\135\054\167\051\220\315\023\035\357\006\050 -\330\267\024\363\133\310\311\236\247\176\061\022\212\170\142\304 -\321\005\274\006\002\143\004\053\015\211\335\344\134\133\062\200 -\104\324\102\354\052\363\362\100\207\061\325\076\342\012\062\014 -\024\215\325\162\155\013\346\375\215\344\250\363\005\215\165\027 -\167\233\012\271\372\220\222\231\145\210\062\147\103\005\216\055 -\013\025\273\065\361\141\350\331\147\167\355\026\345\350\001\055 -\153\064\077\216\203\263\367\352\017\112\036\076\065\204\235\214 -\200\064\077\251\225\350\303\255\304\315\236\312\024\026\054\031 -\236\344\066\213\271\271\243\102\045\007\076\303\345\325\150\117 -\240\146\034\246\263\266\163\034\220\032\077\100\271\032\126\102 -\160\207\377\157\055\017\021\375\036\377\367\205\060\025\016\343 -\027\061\356\047\225\314\311\351\231\036\227\307\155\133\007\265 -\005\152\075\362\105\337\272\202\171\044\160\056\233\202\037\146 -\251\245\155\047\314\366\052\242\321\137\205\157\340\106\235\252 -\322\245\116\125\016 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "?Autoridade Certificadora Raiz Brasileira v2" -# Issuer: CN=Autoridade Certificadora Raiz Brasileira v2,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Serial Number: 1 (0x1) -# Subject: CN=Autoridade Certificadora Raiz Brasileira v2,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Not Valid Before: Mon Jun 21 19:04:57 2010 -# Not Valid After : Wed Jun 21 19:04:57 2023 -# Fingerprint (SHA-256): FB:47:D9:2A:99:09:FD:4F:A9:BE:C0:27:37:54:3E:1F:35:14:CE:D7:47:40:7A:8D:9C:FA:39:7B:09:15:06:7C -# Fingerprint (SHA1): A9:82:2E:6C:69:33:C6:3C:14:8C:2D:CA:A4:4A:5C:F1:AA:D2:C4:2E -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "?Autoridade Certificadora Raiz Brasileira v2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\251\202\056\154\151\063\306\074\024\214\055\312\244\112\134\361 -\252\322\304\056 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\000\021\256\163\025\373\055\155\210\330\103\275\264\266\114\137 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Actalis Authentication Root CA" # @@ -9192,212 +7678,70 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "Network Solutions" +# Certificate "Sectigo (CCA)" # -# Issuer: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US -# Serial Number:1c:a0:2d:c1:52:3b:6a:6d:8b:5c:1f:95:4a:ed:ac:30 -# Subject: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US +# Issuer: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB +# Serial Number:20:a4:c4:7f:dd:df:e1:c7:53:63:07:13:88:77:60:12 +# Subject: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB # Not Valid Before: Sat Jan 01 00:00:00 2011 # Not Valid After : Tue Dec 31 23:59:59 2030 -# Fingerprint (SHA-256): 00:16:86:CD:18:1F:83:A1:B1:21:7D:30:5B:36:5C:41:E3:47:0A:78:A1:D3:7B:13:4A:98:CD:54:7B:92:DA:B3 -# Fingerprint (SHA1): 71:89:9A:67:BF:33:AF:31:BE:FD:C0:71:F8:F7:33:B1:83:85:63:32 +# Fingerprint (SHA-256): 1A:0D:20:44:5D:E5:BA:18:62:D1:9E:F8:80:85:8C:BC:E5:01:02:B3:6E:8F:0A:04:0C:3C:69:E7:45:22:FE:6E +# Fingerprint (SHA1): EE:86:93:87:FF:FD:83:49:AB:5A:D1:43:22:58:87:89:A4:57:B0:12 CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions" +CKA_LABEL UTF8 "Sectigo (CCA)" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\142\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\041\060\037\006\003\125\004\012\023\030\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\114\056\114\056 -\103\056\061\060\060\056\006\003\125\004\003\023\047\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 +\060\201\201\061\013\060\011\006\003\125\004\006\023\002\107\102 +\061\033\060\031\006\003\125\004\010\023\022\107\162\145\141\164 +\145\162\040\115\141\156\143\150\145\163\164\145\162\061\020\060 +\016\006\003\125\004\007\023\007\123\141\154\146\157\162\144\061 +\032\060\030\006\003\125\004\012\023\021\103\117\115\117\104\117 +\040\103\101\040\114\151\155\151\164\145\144\061\047\060\045\006 +\003\125\004\003\023\036\103\117\115\117\104\117\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 \162\151\164\171 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\142\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\041\060\037\006\003\125\004\012\023\030\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\114\056\114\056 -\103\056\061\060\060\056\006\003\125\004\003\023\047\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 +\060\201\201\061\013\060\011\006\003\125\004\006\023\002\107\102 +\061\033\060\031\006\003\125\004\010\023\022\107\162\145\141\164 +\145\162\040\115\141\156\143\150\145\163\164\145\162\061\020\060 +\016\006\003\125\004\007\023\007\123\141\154\146\157\162\144\061 +\032\060\030\006\003\125\004\012\023\021\103\117\115\117\104\117 +\040\103\101\040\114\151\155\151\164\145\144\061\047\060\045\006 +\003\125\004\003\023\036\103\117\115\117\104\117\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 \162\151\164\171 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\034\240\055\301\122\073\152\155\213\134\037\225\112\355 -\254\060 +\002\020\040\244\304\177\335\337\341\307\123\143\007\023\210\167 +\140\022 END CKA_VALUE MULTILINE_OCTAL -\060\202\003\220\060\202\002\170\240\003\002\001\002\002\020\034 -\240\055\301\122\073\152\155\213\134\037\225\112\355\254\060\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\142 -\061\013\060\011\006\003\125\004\006\023\002\125\123\061\041\060 -\037\006\003\125\004\012\023\030\116\145\164\167\157\162\153\040 -\123\157\154\165\164\151\157\156\163\040\114\056\114\056\103\056 -\061\060\060\056\006\003\125\004\003\023\047\116\145\164\167\157 -\162\153\040\123\157\154\165\164\151\157\156\163\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 +\060\202\003\320\060\202\002\270\240\003\002\001\002\002\020\040 +\244\304\177\335\337\341\307\123\143\007\023\210\167\140\022\060 +\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\201 +\201\061\013\060\011\006\003\125\004\006\023\002\107\102\061\033 +\060\031\006\003\125\004\010\023\022\107\162\145\141\164\145\162 +\040\115\141\156\143\150\145\163\164\145\162\061\020\060\016\006 +\003\125\004\007\023\007\123\141\154\146\157\162\144\061\032\060 +\030\006\003\125\004\012\023\021\103\117\115\117\104\117\040\103 +\101\040\114\151\155\151\164\145\144\061\047\060\045\006\003\125 +\004\003\023\036\103\117\115\117\104\117\040\103\145\162\164\151 +\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 \164\171\060\036\027\015\061\061\060\061\060\061\060\060\060\060 \060\060\132\027\015\063\060\061\062\063\061\062\063\065\071\065 -\071\132\060\142\061\013\060\011\006\003\125\004\006\023\002\125 -\123\061\041\060\037\006\003\125\004\012\023\030\116\145\164\167 -\157\162\153\040\123\157\154\165\164\151\157\156\163\040\114\056 -\114\056\103\056\061\060\060\056\006\003\125\004\003\023\047\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 -\150\157\162\151\164\171\060\202\001\042\060\015\006\011\052\206 -\110\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202 -\001\012\002\202\001\001\000\344\274\176\222\060\155\306\330\216 -\053\013\274\106\316\340\047\226\336\336\371\372\022\323\074\063 -\163\263\004\057\274\161\214\345\237\266\042\140\076\137\135\316 -\011\377\202\014\033\232\121\120\032\046\211\335\325\141\135\031 -\334\022\017\055\012\242\103\135\027\320\064\222\040\352\163\317 -\070\054\006\046\011\172\162\367\372\120\062\370\302\223\323\151 -\242\043\316\101\261\314\344\325\037\066\321\212\072\370\214\143 -\342\024\131\151\355\015\323\177\153\350\270\003\345\117\152\345 -\230\143\151\110\005\276\056\377\063\266\351\227\131\151\370\147 -\031\256\223\141\226\104\025\323\162\260\077\274\152\175\354\110 -\177\215\303\253\252\161\053\123\151\101\123\064\265\260\271\305 -\006\012\304\260\105\365\101\135\156\211\105\173\075\073\046\214 -\164\302\345\322\321\175\262\021\324\373\130\062\042\232\200\311 -\334\375\014\351\177\136\003\227\316\073\000\024\207\047\160\070 -\251\216\156\263\047\166\230\121\340\005\343\041\253\032\325\205 -\042\074\051\265\232\026\305\200\250\364\273\153\060\217\057\106 -\002\242\261\014\042\340\323\002\003\001\000\001\243\102\060\100 -\060\035\006\003\125\035\016\004\026\004\024\041\060\311\373\000 -\327\116\230\332\207\252\052\320\247\056\261\100\061\247\114\060 -\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003 -\202\001\001\000\302\211\204\240\350\214\146\375\377\023\005\033 -\303\072\216\230\111\212\370\252\000\134\046\375\162\152\243\176 -\022\033\224\256\124\370\041\217\247\223\117\367\026\357\271\271 -\263\062\300\045\041\061\146\067\054\011\260\376\062\260\067\354 -\074\270\316\217\010\252\010\220\007\134\165\325\341\116\054\313 -\002\044\351\242\136\351\365\170\065\042\006\034\362\037\210\261 -\341\134\314\226\124\372\157\111\314\215\361\126\003\355\317\054 -\237\047\336\345\312\203\104\276\106\100\371\127\056\322\177\061 -\055\316\203\334\376\160\153\204\320\243\237\377\227\320\250\327 -\002\354\261\054\360\357\163\070\075\231\254\304\117\001\277\325 -\152\352\306\056\062\051\027\012\313\346\151\236\321\112\265\366 -\337\216\031\370\225\351\105\251\016\315\155\101\131\040\236\163 -\306\154\161\034\234\324\115\060\250\163\011\240\025\363\240\105 -\046\303\133\375\273\271\330\055\327\037\365\005\060\031\366\256 -\017\216\142\217\337\310\117\206\331\035\141\026\263\311\360\273 -\373\307\365\257\001\042\107\354\330\332\317\034\363\123\146\272 -\123\011\001\371 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Network Solutions" -# Issuer: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US -# Serial Number:1c:a0:2d:c1:52:3b:6a:6d:8b:5c:1f:95:4a:ed:ac:30 -# Subject: CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US -# Not Valid Before: Sat Jan 01 00:00:00 2011 -# Not Valid After : Tue Dec 31 23:59:59 2030 -# Fingerprint (SHA-256): 00:16:86:CD:18:1F:83:A1:B1:21:7D:30:5B:36:5C:41:E3:47:0A:78:A1:D3:7B:13:4A:98:CD:54:7B:92:DA:B3 -# Fingerprint (SHA1): 71:89:9A:67:BF:33:AF:31:BE:FD:C0:71:F8:F7:33:B1:83:85:63:32 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\161\211\232\147\277\063\257\061\276\375\300\161\370\367\063\261 -\203\205\143\062 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\275\244\035\066\336\302\172\212\004\067\313\362\000\246\145\124 -END -CKA_ISSUER MULTILINE_OCTAL -\060\142\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\041\060\037\006\003\125\004\012\023\030\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\114\056\114\056 -\103\056\061\060\060\056\006\003\125\004\003\023\047\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\034\240\055\301\122\073\152\155\213\134\037\225\112\355 -\254\060 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "Sectigo (CCA)" -# -# Issuer: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB -# Serial Number:20:a4:c4:7f:dd:df:e1:c7:53:63:07:13:88:77:60:12 -# Subject: CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB -# Not Valid Before: Sat Jan 01 00:00:00 2011 -# Not Valid After : Tue Dec 31 23:59:59 2030 -# Fingerprint (SHA-256): 1A:0D:20:44:5D:E5:BA:18:62:D1:9E:F8:80:85:8C:BC:E5:01:02:B3:6E:8F:0A:04:0C:3C:69:E7:45:22:FE:6E -# Fingerprint (SHA1): EE:86:93:87:FF:FD:83:49:AB:5A:D1:43:22:58:87:89:A4:57:B0:12 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Sectigo (CCA)" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\201\061\013\060\011\006\003\125\004\006\023\002\107\102 -\061\033\060\031\006\003\125\004\010\023\022\107\162\145\141\164 -\145\162\040\115\141\156\143\150\145\163\164\145\162\061\020\060 -\016\006\003\125\004\007\023\007\123\141\154\146\157\162\144\061 -\032\060\030\006\003\125\004\012\023\021\103\117\115\117\104\117 -\040\103\101\040\114\151\155\151\164\145\144\061\047\060\045\006 -\003\125\004\003\023\036\103\117\115\117\104\117\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\201\061\013\060\011\006\003\125\004\006\023\002\107\102 -\061\033\060\031\006\003\125\004\010\023\022\107\162\145\141\164 -\145\162\040\115\141\156\143\150\145\163\164\145\162\061\020\060 -\016\006\003\125\004\007\023\007\123\141\154\146\157\162\144\061 -\032\060\030\006\003\125\004\012\023\021\103\117\115\117\104\117 -\040\103\101\040\114\151\155\151\164\145\144\061\047\060\045\006 -\003\125\004\003\023\036\103\117\115\117\104\117\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\040\244\304\177\335\337\341\307\123\143\007\023\210\167 -\140\022 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\320\060\202\002\270\240\003\002\001\002\002\020\040 -\244\304\177\335\337\341\307\123\143\007\023\210\167\140\022\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\201 -\201\061\013\060\011\006\003\125\004\006\023\002\107\102\061\033 -\060\031\006\003\125\004\010\023\022\107\162\145\141\164\145\162 -\040\115\141\156\143\150\145\163\164\145\162\061\020\060\016\006 -\003\125\004\007\023\007\123\141\154\146\157\162\144\061\032\060 -\030\006\003\125\004\012\023\021\103\117\115\117\104\117\040\103 -\101\040\114\151\155\151\164\145\144\061\047\060\045\006\003\125 -\004\003\023\036\103\117\115\117\104\117\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\060\036\027\015\061\061\060\061\060\061\060\060\060\060 -\060\060\132\027\015\063\060\061\062\063\061\062\063\065\071\065 -\071\132\060\201\201\061\013\060\011\006\003\125\004\006\023\002 -\107\102\061\033\060\031\006\003\125\004\010\023\022\107\162\145 -\141\164\145\162\040\115\141\156\143\150\145\163\164\145\162\061 -\020\060\016\006\003\125\004\007\023\007\123\141\154\146\157\162 -\144\061\032\060\030\006\003\125\004\012\023\021\103\117\115\117 -\104\117\040\103\101\040\114\151\155\151\164\145\144\061\047\060 -\045\006\003\125\004\003\023\036\103\117\115\117\104\117\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 +\071\132\060\201\201\061\013\060\011\006\003\125\004\006\023\002 +\107\102\061\033\060\031\006\003\125\004\010\023\022\107\162\145 +\141\164\145\162\040\115\141\156\143\150\145\163\164\145\162\061 +\020\060\016\006\003\125\004\007\023\007\123\141\154\146\157\162 +\144\061\032\060\030\006\003\125\004\012\023\021\103\117\115\117 +\104\117\040\103\101\040\114\151\155\151\164\145\144\061\047\060 +\045\006\003\125\004\003\023\036\103\117\115\117\104\117\040\103 +\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 \150\157\162\151\164\171\060\202\001\042\060\015\006\011\052\206 \110\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202 \001\012\002\202\001\001\000\320\100\213\213\162\343\221\033\367 @@ -9485,261 +7829,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "AC1 RAIZ MTIN" -# -# Issuer: C=ES,L=MADRID,O=MINISTERIO DE TRABAJO E INMIGRACION,OU=SUBDIRECCION GENERAL DE PROCESO DE DATOS,OU=PRESTADOR DE SERVICIOS DE CERTIFICACION MTIN,serialNumber=S2819001E,CN=AC1 RAIZ MTIN -# Serial Number:05:0b:41:5e:82:7b -# Subject: C=ES,L=MADRID,O=MINISTERIO DE TRABAJO E INMIGRACION,OU=SUBDIRECCION GENERAL DE PROCESO DE DATOS,OU=PRESTADOR DE SERVICIOS DE CERTIFICACION MTIN,serialNumber=S2819001E,CN=AC1 RAIZ MTIN -# Not Valid Before: Thu Nov 05 16:17:45 2009 -# Not Valid After : Sun Nov 03 16:17:45 2019 -# Fingerprint (SHA-256): 5B:1D:9D:24:DE:0A:FE:A8:B3:5B:A0:4A:1C:3E:25:D0:81:2C:DF:7C:46:25:DE:0A:89:AF:9F:E4:BB:D1:BB:15 -# Fingerprint (SHA1): 6A:D2:3B:9D:C4:8E:37:5F:85:9A:D9:CA:B5:85:32:5C:23:89:40:71 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "AC1 RAIZ MTIN" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\342\061\026\060\024\006\003\125\004\003\023\015\101\103 -\061\040\122\101\111\132\040\115\124\111\116\061\022\060\020\006 -\003\125\004\005\023\011\123\062\070\061\071\060\060\061\105\061 -\065\060\063\006\003\125\004\013\023\054\120\122\105\123\124\101 -\104\117\122\040\104\105\040\123\105\122\126\111\103\111\117\123 -\040\104\105\040\103\105\122\124\111\106\111\103\101\103\111\117 -\116\040\115\124\111\116\061\061\060\057\006\003\125\004\013\023 -\050\123\125\102\104\111\122\105\103\103\111\117\116\040\107\105 -\116\105\122\101\114\040\104\105\040\120\122\117\103\105\123\117 -\040\104\105\040\104\101\124\117\123\061\054\060\052\006\003\125 -\004\012\023\043\115\111\116\111\123\124\105\122\111\117\040\104 -\105\040\124\122\101\102\101\112\117\040\105\040\111\116\115\111 -\107\122\101\103\111\117\116\061\017\060\015\006\003\125\004\007 -\023\006\115\101\104\122\111\104\061\013\060\011\006\003\125\004 -\006\023\002\105\123 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\342\061\026\060\024\006\003\125\004\003\023\015\101\103 -\061\040\122\101\111\132\040\115\124\111\116\061\022\060\020\006 -\003\125\004\005\023\011\123\062\070\061\071\060\060\061\105\061 -\065\060\063\006\003\125\004\013\023\054\120\122\105\123\124\101 -\104\117\122\040\104\105\040\123\105\122\126\111\103\111\117\123 -\040\104\105\040\103\105\122\124\111\106\111\103\101\103\111\117 -\116\040\115\124\111\116\061\061\060\057\006\003\125\004\013\023 -\050\123\125\102\104\111\122\105\103\103\111\117\116\040\107\105 -\116\105\122\101\114\040\104\105\040\120\122\117\103\105\123\117 -\040\104\105\040\104\101\124\117\123\061\054\060\052\006\003\125 -\004\012\023\043\115\111\116\111\123\124\105\122\111\117\040\104 -\105\040\124\122\101\102\101\112\117\040\105\040\111\116\115\111 -\107\122\101\103\111\117\116\061\017\060\015\006\003\125\004\007 -\023\006\115\101\104\122\111\104\061\013\060\011\006\003\125\004 -\006\023\002\105\123 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\006\005\013\101\136\202\173 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\011\111\060\202\007\061\240\003\002\001\002\002\006\005 -\013\101\136\202\173\060\015\006\011\052\206\110\206\367\015\001 -\001\005\005\000\060\201\342\061\026\060\024\006\003\125\004\003 -\023\015\101\103\061\040\122\101\111\132\040\115\124\111\116\061 -\022\060\020\006\003\125\004\005\023\011\123\062\070\061\071\060 -\060\061\105\061\065\060\063\006\003\125\004\013\023\054\120\122 -\105\123\124\101\104\117\122\040\104\105\040\123\105\122\126\111 -\103\111\117\123\040\104\105\040\103\105\122\124\111\106\111\103 -\101\103\111\117\116\040\115\124\111\116\061\061\060\057\006\003 -\125\004\013\023\050\123\125\102\104\111\122\105\103\103\111\117 -\116\040\107\105\116\105\122\101\114\040\104\105\040\120\122\117 -\103\105\123\117\040\104\105\040\104\101\124\117\123\061\054\060 -\052\006\003\125\004\012\023\043\115\111\116\111\123\124\105\122 -\111\117\040\104\105\040\124\122\101\102\101\112\117\040\105\040 -\111\116\115\111\107\122\101\103\111\117\116\061\017\060\015\006 -\003\125\004\007\023\006\115\101\104\122\111\104\061\013\060\011 -\006\003\125\004\006\023\002\105\123\060\036\027\015\060\071\061 -\061\060\065\061\066\061\067\064\065\132\027\015\061\071\061\061 -\060\063\061\066\061\067\064\065\132\060\201\342\061\026\060\024 -\006\003\125\004\003\023\015\101\103\061\040\122\101\111\132\040 -\115\124\111\116\061\022\060\020\006\003\125\004\005\023\011\123 -\062\070\061\071\060\060\061\105\061\065\060\063\006\003\125\004 -\013\023\054\120\122\105\123\124\101\104\117\122\040\104\105\040 -\123\105\122\126\111\103\111\117\123\040\104\105\040\103\105\122 -\124\111\106\111\103\101\103\111\117\116\040\115\124\111\116\061 -\061\060\057\006\003\125\004\013\023\050\123\125\102\104\111\122 -\105\103\103\111\117\116\040\107\105\116\105\122\101\114\040\104 -\105\040\120\122\117\103\105\123\117\040\104\105\040\104\101\124 -\117\123\061\054\060\052\006\003\125\004\012\023\043\115\111\116 -\111\123\124\105\122\111\117\040\104\105\040\124\122\101\102\101 -\112\117\040\105\040\111\116\115\111\107\122\101\103\111\117\116 -\061\017\060\015\006\003\125\004\007\023\006\115\101\104\122\111 -\104\061\013\060\011\006\003\125\004\006\023\002\105\123\060\202 -\002\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005 -\000\003\202\002\017\000\060\202\002\012\002\202\002\001\000\334 -\315\315\261\277\336\045\365\377\034\063\163\231\074\033\241\155 -\365\240\304\175\233\070\146\215\011\337\003\154\127\065\264\023 -\101\376\343\137\346\042\004\130\030\271\116\151\063\004\077\225 -\307\331\116\377\063\064\247\062\100\062\223\127\376\201\257\045 -\103\134\035\375\173\127\013\142\010\147\147\142\264\343\345\130 -\045\200\346\252\206\142\100\347\117\020\141\051\111\046\253\115 -\174\241\253\133\141\061\201\006\152\144\224\115\047\370\113\036 -\321\325\103\342\327\261\155\366\366\377\264\160\125\366\010\231 -\267\164\001\340\363\236\265\174\344\004\210\010\120\131\170\037 -\032\224\333\357\310\311\211\323\067\270\363\075\206\321\031\313 -\203\132\020\007\010\117\231\164\002\007\360\062\121\310\373\346 -\320\074\046\166\175\162\176\254\166\067\301\212\165\040\134\100 -\334\204\077\320\111\174\115\147\256\071\357\344\316\200\341\312 -\235\346\055\253\056\346\022\225\332\371\373\337\343\342\214\075 -\207\373\105\156\104\253\366\170\222\047\024\241\135\153\117\160 -\173\127\163\357\371\135\250\017\165\237\357\021\140\031\204\260 -\144\100\356\330\251\206\372\245\327\105\364\021\157\361\206\310 -\064\133\210\110\316\272\335\315\233\335\210\343\001\066\350\254 -\152\350\022\013\260\340\173\220\036\205\013\111\211\001\366\377 -\202\337\130\145\042\203\110\326\007\320\034\146\374\146\050\072 -\304\303\345\370\231\145\047\122\130\363\153\361\157\002\104\204 -\165\320\244\343\150\123\141\162\357\366\057\251\263\254\365\364 -\366\320\134\334\151\114\314\171\322\244\033\310\163\006\064\164 -\264\361\152\312\051\050\307\064\204\133\043\330\272\000\214\314 -\011\301\307\157\135\004\253\267\117\046\167\251\065\317\040\326 -\263\377\061\151\320\064\373\045\354\150\226\012\242\335\203\037 -\312\074\217\164\066\045\124\357\365\030\173\302\044\061\321\373 -\202\004\256\004\202\326\365\002\051\161\341\222\161\164\216\333 -\252\161\035\304\073\306\142\046\154\206\074\043\125\353\051\321 -\037\253\312\036\143\347\263\163\264\247\270\052\072\366\037\373 -\207\145\210\374\363\237\376\277\353\325\035\266\250\003\351\145 -\203\031\214\340\030\355\027\330\034\015\075\234\212\130\177\002 -\003\001\000\001\243\202\003\001\060\202\002\375\060\067\006\010 -\053\006\001\005\005\007\001\001\004\053\060\051\060\047\006\010 -\053\006\001\005\005\007\060\001\206\033\150\164\164\160\072\057 -\057\143\141\056\155\164\151\156\056\145\163\057\155\164\151\156 -\057\157\143\163\160\060\016\006\003\125\035\017\001\001\377\004 -\004\003\002\001\006\060\033\006\003\125\035\021\004\024\060\022 -\201\020\141\144\155\151\156\137\143\141\100\155\164\151\156\056 -\145\163\060\033\006\003\125\035\022\004\024\060\022\201\020\141 -\144\155\151\156\137\143\141\100\155\164\151\156\056\145\163\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\162\006\003\125\035\037\004\153\060\151\060\062\240\060\240 -\056\206\054\150\164\164\160\072\057\057\143\141\056\155\164\151 -\156\056\145\163\057\155\164\151\156\057\143\162\154\057\115\124 -\111\116\101\165\164\157\162\151\144\141\144\122\141\151\172\060 -\063\240\061\240\057\206\055\150\164\164\160\072\057\057\143\141 -\062\056\155\164\151\156\056\145\163\057\155\164\151\156\057\143 -\162\154\057\115\124\111\116\101\165\164\157\162\151\144\141\144 -\122\141\151\172\060\201\271\006\003\125\035\040\004\201\261\060 -\201\256\060\201\253\006\013\053\006\001\004\001\201\331\005\002 -\004\001\060\201\233\060\060\006\010\053\006\001\005\005\007\002 -\001\026\044\150\164\164\160\072\057\057\143\141\056\155\164\151 -\156\056\145\163\057\155\164\151\156\057\104\120\103\171\120\157 -\154\151\164\151\143\141\163\060\147\006\010\053\006\001\005\005 -\007\002\002\060\133\032\131\103\145\162\164\151\146\151\143\141 -\144\157\040\162\141\355\172\056\040\103\157\156\163\165\154\164 -\145\040\154\141\163\040\143\157\156\144\151\143\151\157\156\145 -\163\040\144\145\040\165\163\157\040\145\156\040\150\164\164\160 -\072\057\057\143\141\056\155\164\151\156\056\145\163\057\155\164 -\151\156\057\104\120\103\171\120\157\154\151\164\151\143\141\163 -\060\035\006\003\125\035\016\004\026\004\024\063\103\030\263\304 -\113\035\313\037\371\360\116\374\337\112\344\025\140\310\203\060 -\202\001\026\006\003\125\035\043\004\202\001\015\060\202\001\011 -\200\024\063\103\030\263\304\113\035\313\037\371\360\116\374\337 -\112\344\025\140\310\203\241\201\350\244\201\345\060\201\342\061 -\026\060\024\006\003\125\004\003\023\015\101\103\061\040\122\101 -\111\132\040\115\124\111\116\061\022\060\020\006\003\125\004\005 -\023\011\123\062\070\061\071\060\060\061\105\061\065\060\063\006 -\003\125\004\013\023\054\120\122\105\123\124\101\104\117\122\040 -\104\105\040\123\105\122\126\111\103\111\117\123\040\104\105\040 -\103\105\122\124\111\106\111\103\101\103\111\117\116\040\115\124 -\111\116\061\061\060\057\006\003\125\004\013\023\050\123\125\102 -\104\111\122\105\103\103\111\117\116\040\107\105\116\105\122\101 -\114\040\104\105\040\120\122\117\103\105\123\117\040\104\105\040 -\104\101\124\117\123\061\054\060\052\006\003\125\004\012\023\043 -\115\111\116\111\123\124\105\122\111\117\040\104\105\040\124\122 -\101\102\101\112\117\040\105\040\111\116\115\111\107\122\101\103 -\111\117\116\061\017\060\015\006\003\125\004\007\023\006\115\101 -\104\122\111\104\061\013\060\011\006\003\125\004\006\023\002\105 -\123\202\006\005\013\101\136\202\173\060\015\006\011\052\206\110 -\206\367\015\001\001\005\005\000\003\202\002\001\000\231\343\252 -\016\221\323\222\251\352\377\104\147\323\240\055\040\147\363\020 -\017\032\067\167\135\122\106\346\152\270\367\210\363\202\303\052 -\364\141\015\054\237\057\206\055\141\351\140\131\275\267\117\257 -\223\011\034\371\063\167\100\234\241\174\145\334\136\220\225\251 -\364\276\202\364\374\202\035\036\305\075\340\134\256\336\055\325 -\143\166\253\361\354\044\247\040\370\036\350\317\161\202\003\335 -\216\166\142\052\265\051\210\023\044\255\134\364\240\112\270\352 -\023\212\126\215\152\057\150\071\162\206\130\304\244\253\165\174 -\104\347\032\204\014\215\021\334\031\271\034\066\356\363\377\121 -\233\263\103\310\045\176\347\016\110\243\344\117\006\055\025\036 -\240\246\107\220\127\073\370\057\055\333\043\272\353\043\223\260 -\270\122\033\140\034\324\031\260\155\170\217\113\235\247\013\050 -\147\112\335\170\110\275\261\076\230\324\273\025\376\263\137\155 -\035\165\310\036\317\017\256\112\032\135\207\054\006\164\154\012 -\205\123\044\136\172\311\240\174\161\233\222\135\157\110\177\266 -\130\161\262\114\246\032\011\043\064\120\161\025\153\107\333\373 -\276\032\155\302\214\224\057\007\147\040\042\147\143\267\253\306 -\031\234\226\015\142\352\010\244\032\160\357\251\271\357\116\305 -\100\274\342\207\127\363\003\312\050\231\032\300\125\140\165\173 -\143\276\144\077\226\116\113\217\375\055\246\164\300\337\111\072 -\354\125\176\146\323\272\375\357\223\261\143\362\133\077\355\166 -\241\331\323\014\376\056\157\012\246\123\113\357\321\363\107\255 -\271\036\354\114\037\276\320\203\123\303\233\025\105\377\056\007 -\321\332\152\222\105\346\154\127\133\044\056\121\151\311\060\317 -\327\373\244\001\065\132\315\247\353\024\157\264\267\140\042\010 -\305\161\310\223\342\276\045\137\365\014\372\130\121\075\173\310 -\057\067\371\223\034\052\011\340\147\375\226\211\102\312\353\066 -\260\326\033\246\120\017\132\235\166\377\244\117\306\354\015\304 -\341\320\347\130\076\326\171\300\167\115\014\325\263\344\230\115 -\335\106\056\122\260\342\017\015\102\066\245\020\044\122\050\276 -\142\065\102\071\311\172\226\037\356\346\113\131\077\044\163\213 -\277\042\113\146\362\333\017\065\361\067\235\240\044 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "AC1 RAIZ MTIN" -# Issuer: C=ES,L=MADRID,O=MINISTERIO DE TRABAJO E INMIGRACION,OU=SUBDIRECCION GENERAL DE PROCESO DE DATOS,OU=PRESTADOR DE SERVICIOS DE CERTIFICACION MTIN,serialNumber=S2819001E,CN=AC1 RAIZ MTIN -# Serial Number:05:0b:41:5e:82:7b -# Subject: C=ES,L=MADRID,O=MINISTERIO DE TRABAJO E INMIGRACION,OU=SUBDIRECCION GENERAL DE PROCESO DE DATOS,OU=PRESTADOR DE SERVICIOS DE CERTIFICACION MTIN,serialNumber=S2819001E,CN=AC1 RAIZ MTIN -# Not Valid Before: Thu Nov 05 16:17:45 2009 -# Not Valid After : Sun Nov 03 16:17:45 2019 -# Fingerprint (SHA-256): 5B:1D:9D:24:DE:0A:FE:A8:B3:5B:A0:4A:1C:3E:25:D0:81:2C:DF:7C:46:25:DE:0A:89:AF:9F:E4:BB:D1:BB:15 -# Fingerprint (SHA1): 6A:D2:3B:9D:C4:8E:37:5F:85:9A:D9:CA:B5:85:32:5C:23:89:40:71 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "AC1 RAIZ MTIN" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\152\322\073\235\304\216\067\137\205\232\331\312\265\205\062\134 -\043\211\100\161 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\047\023\325\054\160\006\076\025\173\323\142\131\062\352\001\005 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\342\061\026\060\024\006\003\125\004\003\023\015\101\103 -\061\040\122\101\111\132\040\115\124\111\116\061\022\060\020\006 -\003\125\004\005\023\011\123\062\070\061\071\060\060\061\105\061 -\065\060\063\006\003\125\004\013\023\054\120\122\105\123\124\101 -\104\117\122\040\104\105\040\123\105\122\126\111\103\111\117\123 -\040\104\105\040\103\105\122\124\111\106\111\103\101\103\111\117 -\116\040\115\124\111\116\061\061\060\057\006\003\125\004\013\023 -\050\123\125\102\104\111\122\105\103\103\111\117\116\040\107\105 -\116\105\122\101\114\040\104\105\040\120\122\117\103\105\123\117 -\040\104\105\040\104\101\124\117\123\061\054\060\052\006\003\125 -\004\012\023\043\115\111\116\111\123\124\105\122\111\117\040\104 -\105\040\124\122\101\102\101\112\117\040\105\040\111\116\115\111 -\107\122\101\103\111\117\116\061\017\060\015\006\003\125\004\007 -\023\006\115\101\104\122\111\104\061\013\060\011\006\003\125\004 -\006\023\002\105\123 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\006\005\013\101\136\202\173 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Microsoft Root Certificate Authority 2011" # @@ -10256,158 +8345,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Estonian Certification Centre Root CA" -# -# Issuer: E=pki@sk.ee,CN=EE Certification Centre Root CA,O=AS Sertifitseerimiskeskus,C=EE -# Serial Number:54:80:f9:a0:73:ed:3f:00:4c:ca:89:d8:e3:71:e6:4a -# Subject: E=pki@sk.ee,CN=EE Certification Centre Root CA,O=AS Sertifitseerimiskeskus,C=EE -# Not Valid Before: Sat Oct 30 10:10:30 2010 -# Not Valid After : Tue Dec 17 23:59:59 2030 -# Fingerprint (SHA-256): 3E:84:BA:43:42:90:85:16:E7:75:73:C0:99:2F:09:79:CA:08:4E:46:85:68:1F:F1:95:CC:BA:8A:22:9B:8A:76 -# Fingerprint (SHA1): C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Estonian Certification Centre Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\165\061\013\060\011\006\003\125\004\006\023\002\105\105\061 -\042\060\040\006\003\125\004\012\014\031\101\123\040\123\145\162 -\164\151\146\151\164\163\145\145\162\151\155\151\163\153\145\163 -\153\165\163\061\050\060\046\006\003\125\004\003\014\037\105\105 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\103 -\145\156\164\162\145\040\122\157\157\164\040\103\101\061\030\060 -\026\006\011\052\206\110\206\367\015\001\011\001\026\011\160\153 -\151\100\163\153\056\145\145 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\165\061\013\060\011\006\003\125\004\006\023\002\105\105\061 -\042\060\040\006\003\125\004\012\014\031\101\123\040\123\145\162 -\164\151\146\151\164\163\145\145\162\151\155\151\163\153\145\163 -\153\165\163\061\050\060\046\006\003\125\004\003\014\037\105\105 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\103 -\145\156\164\162\145\040\122\157\157\164\040\103\101\061\030\060 -\026\006\011\052\206\110\206\367\015\001\011\001\026\011\160\153 -\151\100\163\153\056\145\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\124\200\371\240\163\355\077\000\114\312\211\330\343\161 -\346\112 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\003\060\202\002\353\240\003\002\001\002\002\020\124 -\200\371\240\163\355\077\000\114\312\211\330\343\161\346\112\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\165 -\061\013\060\011\006\003\125\004\006\023\002\105\105\061\042\060 -\040\006\003\125\004\012\014\031\101\123\040\123\145\162\164\151 -\146\151\164\163\145\145\162\151\155\151\163\153\145\163\153\165 -\163\061\050\060\046\006\003\125\004\003\014\037\105\105\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\103\145\156 -\164\162\145\040\122\157\157\164\040\103\101\061\030\060\026\006 -\011\052\206\110\206\367\015\001\011\001\026\011\160\153\151\100 -\163\153\056\145\145\060\042\030\017\062\060\061\060\061\060\063 -\060\061\060\061\060\063\060\132\030\017\062\060\063\060\061\062 -\061\067\062\063\065\071\065\071\132\060\165\061\013\060\011\006 -\003\125\004\006\023\002\105\105\061\042\060\040\006\003\125\004 -\012\014\031\101\123\040\123\145\162\164\151\146\151\164\163\145 -\145\162\151\155\151\163\153\145\163\153\165\163\061\050\060\046 -\006\003\125\004\003\014\037\105\105\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\103\145\156\164\162\145\040\122 -\157\157\164\040\103\101\061\030\060\026\006\011\052\206\110\206 -\367\015\001\011\001\026\011\160\153\151\100\163\153\056\145\145 -\060\202\001\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001\001 -\000\310\040\300\354\340\305\113\253\007\170\225\363\104\356\373 -\013\014\377\164\216\141\273\261\142\352\043\330\253\241\145\062 -\172\353\216\027\117\226\330\012\173\221\242\143\154\307\214\114 -\056\171\277\251\005\374\151\134\225\215\142\371\271\160\355\303 -\121\175\320\223\346\154\353\060\113\341\274\175\277\122\233\316 -\156\173\145\362\070\261\300\242\062\357\142\262\150\340\141\123 -\301\066\225\377\354\224\272\066\256\234\034\247\062\017\345\174 -\264\306\157\164\375\173\030\350\254\127\355\006\040\113\062\060 -\130\133\375\315\250\346\241\374\160\274\216\222\163\333\227\247 -\174\041\256\075\301\365\110\207\154\047\275\237\045\164\201\125 -\260\367\165\366\075\244\144\153\326\117\347\316\100\255\017\335 -\062\323\274\212\022\123\230\311\211\373\020\035\115\176\315\176 -\037\126\015\041\160\205\366\040\203\037\366\272\037\004\217\352 -\167\210\065\304\377\352\116\241\213\115\077\143\033\104\303\104 -\324\045\166\312\267\215\327\036\112\146\144\315\134\305\234\203 -\341\302\010\210\232\354\116\243\361\076\034\054\331\154\035\241 -\113\002\003\001\000\001\243\201\212\060\201\207\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006 -\003\125\035\016\004\026\004\024\022\362\132\076\352\126\034\277 -\315\006\254\361\361\045\311\251\113\324\024\231\060\105\006\003 -\125\035\045\004\076\060\074\006\010\053\006\001\005\005\007\003 -\002\006\010\053\006\001\005\005\007\003\001\006\010\053\006\001 -\005\005\007\003\003\006\010\053\006\001\005\005\007\003\004\006 -\010\053\006\001\005\005\007\003\010\006\010\053\006\001\005\005 -\007\003\011\060\015\006\011\052\206\110\206\367\015\001\001\005 -\005\000\003\202\001\001\000\173\366\344\300\015\252\031\107\267 -\115\127\243\376\255\273\261\152\325\017\236\333\344\143\305\216 -\241\120\126\223\226\270\070\300\044\042\146\274\123\024\141\225 -\277\320\307\052\226\071\077\175\050\263\020\100\041\152\304\257 -\260\122\167\030\341\226\330\126\135\343\335\066\136\035\247\120 -\124\240\305\052\344\252\214\224\212\117\235\065\377\166\244\006 -\023\221\242\242\175\000\104\077\125\323\202\074\032\325\133\274 -\126\114\042\056\106\103\212\044\100\055\363\022\270\073\160\032 -\244\226\271\032\257\207\101\032\152\030\015\006\117\307\076\156 -\271\051\115\015\111\211\021\207\062\133\346\113\004\310\344\134 -\346\164\163\224\135\026\230\023\225\376\373\333\261\104\345\072 -\160\254\067\153\346\263\063\162\050\311\263\127\240\366\002\026 -\210\006\013\266\246\113\040\050\324\336\075\213\255\067\005\123 -\164\376\156\314\274\103\027\161\136\371\305\314\032\251\141\356 -\367\166\014\363\162\364\162\255\317\162\002\066\007\107\317\357 -\031\120\211\140\314\351\044\225\017\302\313\035\362\157\166\220 -\307\314\165\301\226\305\235 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Estonian Certification Centre Root CA" -# Issuer: E=pki@sk.ee,CN=EE Certification Centre Root CA,O=AS Sertifitseerimiskeskus,C=EE -# Serial Number:54:80:f9:a0:73:ed:3f:00:4c:ca:89:d8:e3:71:e6:4a -# Subject: E=pki@sk.ee,CN=EE Certification Centre Root CA,O=AS Sertifitseerimiskeskus,C=EE -# Not Valid Before: Sat Oct 30 10:10:30 2010 -# Not Valid After : Tue Dec 17 23:59:59 2030 -# Fingerprint (SHA-256): 3E:84:BA:43:42:90:85:16:E7:75:73:C0:99:2F:09:79:CA:08:4E:46:85:68:1F:F1:95:CC:BA:8A:22:9B:8A:76 -# Fingerprint (SHA1): C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Estonian Certification Centre Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\311\250\271\347\125\200\136\130\343\123\167\247\045\353\257\303 -\173\047\314\327 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\103\136\210\324\175\032\112\176\375\204\056\122\353\001\324\157 -END -CKA_ISSUER MULTILINE_OCTAL -\060\165\061\013\060\011\006\003\125\004\006\023\002\105\105\061 -\042\060\040\006\003\125\004\012\014\031\101\123\040\123\145\162 -\164\151\146\151\164\163\145\145\162\151\155\151\163\153\145\163 -\153\165\163\061\050\060\046\006\003\125\004\003\014\037\105\105 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\103 -\145\156\164\162\145\040\122\157\157\164\040\103\101\061\030\060 -\026\006\011\052\206\110\206\367\015\001\011\001\026\011\160\153 -\151\100\163\153\056\145\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\124\200\371\240\163\355\077\000\114\312\211\330\343\161 -\346\112 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Sectigo ECC" # @@ -11197,216 +9134,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Colegio de Registradores Mercantiles" -# -# Issuer: CN=Registradores de Espa..a - CA Ra..z,OU=Certificado Propio,O=Colegio de Registradores de la Propiedad y Mercantiles de Espa..a,C=ES -# Serial Number:2d:e4:0a:e1:9b:d1:c2:aa:4c:f4:00:ac:81:35:f9 -# Subject: CN=Registradores de Espa..a - CA Ra..z,OU=Certificado Propio,O=Colegio de Registradores de la Propiedad y Mercantiles de Espa..a,C=ES -# Not Valid Before: Tue Jan 09 17:00:39 2007 -# Not Valid After : Thu Jan 09 17:00:39 2031 -# Fingerprint (SHA-256): 7D:2B:F3:48:9E:BC:9A:D3:44:8B:8B:08:27:71:5A:3C:BF:E3:D5:23:E3:B5:6A:9B:5F:C1:D2:A2:DA:2F:20:FE -# Fingerprint (SHA1): 21:11:65:CA:37:9F:BB:5E:D8:01:E3:1C:43:0A:62:AA:C1:09:BC:B4 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Colegio de Registradores Mercantiles" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\244\061\013\060\011\006\003\125\004\006\023\002\105\123 -\061\112\060\110\006\003\125\004\012\014\101\103\157\154\145\147 -\151\157\040\144\145\040\122\145\147\151\163\164\162\141\144\157 -\162\145\163\040\144\145\040\154\141\040\120\162\157\160\151\145 -\144\141\144\040\171\040\115\145\162\143\141\156\164\151\154\145 -\163\040\144\145\040\105\163\160\141\303\261\141\061\033\060\031 -\006\003\125\004\013\014\022\103\145\162\164\151\146\151\143\141 -\144\157\040\120\162\157\160\151\157\061\054\060\052\006\003\125 -\004\003\014\043\122\145\147\151\163\164\162\141\144\157\162\145 -\163\040\144\145\040\105\163\160\141\303\261\141\040\055\040\103 -\101\040\122\141\303\255\172 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\244\061\013\060\011\006\003\125\004\006\023\002\105\123 -\061\112\060\110\006\003\125\004\012\014\101\103\157\154\145\147 -\151\157\040\144\145\040\122\145\147\151\163\164\162\141\144\157 -\162\145\163\040\144\145\040\154\141\040\120\162\157\160\151\145 -\144\141\144\040\171\040\115\145\162\143\141\156\164\151\154\145 -\163\040\144\145\040\105\163\160\141\303\261\141\061\033\060\031 -\006\003\125\004\013\014\022\103\145\162\164\151\146\151\143\141 -\144\157\040\120\162\157\160\151\157\061\054\060\052\006\003\125 -\004\003\014\043\122\145\147\151\163\164\162\141\144\157\162\145 -\163\040\144\145\040\105\163\160\141\303\261\141\040\055\040\103 -\101\040\122\141\303\255\172 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\017\055\344\012\341\233\321\302\252\114\364\000\254\201\065 -\371 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\007\023\060\202\004\373\240\003\002\001\002\002\017\055 -\344\012\341\233\321\302\252\114\364\000\254\201\065\371\060\015 -\006\011\052\206\110\206\367\015\001\001\005\005\000\060\201\244 -\061\013\060\011\006\003\125\004\006\023\002\105\123\061\112\060 -\110\006\003\125\004\012\014\101\103\157\154\145\147\151\157\040 -\144\145\040\122\145\147\151\163\164\162\141\144\157\162\145\163 -\040\144\145\040\154\141\040\120\162\157\160\151\145\144\141\144 -\040\171\040\115\145\162\143\141\156\164\151\154\145\163\040\144 -\145\040\105\163\160\141\303\261\141\061\033\060\031\006\003\125 -\004\013\014\022\103\145\162\164\151\146\151\143\141\144\157\040 -\120\162\157\160\151\157\061\054\060\052\006\003\125\004\003\014 -\043\122\145\147\151\163\164\162\141\144\157\162\145\163\040\144 -\145\040\105\163\160\141\303\261\141\040\055\040\103\101\040\122 -\141\303\255\172\060\036\027\015\060\067\060\061\060\071\061\067 -\060\060\063\071\132\027\015\063\061\060\061\060\071\061\067\060 -\060\063\071\132\060\201\244\061\013\060\011\006\003\125\004\006 -\023\002\105\123\061\112\060\110\006\003\125\004\012\014\101\103 -\157\154\145\147\151\157\040\144\145\040\122\145\147\151\163\164 -\162\141\144\157\162\145\163\040\144\145\040\154\141\040\120\162 -\157\160\151\145\144\141\144\040\171\040\115\145\162\143\141\156 -\164\151\154\145\163\040\144\145\040\105\163\160\141\303\261\141 -\061\033\060\031\006\003\125\004\013\014\022\103\145\162\164\151 -\146\151\143\141\144\157\040\120\162\157\160\151\157\061\054\060 -\052\006\003\125\004\003\014\043\122\145\147\151\163\164\162\141 -\144\157\162\145\163\040\144\145\040\105\163\160\141\303\261\141 -\040\055\040\103\101\040\122\141\303\255\172\060\202\002\042\060 -\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202 -\002\017\000\060\202\002\012\002\202\002\001\000\254\120\033\016 -\222\316\270\174\025\152\370\344\017\235\174\174\174\166\344\013 -\046\072\121\006\315\050\263\355\017\076\331\221\173\314\374\207 -\203\102\367\173\260\135\270\172\147\376\064\041\142\277\271\051 -\303\336\132\361\003\362\353\362\342\022\302\145\144\166\247\365 -\346\313\061\243\150\362\171\353\235\124\305\122\377\237\075\203 -\143\016\346\277\035\050\002\175\374\043\364\104\223\243\251\103 -\234\330\350\045\032\040\065\365\265\260\316\353\125\053\372\331 -\136\260\241\104\053\345\000\054\044\017\067\177\062\064\204\262 -\310\025\157\212\365\362\350\056\367\103\216\002\270\062\233\200 -\032\123\035\001\231\110\153\164\363\132\160\112\244\350\367\002 -\321\272\221\243\153\207\276\020\136\176\124\271\130\262\012\366 -\073\012\343\016\070\363\200\135\367\101\216\370\217\066\271\203 -\233\021\114\341\013\261\305\223\212\063\262\277\233\266\236\104 -\267\037\376\052\201\050\071\174\317\324\257\065\145\256\147\136 -\215\041\337\000\140\021\053\324\074\344\047\120\237\223\267\005 -\361\322\016\024\334\051\202\226\361\052\242\033\103\005\160\263 -\320\134\036\003\101\125\376\026\070\305\122\115\223\265\264\074 -\166\042\115\251\053\254\025\304\251\113\164\271\245\043\330\315 -\053\110\301\342\357\315\336\370\112\260\337\240\343\356\206\065 -\277\133\162\224\157\262\106\112\352\112\123\256\061\346\221\265 -\164\230\105\232\244\175\354\161\052\345\220\121\066\103\371\111 -\324\327\050\006\003\261\375\171\207\326\006\370\254\241\371\277 -\024\170\015\313\043\113\315\273\056\062\364\175\274\151\273\266 -\065\176\171\317\275\113\162\176\141\253\052\176\100\307\014\345 -\262\220\265\114\014\326\127\007\174\227\314\371\331\167\333\173 -\347\214\023\176\314\176\030\117\114\113\043\216\256\032\307\352 -\137\037\246\027\335\070\266\117\336\012\156\122\120\131\254\155 -\315\326\061\031\275\044\351\240\130\317\331\324\262\103\171\077 -\137\326\157\252\145\310\106\362\322\325\176\371\056\103\030\302 -\230\344\150\337\301\323\137\105\057\151\321\035\356\221\044\110 -\322\353\000\016\302\020\113\322\235\275\243\115\027\243\067\232 -\257\357\227\061\201\332\211\261\141\172\143\247\002\003\001\000 -\001\243\202\001\076\060\202\001\072\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\035\006\003\125\035 -\016\004\026\004\024\033\215\131\034\263\267\130\142\144\146\254 -\342\344\244\366\242\031\022\366\345\060\201\367\006\003\125\035 -\040\004\201\357\060\201\354\060\201\351\006\004\125\035\040\000 -\060\201\340\060\074\006\010\053\006\001\005\005\007\002\001\026 -\060\150\164\164\160\072\057\057\160\153\151\056\162\145\147\151 -\163\164\162\141\144\157\162\145\163\056\157\162\147\057\156\157 -\162\155\141\164\151\166\141\057\151\156\144\145\170\056\150\164 -\155\060\201\237\006\010\053\006\001\005\005\007\002\002\060\201 -\222\032\201\217\103\145\162\164\151\146\151\143\141\144\157\040 -\163\165\152\145\164\157\040\141\040\154\141\040\104\145\143\154 -\141\162\141\143\151\363\156\040\144\145\040\120\162\341\143\164 -\151\143\141\163\040\144\145\040\103\145\162\164\151\146\151\143 -\141\143\151\363\156\040\144\145\154\040\103\157\154\145\147\151 -\157\040\144\145\040\122\145\147\151\163\164\162\141\144\157\162 -\145\163\040\144\145\040\154\141\040\120\162\157\160\151\145\144 -\141\144\040\171\040\115\145\162\143\141\156\164\151\154\145\163 -\040\144\145\040\105\163\160\141\361\141\040\050\251\040\062\060 -\060\066\051\060\015\006\011\052\206\110\206\367\015\001\001\005 -\005\000\003\202\002\001\000\077\037\326\054\031\166\100\222\234 -\046\346\236\130\006\022\075\022\302\053\072\336\345\330\211\167 -\100\037\306\121\252\164\211\226\305\306\303\235\361\372\274\151 -\023\240\006\165\027\046\211\374\145\071\215\163\171\353\317\167 -\247\273\325\110\046\171\061\221\060\047\230\101\245\027\340\137 -\134\033\132\052\174\272\255\026\145\000\121\175\207\336\272\272 -\143\326\143\264\065\340\327\116\031\105\176\277\121\151\110\157 -\076\210\156\122\125\203\360\213\304\114\364\012\324\021\041\256 -\051\140\350\133\213\237\370\302\354\267\166\077\200\302\164\056 -\107\170\142\121\236\333\214\365\255\137\205\005\350\375\232\173 -\275\160\150\013\223\302\060\176\022\364\113\117\164\342\211\217 -\271\103\164\017\326\204\136\172\336\160\124\244\023\066\137\144 -\176\323\004\016\376\335\031\157\044\123\225\355\351\311\016\324 -\246\361\223\241\133\011\343\242\322\127\116\076\032\316\175\254 -\304\367\123\320\315\250\222\355\244\311\227\042\146\370\306\242 -\362\165\345\021\176\057\165\022\226\367\217\157\317\007\345\312 -\314\007\076\365\074\213\355\274\174\062\140\076\343\017\324\021 -\203\064\015\166\206\144\275\063\227\116\160\355\366\040\070\137 -\232\151\307\300\117\026\312\205\202\217\001\266\272\023\136\320 -\361\355\351\050\335\052\275\045\216\320\372\023\014\026\017\167 -\237\166\051\064\160\154\353\171\113\235\357\116\064\360\105\273 -\045\054\165\222\104\137\247\233\304\252\322\263\157\056\274\141 -\353\206\001\114\331\172\271\165\147\213\003\113\307\063\122\170 -\236\005\300\355\217\164\170\035\022\043\266\062\374\121\120\136 -\055\336\120\276\020\074\216\357\010\205\365\072\372\362\336\347 -\330\114\072\345\022\353\364\066\164\230\132\122\212\224\032\146 -\251\156\105\076\024\053\215\064\010\252\357\005\023\141\022\220 -\204\150\015\021\132\054\257\171\236\160\224\237\305\144\313\314 -\170\366\123\134\340\327\015\261\076\343\026\013\363\246\354\064 -\102\076\165\020\204\245\330\275\261\343\352\141\346\044\234\302 -\201\332\036\330\157\374\170\055\026\343\104\055\300\322\075\136 -\175\240\322\126\324\140\067\161\376\114\216\145\234\326\073\332 -\066\334\330\063\147\320\001 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Colegio de Registradores Mercantiles" -# Issuer: CN=Registradores de Espa..a - CA Ra..z,OU=Certificado Propio,O=Colegio de Registradores de la Propiedad y Mercantiles de Espa..a,C=ES -# Serial Number:2d:e4:0a:e1:9b:d1:c2:aa:4c:f4:00:ac:81:35:f9 -# Subject: CN=Registradores de Espa..a - CA Ra..z,OU=Certificado Propio,O=Colegio de Registradores de la Propiedad y Mercantiles de Espa..a,C=ES -# Not Valid Before: Tue Jan 09 17:00:39 2007 -# Not Valid After : Thu Jan 09 17:00:39 2031 -# Fingerprint (SHA-256): 7D:2B:F3:48:9E:BC:9A:D3:44:8B:8B:08:27:71:5A:3C:BF:E3:D5:23:E3:B5:6A:9B:5F:C1:D2:A2:DA:2F:20:FE -# Fingerprint (SHA1): 21:11:65:CA:37:9F:BB:5E:D8:01:E3:1C:43:0A:62:AA:C1:09:BC:B4 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Colegio de Registradores Mercantiles" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\041\021\145\312\067\237\273\136\330\001\343\034\103\012\142\252 -\301\011\274\264 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\323\123\166\343\316\130\305\260\362\237\364\052\005\360\241\362 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\244\061\013\060\011\006\003\125\004\006\023\002\105\123 -\061\112\060\110\006\003\125\004\012\014\101\103\157\154\145\147 -\151\157\040\144\145\040\122\145\147\151\163\164\162\141\144\157 -\162\145\163\040\144\145\040\154\141\040\120\162\157\160\151\145 -\144\141\144\040\171\040\115\145\162\143\141\156\164\151\154\145 -\163\040\144\145\040\105\163\160\141\303\261\141\061\033\060\031 -\006\003\125\004\013\014\022\103\145\162\164\151\146\151\143\141 -\144\157\040\120\162\157\160\151\157\061\054\060\052\006\003\125 -\004\003\014\043\122\145\147\151\163\164\162\141\144\157\162\145 -\163\040\144\145\040\105\163\160\141\303\261\141\040\055\040\103 -\101\040\122\141\303\255\172 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\017\055\344\012\341\233\321\302\252\114\364\000\254\201\065 -\371 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "TeliaSonera Root CA v1" # @@ -11567,220 +9294,51 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "PostSignum Root QCA 2" +# Certificate "Amazon Services Root Certificate Authority -- G2" # -# Issuer: CN=PostSignum Root QCA 2,O="..esk.. po..ta, s.p. [I.. 47114983]",C=CZ -# Serial Number: 100 (0x64) -# Subject: CN=PostSignum Root QCA 2,O="..esk.. po..ta, s.p. [I.. 47114983]",C=CZ -# Not Valid Before: Tue Jan 19 08:04:31 2010 -# Not Valid After : Sun Jan 19 08:04:31 2025 -# Fingerprint (SHA-256): AD:01:6F:95:80:50:E0:E7:E4:6F:AE:7D:CC:50:19:7E:D8:E3:FF:0A:4B:26:2E:5D:DC:DB:3E:DD:DC:7D:65:78 -# Fingerprint (SHA1): A0:F8:DB:3F:0B:F4:17:69:3B:28:2E:B7:4A:6A:D8:6D:F9:D4:48:A3 +# Issuer: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US +# Serial Number: 0 (0x0) +# Subject: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US +# Not Valid Before: Tue Sep 01 00:00:00 2009 +# Not Valid After : Thu Dec 31 23:59:59 2037 +# Fingerprint (SHA-256): 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5 +# Fingerprint (SHA1): 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "PostSignum Root QCA 2" +CKA_LABEL UTF8 "Amazon Services Root Certificate Authority -- G2" CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 CKA_SUBJECT MULTILINE_OCTAL -\060\133\061\013\060\011\006\003\125\004\006\023\002\103\132\061 -\054\060\052\006\003\125\004\012\014\043\304\214\145\163\153\303 -\241\040\160\157\305\241\164\141\054\040\163\056\160\056\040\133 -\111\304\214\040\064\067\061\061\064\071\070\063\135\061\036\060 -\034\006\003\125\004\003\023\025\120\157\163\164\123\151\147\156 -\165\155\040\122\157\157\164\040\121\103\101\040\062 +\060\201\230\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\020\060\016\006\003\125\004\010\023\007\101\162\151\172\157 +\156\141\061\023\060\021\006\003\125\004\007\023\012\123\143\157 +\164\164\163\144\141\154\145\061\045\060\043\006\003\125\004\012 +\023\034\123\164\141\162\146\151\145\154\144\040\124\145\143\150 +\156\157\154\157\147\151\145\163\054\040\111\156\143\056\061\073 +\060\071\006\003\125\004\003\023\062\123\164\141\162\146\151\145 +\154\144\040\123\145\162\166\151\143\145\163\040\122\157\157\164 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\040\055\040\107\062 END CKA_ID UTF8 "0" CKA_ISSUER MULTILINE_OCTAL -\060\133\061\013\060\011\006\003\125\004\006\023\002\103\132\061 -\054\060\052\006\003\125\004\012\014\043\304\214\145\163\153\303 -\241\040\160\157\305\241\164\141\054\040\163\056\160\056\040\133 -\111\304\214\040\064\067\061\061\064\071\070\063\135\061\036\060 -\034\006\003\125\004\003\023\025\120\157\163\164\123\151\147\156 -\165\155\040\122\157\157\164\040\121\103\101\040\062 +\060\201\230\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\020\060\016\006\003\125\004\010\023\007\101\162\151\172\157 +\156\141\061\023\060\021\006\003\125\004\007\023\012\123\143\157 +\164\164\163\144\141\154\145\061\045\060\043\006\003\125\004\012 +\023\034\123\164\141\162\146\151\145\154\144\040\124\145\143\150 +\156\157\154\157\147\151\145\163\054\040\111\156\143\056\061\073 +\060\071\006\003\125\004\003\023\062\123\164\141\162\146\151\145 +\154\144\040\123\145\162\166\151\143\145\163\040\122\157\157\164 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\040\055\040\107\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\144 +\002\001\000 END CKA_VALUE MULTILINE_OCTAL -\060\202\005\234\060\202\004\204\240\003\002\001\002\002\001\144 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\133\061\013\060\011\006\003\125\004\006\023\002\103\132\061\054 -\060\052\006\003\125\004\012\014\043\304\214\145\163\153\303\241 -\040\160\157\305\241\164\141\054\040\163\056\160\056\040\133\111 -\304\214\040\064\067\061\061\064\071\070\063\135\061\036\060\034 -\006\003\125\004\003\023\025\120\157\163\164\123\151\147\156\165 -\155\040\122\157\157\164\040\121\103\101\040\062\060\036\027\015 -\061\060\060\061\061\071\060\070\060\064\063\061\132\027\015\062 -\065\060\061\061\071\060\070\060\064\063\061\132\060\133\061\013 -\060\011\006\003\125\004\006\023\002\103\132\061\054\060\052\006 -\003\125\004\012\014\043\304\214\145\163\153\303\241\040\160\157 -\305\241\164\141\054\040\163\056\160\056\040\133\111\304\214\040 -\064\067\061\061\064\071\070\063\135\061\036\060\034\006\003\125 -\004\003\023\025\120\157\163\164\123\151\147\156\165\155\040\122 -\157\157\164\040\121\103\101\040\062\060\202\001\042\060\015\006 -\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017 -\000\060\202\001\012\002\202\001\001\000\240\134\374\310\034\137 -\332\007\365\270\335\006\031\171\047\274\141\360\272\272\151\340 -\274\067\144\365\231\007\251\304\004\061\243\110\142\027\053\103 -\253\351\166\267\145\077\255\124\064\336\121\110\323\327\175\306 -\355\133\071\324\076\263\375\050\126\313\357\123\355\255\137\351 -\162\047\152\107\260\310\130\374\075\075\004\165\236\055\003\046 -\315\141\321\024\073\367\122\206\015\226\275\114\237\145\365\307 -\322\071\246\146\156\252\120\074\264\125\362\220\176\054\226\162 -\024\021\213\360\061\353\065\332\123\157\227\336\025\301\176\364 -\114\257\231\172\316\014\130\124\004\304\313\020\237\070\263\075 -\153\225\072\226\032\162\010\067\366\032\016\235\075\316\102\313 -\244\060\140\141\251\140\104\165\177\062\306\260\337\154\265\333 -\255\223\011\117\327\160\307\123\124\251\351\156\162\302\327\313 -\243\006\032\127\126\352\070\347\100\105\260\050\047\272\274\054 -\356\204\006\074\210\126\275\067\230\133\254\075\243\002\073\067 -\004\237\174\313\345\166\237\222\163\067\351\132\255\166\152\263 -\211\144\176\335\104\100\122\012\204\323\002\003\001\000\001\243 -\202\002\151\060\202\002\145\060\201\245\006\003\125\035\037\004 -\201\235\060\201\232\060\061\240\057\240\055\206\053\150\164\164 -\160\072\057\057\167\167\167\056\160\157\163\164\163\151\147\156 -\165\155\056\143\172\057\143\162\154\057\160\163\162\157\157\164 -\161\143\141\062\056\143\162\154\060\062\240\060\240\056\206\054 -\150\164\164\160\072\057\057\167\167\167\062\056\160\157\163\164 -\163\151\147\156\165\155\056\143\172\057\143\162\154\057\160\163 -\162\157\157\164\161\143\141\062\056\143\162\154\060\061\240\057 -\240\055\206\053\150\164\164\160\072\057\057\160\157\163\164\163 -\151\147\156\165\155\056\164\164\143\056\143\172\057\143\162\154 -\057\160\163\162\157\157\164\161\143\141\062\056\143\162\154\060 -\201\361\006\003\125\035\040\004\201\351\060\201\346\060\201\343 -\006\004\125\035\040\000\060\201\332\060\201\327\006\010\053\006 -\001\005\005\007\002\002\060\201\312\032\201\307\124\145\156\164 -\157\040\153\166\141\154\151\146\151\153\157\166\141\156\171\040 -\163\171\163\164\145\155\157\166\171\040\143\145\162\164\151\146 -\151\153\141\164\040\142\171\154\040\166\171\144\141\156\040\160 -\157\144\154\145\040\172\141\153\157\156\141\040\062\062\067\057 -\062\060\060\060\123\142\056\040\141\040\156\141\166\141\172\156 -\171\143\150\040\160\162\145\144\160\151\163\165\057\124\150\151 -\163\040\161\165\141\154\151\146\151\145\144\040\163\171\163\164 -\145\155\040\143\145\162\164\151\146\151\143\141\164\145\040\167 -\141\163\040\151\163\163\165\145\144\040\141\143\143\157\162\144 -\151\156\147\040\164\157\040\114\141\167\040\116\157\040\062\062 -\067\057\062\060\060\060\103\157\154\154\056\040\141\156\144\040 -\162\145\154\141\164\145\144\040\162\145\147\165\154\141\164\151 -\157\156\163\060\022\006\003\125\035\023\001\001\377\004\010\060 -\006\001\001\377\002\001\001\060\016\006\003\125\035\017\001\001 -\377\004\004\003\002\001\006\060\035\006\003\125\035\016\004\026 -\004\024\025\051\214\305\105\151\253\270\263\303\352\376\113\270 -\061\330\334\360\347\166\060\201\203\006\003\125\035\043\004\174 -\060\172\200\024\025\051\214\305\105\151\253\270\263\303\352\376 -\113\270\061\330\334\360\347\166\241\137\244\135\060\133\061\013 -\060\011\006\003\125\004\006\023\002\103\132\061\054\060\052\006 -\003\125\004\012\014\043\304\214\145\163\153\303\241\040\160\157 -\305\241\164\141\054\040\163\056\160\056\040\133\111\304\214\040 -\064\067\061\061\064\071\070\063\135\061\036\060\034\006\003\125 -\004\003\023\025\120\157\163\164\123\151\147\156\165\155\040\122 -\157\157\164\040\121\103\101\040\062\202\001\144\060\015\006\011 -\052\206\110\206\367\015\001\001\013\005\000\003\202\001\001\000 -\136\052\332\013\100\241\152\130\221\040\054\334\117\155\003\115 -\344\344\343\156\223\223\020\111\052\332\061\110\322\325\041\265 -\034\177\377\254\360\272\242\102\315\363\277\052\250\040\122\261 -\301\161\257\206\127\372\227\160\334\315\002\134\255\310\316\365 -\174\313\377\127\010\013\366\000\107\114\337\310\024\214\065\323 -\102\133\162\042\066\337\041\120\115\321\177\122\201\037\053\371 -\276\040\127\342\257\024\221\213\302\321\021\027\127\035\061\033 -\277\014\114\134\214\331\125\171\150\132\365\372\341\114\026\265 -\376\023\277\016\133\002\203\343\320\355\131\332\134\270\150\304 -\300\117\146\276\313\354\365\363\205\041\271\237\350\033\043\060 -\170\206\244\230\123\073\063\264\153\066\110\271\323\270\342\110 -\264\363\271\241\114\012\234\226\071\176\324\054\210\163\143\254 -\112\166\156\142\100\270\323\274\114\147\330\224\357\124\050\105 -\143\350\324\273\361\264\314\007\113\311\345\070\275\245\335\102 -\155\100\360\001\042\044\364\335\321\237\113\003\022\372\112\255 -\242\255\242\315\067\176\276\067\041\012\376\333\067\230\362\313 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "PostSignum Root QCA 2" -# Issuer: CN=PostSignum Root QCA 2,O="..esk.. po..ta, s.p. [I.. 47114983]",C=CZ -# Serial Number: 100 (0x64) -# Subject: CN=PostSignum Root QCA 2,O="..esk.. po..ta, s.p. [I.. 47114983]",C=CZ -# Not Valid Before: Tue Jan 19 08:04:31 2010 -# Not Valid After : Sun Jan 19 08:04:31 2025 -# Fingerprint (SHA-256): AD:01:6F:95:80:50:E0:E7:E4:6F:AE:7D:CC:50:19:7E:D8:E3:FF:0A:4B:26:2E:5D:DC:DB:3E:DD:DC:7D:65:78 -# Fingerprint (SHA1): A0:F8:DB:3F:0B:F4:17:69:3B:28:2E:B7:4A:6A:D8:6D:F9:D4:48:A3 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "PostSignum Root QCA 2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\240\370\333\077\013\364\027\151\073\050\056\267\112\152\330\155 -\371\324\110\243 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\131\163\146\050\121\053\230\264\020\377\175\006\372\042\326\310 -END -CKA_ISSUER MULTILINE_OCTAL -\060\133\061\013\060\011\006\003\125\004\006\023\002\103\132\061 -\054\060\052\006\003\125\004\012\014\043\304\214\145\163\153\303 -\241\040\160\157\305\241\164\141\054\040\163\056\160\056\040\133 -\111\304\214\040\064\067\061\061\064\071\070\063\135\061\036\060 -\034\006\003\125\004\003\023\025\120\157\163\164\123\151\147\156 -\165\155\040\122\157\157\164\040\121\103\101\040\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\144 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "Amazon Services Root Certificate Authority -- G2" -# -# Issuer: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US -# Serial Number: 0 (0x0) -# Subject: CN=Starfield Services Root Certificate Authority - G2,O="Starfield Technologies, Inc.",L=Scottsdale,ST=Arizona,C=US -# Not Valid Before: Tue Sep 01 00:00:00 2009 -# Not Valid After : Thu Dec 31 23:59:59 2037 -# Fingerprint (SHA-256): 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5 -# Fingerprint (SHA1): 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Amazon Services Root Certificate Authority -- G2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\230\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\020\060\016\006\003\125\004\010\023\007\101\162\151\172\157 -\156\141\061\023\060\021\006\003\125\004\007\023\012\123\143\157 -\164\164\163\144\141\154\145\061\045\060\043\006\003\125\004\012 -\023\034\123\164\141\162\146\151\145\154\144\040\124\145\143\150 -\156\157\154\157\147\151\145\163\054\040\111\156\143\056\061\073 -\060\071\006\003\125\004\003\023\062\123\164\141\162\146\151\145 -\154\144\040\123\145\162\166\151\143\145\163\040\122\157\157\164 -\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 -\150\157\162\151\164\171\040\055\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\230\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\020\060\016\006\003\125\004\010\023\007\101\162\151\172\157 -\156\141\061\023\060\021\006\003\125\004\007\023\012\123\143\157 -\164\164\163\144\141\154\145\061\045\060\043\006\003\125\004\012 -\023\034\123\164\141\162\146\151\145\154\144\040\124\145\143\150 -\156\157\154\157\147\151\145\163\054\040\111\156\143\056\061\073 -\060\071\006\003\125\004\003\023\062\123\164\141\162\146\151\145 -\154\144\040\123\145\162\166\151\143\145\163\040\122\157\157\164 -\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 -\150\157\162\151\164\171\040\055\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\357\060\202\002\327\240\003\002\001\002\002\001\000 +\060\202\003\357\060\202\002\327\240\003\002\001\002\002\001\000 \060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 \201\230\061\013\060\011\006\003\125\004\006\023\002\125\123\061 \020\060\016\006\003\125\004\010\023\007\101\162\151\172\157\156 @@ -13328,170 +10886,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Autoridade Certificadora da Raiz Brasileira v1 - ICP-Brasil" -# -# Issuer: CN=Autoridade Certificadora Raiz Brasileira v1,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Serial Number: 1 (0x1) -# Subject: CN=Autoridade Certificadora Raiz Brasileira v1,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Not Valid Before: Tue Jul 29 19:17:10 2008 -# Not Valid After : Thu Jul 29 19:17:10 2021 -# Fingerprint (SHA-256): CB:D8:ED:38:D4:A2:D6:77:D4:53:D7:0D:D8:89:0A:F4:F6:37:4C:BA:62:99:94:3F:1A:B3:A6:93:6C:6F:D7:95 -# Fingerprint (SHA1): 70:5D:2B:45:65:C7:04:7A:54:06:94:A7:9A:F7:AB:B8:42:BD:C1:61 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Autoridade Certificadora da Raiz Brasileira v1 - ICP-Brasil" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\200\060\202\003\150\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122\061 -\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102\162 -\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064\111 -\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156\141 -\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141\040 -\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055\040 -\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101\165 -\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146\151 -\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141\163 -\151\154\145\151\162\141\040\166\061\060\036\027\015\060\070\060 -\067\062\071\061\071\061\067\061\060\132\027\015\062\061\060\067 -\062\071\061\071\061\067\061\060\132\060\201\227\061\013\060\011 -\006\003\125\004\006\023\002\102\122\061\023\060\021\006\003\125 -\004\012\023\012\111\103\120\055\102\162\141\163\151\154\061\075 -\060\073\006\003\125\004\013\023\064\111\156\163\164\151\164\165 -\164\157\040\116\141\143\151\157\156\141\154\040\144\145\040\124 -\145\143\156\157\154\157\147\151\141\040\144\141\040\111\156\146 -\157\162\155\141\143\141\157\040\055\040\111\124\111\061\064\060 -\062\006\003\125\004\003\023\053\101\165\164\157\162\151\144\141 -\144\145\040\103\145\162\164\151\146\151\143\141\144\157\162\141 -\040\122\141\151\172\040\102\162\141\163\151\154\145\151\162\141 -\040\166\061\060\202\001\042\060\015\006\011\052\206\110\206\367 -\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002 -\202\001\001\000\316\034\350\276\223\064\316\311\261\344\124\356 -\011\366\354\244\010\205\240\077\306\212\306\160\060\247\200\214 -\355\076\001\124\007\214\031\043\073\237\273\307\264\213\040\261 -\342\367\101\026\055\136\207\146\272\260\007\335\157\321\077\074 -\332\310\131\063\235\025\260\237\222\310\126\124\130\212\072\047 -\242\064\036\233\170\265\267\315\345\233\351\300\056\022\236\160 -\170\007\372\216\362\114\300\370\345\162\174\036\251\251\140\003 -\127\046\107\333\203\166\303\316\310\022\273\321\377\357\256\263 -\142\175\232\240\344\274\156\175\001\056\064\140\334\207\340\137 -\177\005\160\134\060\025\054\302\165\243\077\120\003\146\043\146 -\054\347\164\167\170\333\146\027\337\371\037\015\202\150\217\165 -\207\367\351\061\172\123\117\317\130\142\273\100\242\064\317\300 -\160\204\120\227\025\332\040\113\351\373\114\102\255\053\150\216 -\243\331\255\005\142\376\010\164\304\350\301\314\205\023\316\255 -\050\060\120\335\336\300\201\301\111\260\136\056\046\070\351\143 -\004\063\167\265\200\166\315\052\177\362\074\254\135\223\102\071 -\364\242\163\105\002\003\001\000\001\243\201\324\060\201\321\060 -\116\006\003\125\035\040\004\107\060\105\060\103\006\005\140\114 -\001\001\000\060\072\060\070\006\010\053\006\001\005\005\007\002 -\001\026\054\150\164\164\160\072\057\057\141\143\162\141\151\172 -\056\151\143\160\142\162\141\163\151\154\056\147\157\166\056\142 -\162\057\104\120\103\141\143\162\141\151\172\056\160\144\146\060 -\077\006\003\125\035\037\004\070\060\066\060\064\240\062\240\060 -\206\056\150\164\164\160\072\057\057\141\143\162\141\151\172\056 -\151\143\160\142\162\141\163\151\154\056\147\157\166\056\142\162 -\057\114\103\122\141\143\162\141\151\172\166\061\056\143\162\154 -\060\035\006\003\125\035\016\004\026\004\024\102\262\054\134\164 -\001\007\276\233\377\125\063\073\356\051\273\135\221\277\006\060 -\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 -\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003 -\202\001\001\000\131\154\212\166\351\031\161\127\203\376\247\364 -\172\017\236\201\320\317\007\034\014\043\351\044\015\121\313\063 -\350\052\011\303\172\377\016\243\200\206\140\301\160\227\340\300 -\012\125\335\244\145\114\217\247\107\260\127\267\363\253\304\303 -\031\343\230\354\015\260\033\121\221\311\331\011\326\351\152\263 -\347\014\260\262\222\207\373\216\115\025\354\022\024\031\170\014 -\142\352\024\071\030\012\305\125\333\123\205\334\173\050\372\025 -\161\243\312\164\045\202\017\147\047\064\327\256\122\023\002\373 -\305\357\232\200\045\245\122\236\071\016\355\072\364\170\007\137 -\325\050\172\012\112\365\320\303\147\367\214\130\027\157\012\000 -\243\046\020\264\140\042\072\112\110\245\332\340\251\204\336\103 -\333\237\103\247\077\050\004\107\222\057\367\347\144\165\041\322 -\117\201\316\252\076\144\016\343\016\255\125\232\176\224\233\064 -\301\320\256\151\116\036\243\331\263\207\127\332\160\302\132\175 -\207\315\371\277\067\336\355\126\065\367\267\042\016\117\222\270 -\077\010\337\234\236\230\136\362\157\271\372\233\054\370\315\105 -\330\162\262\040 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Autoridade Certificadora da Raiz Brasileira v1 - ICP-Brasil" -# Issuer: CN=Autoridade Certificadora Raiz Brasileira v1,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Serial Number: 1 (0x1) -# Subject: CN=Autoridade Certificadora Raiz Brasileira v1,OU=Instituto Nacional de Tecnologia da Informacao - ITI,O=ICP-Brasil,C=BR -# Not Valid Before: Tue Jul 29 19:17:10 2008 -# Not Valid After : Thu Jul 29 19:17:10 2021 -# Fingerprint (SHA-256): CB:D8:ED:38:D4:A2:D6:77:D4:53:D7:0D:D8:89:0A:F4:F6:37:4C:BA:62:99:94:3F:1A:B3:A6:93:6C:6F:D7:95 -# Fingerprint (SHA1): 70:5D:2B:45:65:C7:04:7A:54:06:94:A7:9A:F7:AB:B8:42:BD:C1:61 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Autoridade Certificadora da Raiz Brasileira v1 - ICP-Brasil" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\160\135\053\105\145\307\004\172\124\006\224\247\232\367\253\270 -\102\275\301\141 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\223\361\255\064\013\053\347\250\124\140\342\163\214\244\224\061 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\227\061\013\060\011\006\003\125\004\006\023\002\102\122 -\061\023\060\021\006\003\125\004\012\023\012\111\103\120\055\102 -\162\141\163\151\154\061\075\060\073\006\003\125\004\013\023\064 -\111\156\163\164\151\164\165\164\157\040\116\141\143\151\157\156 -\141\154\040\144\145\040\124\145\143\156\157\154\157\147\151\141 -\040\144\141\040\111\156\146\157\162\155\141\143\141\157\040\055 -\040\111\124\111\061\064\060\062\006\003\125\004\003\023\053\101 -\165\164\157\162\151\144\141\144\145\040\103\145\162\164\151\146 -\151\143\141\144\157\162\141\040\122\141\151\172\040\102\162\141 -\163\151\154\145\151\162\141\040\166\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Entrust.net" # @@ -13661,381 +11055,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "ECRaizEstado" -# -# Issuer: CN=ECRaizEstado,O=SCEE,C=PT -# Serial Number:42:ea:5b:0a:51:11:26:7c:d8:27:74:b7:df:7f:71 -# Subject: CN=ECRaizEstado,O=SCEE,C=PT -# Not Valid Before: Fri Jun 23 13:41:27 2006 -# Not Valid After : Sun Jun 23 13:41:27 2030 -# Fingerprint (SHA-256): 48:8E:13:4F:30:C5:DB:56:B7:64:73:E6:08:08:68:42:BF:21:AF:8A:B3:CD:7A:C6:7E:BD:F1:25:D5:31:83:4E -# Fingerprint (SHA1): 39:13:85:3E:45:C4:39:A2:DA:71:8C:DF:B6:F3:E0:33:E0:4F:EE:71 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ECRaizEstado" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\063\061\013\060\011\006\003\125\004\006\023\002\120\124\061 -\015\060\013\006\003\125\004\012\014\004\123\103\105\105\061\025 -\060\023\006\003\125\004\003\014\014\105\103\122\141\151\172\105 -\163\164\141\144\157 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\063\061\013\060\011\006\003\125\004\006\023\002\120\124\061 -\015\060\013\006\003\125\004\012\014\004\123\103\105\105\061\025 -\060\023\006\003\125\004\003\014\014\105\103\122\141\151\172\105 -\163\164\141\144\157 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\017\102\352\133\012\121\021\046\174\330\047\164\267\337\177 -\161 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\156\060\202\003\126\240\003\002\001\002\002\017\102 -\352\133\012\121\021\046\174\330\047\164\267\337\177\161\060\015 -\006\011\052\206\110\206\367\015\001\001\005\005\000\060\063\061 -\013\060\011\006\003\125\004\006\023\002\120\124\061\015\060\013 -\006\003\125\004\012\014\004\123\103\105\105\061\025\060\023\006 -\003\125\004\003\014\014\105\103\122\141\151\172\105\163\164\141 -\144\157\060\036\027\015\060\066\060\066\062\063\061\063\064\061 -\062\067\132\027\015\063\060\060\066\062\063\061\063\064\061\062 -\067\132\060\063\061\013\060\011\006\003\125\004\006\023\002\120 -\124\061\015\060\013\006\003\125\004\012\014\004\123\103\105\105 -\061\025\060\023\006\003\125\004\003\014\014\105\103\122\141\151 -\172\105\163\164\141\144\157\060\202\002\042\060\015\006\011\052 -\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060 -\202\002\012\002\202\002\001\000\333\357\242\103\156\310\251\375 -\156\327\337\254\242\222\204\241\310\131\240\014\232\123\376\357 -\256\314\031\015\162\212\244\302\063\043\357\347\006\162\352\155 -\113\072\101\122\017\311\110\016\055\347\272\144\356\242\072\114 -\143\134\146\051\213\337\251\210\305\275\350\361\367\216\113\374 -\001\074\104\022\071\052\160\242\300\333\305\242\337\137\307\113 -\306\250\334\075\141\174\112\130\301\104\062\223\336\160\231\241 -\043\046\126\077\243\341\352\137\060\106\330\170\365\060\243\226 -\011\211\260\075\361\206\223\005\266\022\152\030\215\360\245\144 -\073\053\207\144\136\075\027\216\013\156\346\230\314\227\070\070 -\040\214\160\132\151\053\275\145\215\315\067\131\134\154\321\162 -\164\131\006\116\310\267\001\327\167\277\360\110\206\250\263\032 -\135\101\324\067\027\021\020\137\112\156\215\165\305\003\100\175 -\041\256\000\360\333\374\237\154\072\146\244\337\367\312\337\200 -\146\132\331\330\177\024\242\046\031\364\256\013\041\340\312\076 -\005\335\026\330\176\131\332\241\260\151\303\235\064\023\372\145 -\111\071\207\356\166\057\215\275\074\047\031\003\116\255\016\013 -\053\054\306\056\161\023\065\051\127\351\160\334\033\121\352\315 -\227\361\225\215\262\206\372\046\006\057\200\032\225\361\230\073 -\356\366\345\206\245\316\033\001\345\364\351\063\312\017\125\104 -\137\150\212\054\307\133\146\050\335\226\113\203\235\136\035\176 -\030\325\376\262\140\373\232\121\150\303\226\214\037\150\113\120 -\122\013\066\346\061\047\344\327\051\014\033\332\033\057\341\004 -\123\270\324\171\111\260\073\201\136\010\210\042\167\342\051\300 -\256\162\252\253\264\162\122\275\154\273\365\272\170\331\234\270 -\040\157\060\215\112\235\062\371\364\001\346\142\171\230\102\100 -\005\172\157\034\052\077\265\373\337\315\030\100\216\345\020\304 -\071\133\126\361\074\127\005\253\322\071\115\077\370\213\043\307 -\153\271\100\261\342\376\377\263\034\012\151\037\233\214\017\264 -\037\340\012\336\110\375\215\137\217\231\365\001\166\005\066\135 -\216\334\063\216\121\156\021\342\101\375\314\267\215\052\137\076 -\222\345\362\261\340\244\043\342\242\267\306\215\030\233\051\112 -\321\106\177\364\144\040\030\335\002\003\001\000\001\243\177\060 -\175\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003\002 -\001\006\060\035\006\003\125\035\016\004\026\004\024\161\177\065 -\336\365\167\161\155\035\022\234\341\220\244\272\360\251\203\217 -\200\060\073\006\003\125\035\040\004\064\060\062\060\060\006\004 -\125\035\040\000\060\050\060\046\006\010\053\006\001\005\005\007 -\002\001\026\032\150\164\164\160\072\057\057\167\167\167\056\145 -\143\145\145\056\147\157\166\056\160\164\057\144\160\143\060\015 -\006\011\052\206\110\206\367\015\001\001\005\005\000\003\202\002 -\001\000\214\255\234\162\245\265\147\166\147\070\207\351\072\214 -\376\235\131\065\276\220\361\003\000\240\130\330\230\321\277\374 -\374\363\120\334\264\145\325\332\272\360\214\056\174\015\346\011 -\221\137\115\243\366\135\170\234\130\135\152\160\224\243\257\333 -\057\000\311\003\100\153\337\121\003\026\031\214\053\274\231\066 -\366\300\255\222\030\023\214\247\355\035\322\337\003\220\005\354 -\260\223\230\233\367\115\132\023\370\347\233\367\066\166\336\174 -\046\370\021\070\117\111\116\263\163\037\137\047\133\341\236\062 -\036\366\300\230\033\331\040\054\134\226\215\206\311\013\105\327 -\222\255\212\275\352\127\242\243\126\266\040\074\354\262\307\071 -\176\260\200\376\275\121\053\052\264\303\162\151\303\371\107\056 -\156\377\234\207\355\334\165\313\020\210\340\264\316\056\016\123 -\035\013\350\156\036\102\114\320\276\071\170\165\311\024\336\047 -\221\163\252\354\152\200\360\360\027\226\142\117\276\004\313\342 -\247\345\135\017\223\105\313\131\110\046\023\336\335\261\365\012 -\332\026\261\250\035\217\176\130\033\267\325\011\336\210\153\316 -\204\076\250\276\122\142\312\322\241\241\307\313\074\026\340\166 -\126\060\077\346\017\153\006\167\376\144\235\132\152\163\174\356 -\336\041\351\232\111\227\067\266\204\177\242\221\076\105\373\327 -\132\006\305\207\065\334\272\110\114\206\001\010\107\066\266\070 -\120\225\021\231\163\321\067\111\012\372\102\117\057\020\124\323 -\101\220\372\310\334\273\021\334\015\314\175\174\233\334\016\221 -\161\206\115\270\362\025\232\053\070\027\021\241\362\236\250\154 -\234\343\316\256\342\346\113\213\362\212\006\073\007\167\002\021 -\356\203\352\235\146\206\312\360\142\251\325\127\203\244\025\361 -\105\024\376\032\165\177\245\017\334\122\164\131\165\012\370\373 -\125\101\251\134\215\061\104\335\315\224\116\063\321\033\101\252 -\333\327\241\074\360\305\110\155\105\101\065\265\171\203\346\371 -\115\361\126\070\327\277\100\042\373\040\200\343\034\302\131\106 -\007\143\002\141\000\073\233\120\273\103\303\260\351\012\232\270 -\166\364\107\141\125\144\160\117\067\331\234\021\243\023\262\341 -\335\100\102\273\230\327\240\006\213\346\150\127\113\016\070\150 -\177\272 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "ECRaizEstado" -# Issuer: CN=ECRaizEstado,O=SCEE,C=PT -# Serial Number:42:ea:5b:0a:51:11:26:7c:d8:27:74:b7:df:7f:71 -# Subject: CN=ECRaizEstado,O=SCEE,C=PT -# Not Valid Before: Fri Jun 23 13:41:27 2006 -# Not Valid After : Sun Jun 23 13:41:27 2030 -# Fingerprint (SHA-256): 48:8E:13:4F:30:C5:DB:56:B7:64:73:E6:08:08:68:42:BF:21:AF:8A:B3:CD:7A:C6:7E:BD:F1:25:D5:31:83:4E -# Fingerprint (SHA1): 39:13:85:3E:45:C4:39:A2:DA:71:8C:DF:B6:F3:E0:33:E0:4F:EE:71 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ECRaizEstado" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\071\023\205\076\105\304\071\242\332\161\214\337\266\363\340\063 -\340\117\356\161 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\302\333\253\216\226\122\305\356\256\362\125\000\211\155\125\225 -END -CKA_ISSUER MULTILINE_OCTAL -\060\063\061\013\060\011\006\003\125\004\006\023\002\120\124\061 -\015\060\013\006\003\125\004\012\014\004\123\103\105\105\061\025 -\060\023\006\003\125\004\003\014\014\105\103\122\141\151\172\105 -\163\164\141\144\157 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\017\102\352\133\012\121\021\046\174\330\047\164\267\337\177 -\161 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "Posta CA Root" -# -# Issuer: CN=Posta CA Root,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=ca,DC=posta,DC=rs -# Serial Number: 1224507125 (0x48fc7ef5) -# Subject: CN=Posta CA Root,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=ca,DC=posta,DC=rs -# Not Valid Before: Mon Oct 20 12:22:08 2008 -# Not Valid After : Fri Oct 20 12:52:08 2028 -# Fingerprint (SHA-256): CD:20:12:56:FE:5C:ED:0B:FF:F8:DF:59:5F:FF:36:B1:41:6D:53:13:A9:99:F5:32:EF:4A:99:15:DF:96:DE:E0 -# Fingerprint (SHA1): D6:BF:79:94:F4:2B:E5:FA:29:DA:0B:D7:58:7B:59:1F:47:A4:4F:22 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Posta CA Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\256\061\022\060\020\006\012\011\222\046\211\223\362\054 -\144\001\031\026\002\162\163\061\025\060\023\006\012\011\222\046 -\211\223\362\054\144\001\031\026\005\160\157\163\164\141\061\022 -\060\020\006\012\011\222\046\211\223\362\054\144\001\031\026\002 -\143\141\061\026\060\024\006\003\125\004\003\023\015\103\157\156 -\146\151\147\165\162\141\164\151\157\156\061\021\060\017\006\003 -\125\004\003\023\010\123\145\162\166\151\143\145\163\061\034\060 -\032\006\003\125\004\003\023\023\120\165\142\154\151\143\040\113 -\145\171\040\123\145\162\166\151\143\145\163\061\014\060\012\006 -\003\125\004\003\023\003\101\111\101\061\026\060\024\006\003\125 -\004\003\023\015\120\157\163\164\141\040\103\101\040\122\157\157 -\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\256\061\022\060\020\006\012\011\222\046\211\223\362\054 -\144\001\031\026\002\162\163\061\025\060\023\006\012\011\222\046 -\211\223\362\054\144\001\031\026\005\160\157\163\164\141\061\022 -\060\020\006\012\011\222\046\211\223\362\054\144\001\031\026\002 -\143\141\061\026\060\024\006\003\125\004\003\023\015\103\157\156 -\146\151\147\165\162\141\164\151\157\156\061\021\060\017\006\003 -\125\004\003\023\010\123\145\162\166\151\143\145\163\061\034\060 -\032\006\003\125\004\003\023\023\120\165\142\154\151\143\040\113 -\145\171\040\123\145\162\166\151\143\145\163\061\014\060\012\006 -\003\125\004\003\023\003\101\111\101\061\026\060\024\006\003\125 -\004\003\023\015\120\157\163\164\141\040\103\101\040\122\157\157 -\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\110\374\176\365 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\007\037\060\202\006\007\240\003\002\001\002\002\004\110 -\374\176\365\060\015\006\011\052\206\110\206\367\015\001\001\005 -\005\000\060\201\256\061\022\060\020\006\012\011\222\046\211\223 -\362\054\144\001\031\026\002\162\163\061\025\060\023\006\012\011 -\222\046\211\223\362\054\144\001\031\026\005\160\157\163\164\141 -\061\022\060\020\006\012\011\222\046\211\223\362\054\144\001\031 -\026\002\143\141\061\026\060\024\006\003\125\004\003\023\015\103 -\157\156\146\151\147\165\162\141\164\151\157\156\061\021\060\017 -\006\003\125\004\003\023\010\123\145\162\166\151\143\145\163\061 -\034\060\032\006\003\125\004\003\023\023\120\165\142\154\151\143 -\040\113\145\171\040\123\145\162\166\151\143\145\163\061\014\060 -\012\006\003\125\004\003\023\003\101\111\101\061\026\060\024\006 -\003\125\004\003\023\015\120\157\163\164\141\040\103\101\040\122 -\157\157\164\060\036\027\015\060\070\061\060\062\060\061\062\062 -\062\060\070\132\027\015\062\070\061\060\062\060\061\062\065\062 -\060\070\132\060\201\256\061\022\060\020\006\012\011\222\046\211 -\223\362\054\144\001\031\026\002\162\163\061\025\060\023\006\012 -\011\222\046\211\223\362\054\144\001\031\026\005\160\157\163\164 -\141\061\022\060\020\006\012\011\222\046\211\223\362\054\144\001 -\031\026\002\143\141\061\026\060\024\006\003\125\004\003\023\015 -\103\157\156\146\151\147\165\162\141\164\151\157\156\061\021\060 -\017\006\003\125\004\003\023\010\123\145\162\166\151\143\145\163 -\061\034\060\032\006\003\125\004\003\023\023\120\165\142\154\151 -\143\040\113\145\171\040\123\145\162\166\151\143\145\163\061\014 -\060\012\006\003\125\004\003\023\003\101\111\101\061\026\060\024 -\006\003\125\004\003\023\015\120\157\163\164\141\040\103\101\040 -\122\157\157\164\060\202\001\042\060\015\006\011\052\206\110\206 -\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012 -\002\202\001\001\000\250\362\275\210\276\300\257\104\276\233\112 -\242\143\034\326\126\253\035\051\262\034\252\025\036\105\321\254 -\235\240\141\325\065\371\344\132\203\066\143\103\336\070\127\025 -\374\360\224\142\364\007\200\127\203\127\250\263\025\274\373\115 -\043\170\137\332\366\307\201\026\276\253\337\347\334\203\123\163 -\053\266\335\143\210\215\105\363\015\335\175\277\350\210\260\146 -\301\103\135\067\322\155\241\234\232\106\303\263\077\320\302\240 -\212\224\056\203\246\074\303\140\275\054\314\036\213\143\202\166 -\101\050\344\025\153\134\014\141\071\125\070\101\312\310\146\350 -\307\270\227\122\020\046\160\267\007\267\011\036\246\023\136\256 -\231\132\046\157\144\075\354\304\323\245\271\134\166\144\255\143 -\175\210\203\342\113\314\015\336\324\306\323\010\102\365\133\027 -\365\161\341\221\055\003\237\236\034\334\213\162\244\350\107\144 -\020\207\144\060\163\330\362\264\361\127\046\223\127\313\266\307 -\015\210\213\035\317\005\060\135\004\326\166\067\350\040\062\127 -\277\017\234\063\306\010\214\366\264\302\251\006\260\133\060\241 -\036\055\022\272\077\002\003\001\000\001\243\202\003\101\060\202 -\003\075\060\017\006\003\125\035\023\001\001\377\004\005\060\003 -\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\201\272\006\003\125\035\040\004\201\262\060\201 -\257\060\201\254\006\013\053\006\001\004\001\372\070\012\012\001 -\001\060\201\234\060\060\006\010\053\006\001\005\005\007\002\001 -\026\044\150\164\164\160\072\057\057\167\167\167\056\143\141\056 -\160\157\163\164\141\056\162\163\057\144\157\153\165\155\145\156 -\164\141\143\151\152\141\060\150\006\010\053\006\001\005\005\007 -\002\002\060\134\032\132\117\166\157\040\152\145\040\145\154\145 -\153\164\162\157\156\163\153\151\040\163\145\162\164\151\146\151 -\153\141\164\040\122\117\117\124\040\103\101\040\163\145\162\166 -\145\162\141\040\123\145\162\164\151\146\151\153\141\143\151\157 -\156\157\147\040\164\145\154\141\040\120\157\163\164\145\072\040 -\042\120\157\163\164\141\040\103\101\040\122\157\157\164\042\056 -\060\021\006\011\140\206\110\001\206\370\102\001\001\004\004\003 -\002\000\007\060\202\001\274\006\003\125\035\037\004\202\001\263 -\060\202\001\257\060\201\311\240\201\306\240\201\303\244\201\300 -\060\201\275\061\022\060\020\006\012\011\222\046\211\223\362\054 -\144\001\031\026\002\162\163\061\025\060\023\006\012\011\222\046 -\211\223\362\054\144\001\031\026\005\160\157\163\164\141\061\022 -\060\020\006\012\011\222\046\211\223\362\054\144\001\031\026\002 -\143\141\061\026\060\024\006\003\125\004\003\023\015\103\157\156 -\146\151\147\165\162\141\164\151\157\156\061\021\060\017\006\003 -\125\004\003\023\010\123\145\162\166\151\143\145\163\061\034\060 -\032\006\003\125\004\003\023\023\120\165\142\154\151\143\040\113 -\145\171\040\123\145\162\166\151\143\145\163\061\014\060\012\006 -\003\125\004\003\023\003\101\111\101\061\026\060\024\006\003\125 -\004\003\023\015\120\157\163\164\141\040\103\101\040\122\157\157 -\164\061\015\060\013\006\003\125\004\003\023\004\103\122\114\061 -\060\201\340\240\201\335\240\201\332\206\201\243\154\144\141\160 -\072\057\057\154\144\141\160\056\143\141\056\160\157\163\164\141 -\056\162\163\057\143\156\075\120\157\163\164\141\045\062\060\103 -\101\045\062\060\122\157\157\164\054\143\156\075\101\111\101\054 -\143\156\075\120\165\142\154\151\143\045\062\060\113\145\171\045 -\062\060\123\145\162\166\151\143\145\163\054\143\156\075\123\145 -\162\166\151\143\145\163\054\143\156\075\103\157\156\146\151\147 -\165\162\141\164\151\157\156\054\144\143\075\143\141\054\144\143 -\075\160\157\163\164\141\054\144\143\075\162\163\077\143\145\162 -\164\151\146\151\143\141\164\145\122\145\166\157\143\141\164\151 -\157\156\114\151\163\164\045\063\102\142\151\156\141\162\171\206 -\062\150\164\164\160\072\057\057\163\145\162\164\151\146\151\153 -\141\164\151\056\143\141\056\160\157\163\164\141\056\162\163\057 -\143\162\154\057\120\157\163\164\141\103\101\122\157\157\164\056 -\143\162\154\060\053\006\003\125\035\020\004\044\060\042\200\017 -\062\060\060\070\061\060\062\060\061\062\062\062\060\070\132\201 -\017\062\060\062\070\061\060\062\060\061\062\065\062\060\070\132 -\060\037\006\003\125\035\043\004\030\060\026\200\024\362\313\215 -\342\065\357\020\103\304\332\173\312\372\353\211\003\241\042\257 -\270\060\035\006\003\125\035\016\004\026\004\024\362\313\215\342 -\065\357\020\103\304\332\173\312\372\353\211\003\241\042\257\270 -\060\035\006\011\052\206\110\206\366\175\007\101\000\004\020\060 -\016\033\010\126\067\056\061\072\064\056\060\003\002\004\220\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003\202 -\001\001\000\160\106\241\310\344\027\005\146\017\235\342\103\061 -\110\035\222\220\031\304\205\001\205\026\156\370\222\316\173\256 -\122\026\304\227\215\012\050\175\325\313\154\343\325\345\016\062 -\117\310\150\055\064\010\075\163\250\223\102\051\063\106\014\104 -\147\361\320\232\234\151\001\345\221\361\015\311\151\074\063\113 -\116\031\223\143\063\005\051\041\241\330\377\076\124\253\236\366 -\241\172\002\327\334\377\245\076\124\170\371\323\301\312\022\225 -\371\211\236\024\342\362\241\104\262\313\351\055\165\065\314\226 -\125\273\070\013\210\046\332\326\254\357\323\122\242\013\113\072 -\123\332\113\042\123\314\312\052\044\232\142\252\304\062\232\176 -\334\314\301\262\154\315\217\331\264\300\317\365\002\300\214\053 -\204\133\033\100\274\020\320\120\341\141\326\146\126\232\004\221 -\245\343\325\275\240\056\042\201\261\331\070\332\344\250\207\137 -\074\106\004\226\336\311\232\073\277\255\170\154\035\111\111\264 -\151\271\160\017\005\222\126\266\375\257\256\370\040\055\107\043 -\317\266\034\315\304\233\200\116\371\277\061\300\124\276\273\061 -\177\363\076 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Posta CA Root" -# Issuer: CN=Posta CA Root,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=ca,DC=posta,DC=rs -# Serial Number: 1224507125 (0x48fc7ef5) -# Subject: CN=Posta CA Root,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=ca,DC=posta,DC=rs -# Not Valid Before: Mon Oct 20 12:22:08 2008 -# Not Valid After : Fri Oct 20 12:52:08 2028 -# Fingerprint (SHA-256): CD:20:12:56:FE:5C:ED:0B:FF:F8:DF:59:5F:FF:36:B1:41:6D:53:13:A9:99:F5:32:EF:4A:99:15:DF:96:DE:E0 -# Fingerprint (SHA1): D6:BF:79:94:F4:2B:E5:FA:29:DA:0B:D7:58:7B:59:1F:47:A4:4F:22 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Posta CA Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\326\277\171\224\364\053\345\372\051\332\013\327\130\173\131\037 -\107\244\117\042 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\030\002\260\001\047\003\152\031\033\062\073\203\336\232\251\205 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\256\061\022\060\020\006\012\011\222\046\211\223\362\054 -\144\001\031\026\002\162\163\061\025\060\023\006\012\011\222\046 -\211\223\362\054\144\001\031\026\005\160\157\163\164\141\061\022 -\060\020\006\012\011\222\046\211\223\362\054\144\001\031\026\002 -\143\141\061\026\060\024\006\003\125\004\003\023\015\103\157\156 -\146\151\147\165\162\141\164\151\157\156\061\021\060\017\006\003 -\125\004\003\023\010\123\145\162\166\151\143\145\163\061\034\060 -\032\006\003\125\004\003\023\023\120\165\142\154\151\143\040\113 -\145\171\040\123\145\162\166\151\143\145\163\061\014\060\012\006 -\003\125\004\003\023\003\101\111\101\061\026\060\024\006\003\125 -\004\003\023\015\120\157\163\164\141\040\103\101\040\122\157\157 -\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\004\110\374\176\365 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "TWCA Root Certification Authority 1" # @@ -15969,166 +12988,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "VRK Gov. Root CA" -# -# Issuer: CN=VRK Gov. Root CA,OU=Varmennepalvelut,OU=Certification Authority Services,O=Vaestorekisterikeskus CA,ST=Finland,C=FI -# Serial Number: 100000 (0x186a0) -# Subject: CN=VRK Gov. Root CA,OU=Varmennepalvelut,OU=Certification Authority Services,O=Vaestorekisterikeskus CA,ST=Finland,C=FI -# Not Valid Before: Wed Dec 18 13:53:00 2002 -# Not Valid After : Mon Dec 18 13:51:08 2023 -# Fingerprint (SHA-256): F0:08:73:3E:C5:00:DC:49:87:63:CC:92:64:C6:FC:EA:40:EC:22:00:0E:92:7D:05:3C:E9:C9:0B:FA:04:6C:B2 -# Fingerprint (SHA1): FA:A7:D9:FB:31:B7:46:F2:00:A8:5E:65:79:76:13:D8:16:E0:63:B5 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "VRK Gov. Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\243\061\013\060\011\006\003\125\004\006\023\002\106\111 -\061\020\060\016\006\003\125\004\010\023\007\106\151\156\154\141 -\156\144\061\041\060\037\006\003\125\004\012\023\030\126\141\145 -\163\164\157\162\145\153\151\163\164\145\162\151\153\145\163\153 -\165\163\040\103\101\061\051\060\047\006\003\125\004\013\023\040 -\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165 -\164\150\157\162\151\164\171\040\123\145\162\166\151\143\145\163 -\061\031\060\027\006\003\125\004\013\023\020\126\141\162\155\145 -\156\156\145\160\141\154\166\145\154\165\164\061\031\060\027\006 -\003\125\004\003\023\020\126\122\113\040\107\157\166\056\040\122 -\157\157\164\040\103\101 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\243\061\013\060\011\006\003\125\004\006\023\002\106\111 -\061\020\060\016\006\003\125\004\010\023\007\106\151\156\154\141 -\156\144\061\041\060\037\006\003\125\004\012\023\030\126\141\145 -\163\164\157\162\145\153\151\163\164\145\162\151\153\145\163\153 -\165\163\040\103\101\061\051\060\047\006\003\125\004\013\023\040 -\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165 -\164\150\157\162\151\164\171\040\123\145\162\166\151\143\145\163 -\061\031\060\027\006\003\125\004\013\023\020\126\141\162\155\145 -\156\156\145\160\141\154\166\145\154\165\164\061\031\060\027\006 -\003\125\004\003\023\020\126\122\113\040\107\157\166\056\040\122 -\157\157\164\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\003\001\206\240 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\032\060\202\003\002\240\003\002\001\002\002\003\001 -\206\240\060\015\006\011\052\206\110\206\367\015\001\001\005\005 -\000\060\201\243\061\013\060\011\006\003\125\004\006\023\002\106 -\111\061\020\060\016\006\003\125\004\010\023\007\106\151\156\154 -\141\156\144\061\041\060\037\006\003\125\004\012\023\030\126\141 -\145\163\164\157\162\145\153\151\163\164\145\162\151\153\145\163 -\153\165\163\040\103\101\061\051\060\047\006\003\125\004\013\023 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101 -\165\164\150\157\162\151\164\171\040\123\145\162\166\151\143\145 -\163\061\031\060\027\006\003\125\004\013\023\020\126\141\162\155 -\145\156\156\145\160\141\154\166\145\154\165\164\061\031\060\027 -\006\003\125\004\003\023\020\126\122\113\040\107\157\166\056\040 -\122\157\157\164\040\103\101\060\036\027\015\060\062\061\062\061 -\070\061\063\065\063\060\060\132\027\015\062\063\061\062\061\070 -\061\063\065\061\060\070\132\060\201\243\061\013\060\011\006\003 -\125\004\006\023\002\106\111\061\020\060\016\006\003\125\004\010 -\023\007\106\151\156\154\141\156\144\061\041\060\037\006\003\125 -\004\012\023\030\126\141\145\163\164\157\162\145\153\151\163\164 -\145\162\151\153\145\163\153\165\163\040\103\101\061\051\060\047 -\006\003\125\004\013\023\040\103\145\162\164\151\146\151\143\141 -\164\151\157\156\040\101\165\164\150\157\162\151\164\171\040\123 -\145\162\166\151\143\145\163\061\031\060\027\006\003\125\004\013 -\023\020\126\141\162\155\145\156\156\145\160\141\154\166\145\154 -\165\164\061\031\060\027\006\003\125\004\003\023\020\126\122\113 -\040\107\157\166\056\040\122\157\157\164\040\103\101\060\202\001 -\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\001\017\000\060\202\001\012\002\202\001\001\000\260\205 -\025\332\310\003\067\320\243\106\067\154\033\036\226\060\302\132 -\205\022\147\043\362\273\237\347\212\201\140\047\370\023\251\074 -\274\367\206\252\252\364\363\045\051\264\376\165\256\036\201\206 -\212\005\262\035\145\262\070\350\264\314\050\232\373\027\066\361 -\223\325\171\316\301\203\213\041\117\303\015\255\101\337\170\235 -\110\343\037\102\104\374\074\155\041\040\153\255\042\204\044\102 -\217\027\115\302\120\037\144\315\055\071\042\126\210\375\262\143 -\235\124\332\102\151\300\310\117\327\030\342\076\310\151\204\224 -\075\054\200\306\174\316\275\327\123\037\353\210\271\246\313\273 -\205\127\357\127\166\135\014\213\323\136\022\101\237\041\300\071 -\364\046\155\010\372\070\263\241\167\261\356\026\330\320\150\332 -\264\230\245\240\145\106\112\153\215\176\252\115\140\270\370\310 -\015\374\161\076\356\071\207\201\264\331\370\156\220\356\077\016 -\141\327\035\053\150\346\056\341\102\104\046\170\054\130\362\175 -\026\177\141\300\111\044\052\211\207\266\135\057\051\031\370\246 -\347\216\122\236\101\113\132\016\252\270\302\146\102\123\002\003 -\001\000\001\243\125\060\123\060\017\006\003\125\035\023\001\001 -\377\004\005\060\003\001\001\377\060\021\006\011\140\206\110\001 -\206\370\102\001\001\004\004\003\002\000\007\060\016\006\003\125 -\035\017\001\001\377\004\004\003\002\001\306\060\035\006\003\125 -\035\016\004\026\004\024\333\351\341\233\322\321\044\013\374\253 -\343\240\147\352\256\234\113\167\364\260\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\003\202\001\001\000\255\175 -\110\017\124\021\236\130\356\257\015\233\022\057\041\244\315\233 -\272\204\107\346\311\045\125\043\343\337\030\130\052\054\333\136 -\367\315\124\365\121\044\173\142\147\341\261\037\111\257\064\320 -\353\261\314\331\242\015\122\177\102\113\210\140\227\317\045\162 -\267\117\051\055\142\237\117\241\300\125\127\126\016\304\150\227 -\221\037\234\144\302\051\062\001\351\324\310\332\270\201\230\050 -\056\030\307\054\374\353\233\122\226\337\364\310\220\031\055\043 -\363\361\273\161\332\236\205\043\275\032\357\056\344\172\171\267 -\303\235\206\111\055\143\271\055\164\317\145\017\062\146\211\337 -\073\041\356\051\157\071\143\331\025\301\156\366\337\200\076\120 -\170\031\212\335\003\243\024\245\067\247\265\054\174\266\021\207 -\347\005\362\274\266\336\324\377\227\201\050\204\376\376\154\106 -\205\020\101\237\115\165\214\007\324\231\147\157\165\212\157\344 -\120\222\366\231\325\020\270\304\251\173\367\027\215\113\277\327 -\225\237\011\334\104\017\036\062\303\300\317\323\171\015\344\307 -\073\207\360\220\064\210\041\142\111\222\004\004\037\274 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "VRK Gov. Root CA" -# Issuer: CN=VRK Gov. Root CA,OU=Varmennepalvelut,OU=Certification Authority Services,O=Vaestorekisterikeskus CA,ST=Finland,C=FI -# Serial Number: 100000 (0x186a0) -# Subject: CN=VRK Gov. Root CA,OU=Varmennepalvelut,OU=Certification Authority Services,O=Vaestorekisterikeskus CA,ST=Finland,C=FI -# Not Valid Before: Wed Dec 18 13:53:00 2002 -# Not Valid After : Mon Dec 18 13:51:08 2023 -# Fingerprint (SHA-256): F0:08:73:3E:C5:00:DC:49:87:63:CC:92:64:C6:FC:EA:40:EC:22:00:0E:92:7D:05:3C:E9:C9:0B:FA:04:6C:B2 -# Fingerprint (SHA1): FA:A7:D9:FB:31:B7:46:F2:00:A8:5E:65:79:76:13:D8:16:E0:63:B5 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "VRK Gov. Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\372\247\331\373\061\267\106\362\000\250\136\145\171\166\023\330 -\026\340\143\265 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\367\266\141\253\003\302\134\106\076\055\054\364\241\044\330\124 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\243\061\013\060\011\006\003\125\004\006\023\002\106\111 -\061\020\060\016\006\003\125\004\010\023\007\106\151\156\154\141 -\156\144\061\041\060\037\006\003\125\004\012\023\030\126\141\145 -\163\164\157\162\145\153\151\163\164\145\162\151\153\145\163\153 -\165\163\040\103\101\061\051\060\047\006\003\125\004\013\023\040 -\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165 -\164\150\157\162\151\164\171\040\123\145\162\166\151\143\145\163 -\061\031\060\027\006\003\125\004\013\023\020\126\141\162\155\145 -\156\156\145\160\141\154\166\145\154\165\164\061\031\060\027\006 -\003\125\004\003\023\020\126\122\113\040\107\157\166\056\040\122 -\157\157\164\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\003\001\206\240 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Visa Information Delivery Root CA" # @@ -16811,176 +13670,7 @@ CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE # -# Certificate "SwissSign Platinum G2 Root CA" -# -# Issuer: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH -# Serial Number:4e:b2:00:67:0c:03:5d:4f -# Subject: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH -# Not Valid Before: Wed Oct 25 08:36:00 2006 -# Not Valid After : Sat Oct 25 08:36:00 2036 -# Fingerprint (SHA-256): 3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36 -# Fingerprint (SHA1): 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SwissSign Platinum G2 Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\111\061\013\060\011\006\003\125\004\006\023\002\103\110\061 -\025\060\023\006\003\125\004\012\023\014\123\167\151\163\163\123 -\151\147\156\040\101\107\061\043\060\041\006\003\125\004\003\023 -\032\123\167\151\163\163\123\151\147\156\040\120\154\141\164\151 -\156\165\155\040\103\101\040\055\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\111\061\013\060\011\006\003\125\004\006\023\002\103\110\061 -\025\060\023\006\003\125\004\012\023\014\123\167\151\163\163\123 -\151\147\156\040\101\107\061\043\060\041\006\003\125\004\003\023 -\032\123\167\151\163\163\123\151\147\156\040\120\154\141\164\151 -\156\165\155\040\103\101\040\055\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\116\262\000\147\014\003\135\117 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\301\060\202\003\251\240\003\002\001\002\002\010\116 -\262\000\147\014\003\135\117\060\015\006\011\052\206\110\206\367 -\015\001\001\005\005\000\060\111\061\013\060\011\006\003\125\004 -\006\023\002\103\110\061\025\060\023\006\003\125\004\012\023\014 -\123\167\151\163\163\123\151\147\156\040\101\107\061\043\060\041 -\006\003\125\004\003\023\032\123\167\151\163\163\123\151\147\156 -\040\120\154\141\164\151\156\165\155\040\103\101\040\055\040\107 -\062\060\036\027\015\060\066\061\060\062\065\060\070\063\066\060 -\060\132\027\015\063\066\061\060\062\065\060\070\063\066\060\060 -\132\060\111\061\013\060\011\006\003\125\004\006\023\002\103\110 -\061\025\060\023\006\003\125\004\012\023\014\123\167\151\163\163 -\123\151\147\156\040\101\107\061\043\060\041\006\003\125\004\003 -\023\032\123\167\151\163\163\123\151\147\156\040\120\154\141\164 -\151\156\165\155\040\103\101\040\055\040\107\062\060\202\002\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\002\017\000\060\202\002\012\002\202\002\001\000\312\337\242 -\002\342\332\370\374\007\026\261\336\140\252\336\226\134\144\037 -\307\057\176\317\147\372\104\102\326\166\143\225\256\353\257\162 -\040\212\105\107\206\142\170\206\326\040\071\046\364\256\243\375 -\043\347\245\234\265\042\041\031\267\067\223\042\300\120\234\202 -\173\324\325\004\104\134\313\264\302\237\222\276\044\330\173\147 -\042\342\151\137\345\005\170\324\207\331\161\160\063\045\123\264 -\207\073\051\220\050\066\232\125\104\060\150\244\203\227\177\015 -\036\234\166\377\025\235\140\227\000\215\212\205\003\354\200\276 -\352\054\156\020\121\222\314\176\325\243\063\330\326\111\336\130 -\052\257\366\026\353\113\173\220\062\227\271\272\235\130\361\370 -\127\111\004\036\242\135\006\160\335\161\333\371\335\213\232\033 -\214\317\075\243\115\316\313\174\366\273\234\240\372\011\316\043 -\142\262\351\015\037\342\162\050\217\237\254\150\040\175\157\073 -\250\205\061\011\177\013\307\350\145\351\343\170\016\011\147\060 -\213\064\202\373\135\340\314\235\201\155\142\356\010\036\004\054 -\116\233\354\376\251\117\137\375\151\170\357\011\037\241\264\277 -\372\363\357\220\036\114\005\213\036\352\172\221\172\303\327\345 -\373\060\274\154\033\020\130\230\367\032\137\320\051\062\003\023 -\106\115\141\152\205\114\122\164\057\006\037\173\021\342\204\227 -\306\231\363\155\177\327\147\203\176\023\150\330\161\050\132\330 -\316\335\350\020\024\232\376\155\043\207\156\216\132\160\074\325 -\215\011\000\247\252\274\260\061\067\155\310\204\024\036\133\275 -\105\143\040\153\113\164\214\275\333\072\016\301\317\132\026\217 -\245\230\362\166\211\262\023\022\073\013\167\167\254\273\345\074 -\051\112\222\162\312\141\032\053\136\114\342\203\164\167\372\065 -\110\172\205\115\215\232\123\304\337\170\312\227\221\110\053\105 -\053\001\367\034\032\242\355\030\272\012\275\203\372\157\274\215 -\127\223\073\324\324\246\316\036\361\240\261\316\253\375\053\050 -\232\117\033\327\303\162\333\244\304\277\135\114\365\335\173\226 -\151\356\150\200\346\347\230\272\066\267\376\156\355\053\275\040 -\370\145\031\332\125\011\176\045\334\376\141\142\162\371\176\030 -\002\357\143\264\320\373\257\345\073\143\214\147\217\002\003\001 -\000\001\243\201\254\060\201\251\060\016\006\003\125\035\017\001 -\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001 -\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016 -\004\026\004\024\120\257\314\007\207\025\107\157\070\305\264\145 -\321\336\225\252\351\337\234\314\060\037\006\003\125\035\043\004 -\030\060\026\200\024\120\257\314\007\207\025\107\157\070\305\264 -\145\321\336\225\252\351\337\234\314\060\106\006\003\125\035\040 -\004\077\060\075\060\073\006\011\140\205\164\001\131\001\001\001 -\001\060\056\060\054\006\010\053\006\001\005\005\007\002\001\026 -\040\150\164\164\160\072\057\057\162\145\160\157\163\151\164\157 -\162\171\056\163\167\151\163\163\163\151\147\156\056\143\157\155 -\057\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000 -\003\202\002\001\000\010\205\246\365\026\014\374\104\032\301\143 -\340\371\125\106\010\374\160\034\102\050\226\216\267\305\301\101 -\165\116\011\161\171\345\155\226\312\113\245\210\140\320\060\164 -\270\312\010\334\264\060\236\100\007\026\153\145\225\167\001\256 -\244\267\065\013\201\332\161\025\251\164\027\070\173\130\312\371 -\057\373\300\145\166\215\133\001\271\175\336\202\075\144\270\276 -\024\164\243\012\124\323\054\225\030\027\065\365\121\153\077\217 -\242\226\141\071\170\153\113\345\246\240\370\123\337\121\020\223 -\142\347\200\057\342\321\340\274\216\066\106\167\063\354\270\373 -\216\232\054\211\115\061\021\017\046\236\004\273\267\004\215\013 -\362\271\374\132\235\073\026\267\057\310\230\253\376\212\120\131 -\056\243\073\374\051\135\213\301\113\311\342\212\023\035\261\277 -\273\102\035\122\335\116\330\024\136\020\306\061\007\357\161\047 -\367\033\071\011\334\202\352\213\263\225\206\136\375\365\332\135 -\061\246\340\061\266\224\346\104\111\164\305\026\345\367\037\003 -\141\050\305\310\313\022\240\102\113\371\153\210\010\215\264\062 -\030\363\165\237\304\177\000\117\005\225\234\243\027\002\303\263 -\123\233\252\040\071\051\053\146\372\235\257\136\263\222\322\265 -\246\341\032\371\055\101\151\201\024\264\264\265\355\211\075\316 -\373\251\235\065\102\104\261\034\024\163\201\317\052\001\065\232 -\061\325\055\217\155\204\337\200\115\127\343\077\305\204\165\332 -\211\306\060\273\353\217\313\042\010\240\256\252\361\003\154\072 -\113\115\011\245\016\162\306\126\153\041\102\116\043\045\024\150 -\256\166\012\174\014\007\160\144\371\232\057\366\005\071\046\306 -\014\217\031\177\103\136\156\364\133\025\057\333\141\135\346\147 -\057\077\010\224\371\140\264\230\061\332\164\361\204\223\161\115 -\137\373\140\130\321\373\304\301\155\211\242\273\040\037\235\161 -\221\313\062\233\023\075\076\175\222\122\065\254\222\224\242\323 -\030\302\174\307\352\257\166\005\026\335\147\047\302\176\034\007 -\042\041\363\100\012\033\064\007\104\023\302\204\152\216\337\031 -\132\277\177\353\035\342\032\070\321\134\257\107\222\153\200\265 -\060\245\311\215\330\253\061\201\037\337\302\146\067\323\223\251 -\205\206\171\145\322 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "SwissSign Platinum G2 Root CA" -# Issuer: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH -# Serial Number:4e:b2:00:67:0c:03:5d:4f -# Subject: CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH -# Not Valid Before: Wed Oct 25 08:36:00 2006 -# Not Valid After : Sat Oct 25 08:36:00 2036 -# Fingerprint (SHA-256): 3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36 -# Fingerprint (SHA1): 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SwissSign Platinum G2 Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\126\340\372\300\073\217\030\043\125\030\345\323\021\312\350\302 -\103\061\253\146 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\311\230\047\167\050\036\075\016\025\074\204\000\270\205\003\346 -END -CKA_ISSUER MULTILINE_OCTAL -\060\111\061\013\060\011\006\003\125\004\006\023\002\103\110\061 -\025\060\023\006\003\125\004\012\023\014\123\167\151\163\163\123 -\151\147\156\040\101\107\061\043\060\041\006\003\125\004\003\023 -\032\123\167\151\163\163\123\151\147\156\040\120\154\141\164\151 -\156\165\155\040\103\101\040\055\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\116\262\000\147\014\003\135\117 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "SwissSign" +# Certificate "SwissSign" # # Issuer: CN=SwissSign Gold CA - G2,O=SwissSign AG,C=CH # Serial Number:00:bb:40:1c:43:f5:5e:4f:b0 @@ -18890,180 +15580,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "DIRECCION GENERAL DE LA POLICIA" -# -# Issuer: CN=AC RAIZ DNIE,OU=DNIE,O=DIRECCION GENERAL DE LA POLICIA,C=ES -# Serial Number:00:d2:85:70:fd:ae:a7:d6:5f:11:84:15:c6:31:b5:cb -# Subject: CN=AC RAIZ DNIE,OU=DNIE,O=DIRECCION GENERAL DE LA POLICIA,C=ES -# Not Valid Before: Thu Feb 16 10:37:25 2006 -# Not Valid After : Fri Feb 08 22:59:59 2036 -# Fingerprint (SHA-256): 73:97:10:C5:24:5E:33:EC:8A:24:3A:1B:20:04:8F:C9:D5:F4:52:85:99:21:38:45:C1:64:D0:04:B8:B6:67:F9 -# Fingerprint (SHA1): B3:8F:EC:EC:0B:14:8A:A6:86:C3:D0:0F:01:EC:C8:84:8E:80:85:EB -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "DIRECCION GENERAL DE LA POLICIA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\135\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\050\060\046\006\003\125\004\012\014\037\104\111\122\105\103\103 -\111\117\116\040\107\105\116\105\122\101\114\040\104\105\040\114 -\101\040\120\117\114\111\103\111\101\061\015\060\013\006\003\125 -\004\013\014\004\104\116\111\105\061\025\060\023\006\003\125\004 -\003\014\014\101\103\040\122\101\111\132\040\104\116\111\105 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\135\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\050\060\046\006\003\125\004\012\014\037\104\111\122\105\103\103 -\111\117\116\040\107\105\116\105\122\101\114\040\104\105\040\114 -\101\040\120\117\114\111\103\111\101\061\015\060\013\006\003\125 -\004\013\014\004\104\116\111\105\061\025\060\023\006\003\125\004 -\003\014\014\101\103\040\122\101\111\132\040\104\116\111\105 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\000\322\205\160\375\256\247\326\137\021\204\025\306\061 -\265\313 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\277\060\202\003\247\240\003\002\001\002\002\020\000 -\322\205\160\375\256\247\326\137\021\204\025\306\061\265\313\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\135 -\061\013\060\011\006\003\125\004\006\023\002\105\123\061\050\060 -\046\006\003\125\004\012\014\037\104\111\122\105\103\103\111\117 -\116\040\107\105\116\105\122\101\114\040\104\105\040\114\101\040 -\120\117\114\111\103\111\101\061\015\060\013\006\003\125\004\013 -\014\004\104\116\111\105\061\025\060\023\006\003\125\004\003\014 -\014\101\103\040\122\101\111\132\040\104\116\111\105\060\036\027 -\015\060\066\060\062\061\066\061\060\063\067\062\065\132\027\015 -\063\066\060\062\060\070\062\062\065\071\065\071\132\060\135\061 -\013\060\011\006\003\125\004\006\023\002\105\123\061\050\060\046 -\006\003\125\004\012\014\037\104\111\122\105\103\103\111\117\116 -\040\107\105\116\105\122\101\114\040\104\105\040\114\101\040\120 -\117\114\111\103\111\101\061\015\060\013\006\003\125\004\013\014 -\004\104\116\111\105\061\025\060\023\006\003\125\004\003\014\014 -\101\103\040\122\101\111\132\040\104\116\111\105\060\202\002\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\002\017\000\060\202\002\012\002\202\002\001\000\200\000\255 -\014\303\243\040\007\243\143\377\367\064\240\315\356\152\124\010 -\027\135\261\001\025\247\346\271\137\212\161\377\014\302\035\352 -\067\363\336\223\177\326\005\115\204\262\325\327\034\014\364\304 -\221\160\100\016\132\310\230\244\200\350\015\063\300\007\363\267 -\365\254\241\070\172\300\146\124\044\374\122\314\060\052\362\303 -\304\241\054\166\277\301\300\277\202\361\233\360\150\172\023\100 -\310\227\274\034\045\007\010\012\267\226\357\314\051\124\340\346 -\145\055\352\262\056\261\011\151\022\116\060\325\330\370\274\000 -\200\057\115\223\017\315\056\127\033\063\273\237\060\116\304\245 -\313\171\247\373\342\064\030\266\040\236\033\237\135\247\311\072 -\255\105\144\263\030\316\021\022\234\155\036\125\105\050\204\234 -\127\147\115\371\313\342\213\217\130\011\324\071\377\310\066\322 -\070\342\014\145\177\025\016\175\301\007\335\251\042\337\221\000 -\304\154\161\064\164\334\071\352\352\117\104\151\177\130\333\130 -\012\122\161\053\354\251\035\120\164\063\371\051\152\372\376\231 -\364\347\314\105\105\155\312\132\045\242\022\343\316\327\070\005 -\071\360\032\011\365\166\131\316\142\157\172\064\015\054\321\274 -\004\022\354\075\123\310\372\320\002\313\316\075\041\265\305\340 -\071\063\145\317\071\123\311\233\106\371\235\063\363\131\200\010 -\101\276\157\113\240\372\112\316\244\166\034\205\342\257\257\024 -\235\145\254\367\177\227\344\063\111\246\257\276\316\053\067\361 -\056\301\163\005\234\234\140\114\235\060\015\227\124\236\201\142 -\273\347\340\057\367\024\007\024\251\167\221\351\334\221\225\216 -\323\210\220\063\107\157\161\303\024\151\372\246\055\001\036\033 -\352\323\056\342\177\013\334\317\347\042\360\361\101\243\001\222 -\345\200\323\276\251\142\250\125\210\013\064\064\354\334\041\025 -\252\357\326\042\136\211\365\121\222\023\052\157\200\026\331\261 -\015\331\056\370\020\270\302\376\122\105\063\234\035\070\174\334 -\025\151\064\163\277\240\054\273\021\173\224\315\370\067\055\157 -\075\357\203\132\306\036\233\164\111\217\331\302\215\276\026\166 -\120\310\132\321\045\026\366\366\314\214\234\132\060\236\145\276 -\320\232\110\223\327\372\150\015\165\061\207\371\367\002\003\001 -\000\001\243\173\060\171\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\016\006\003\125\035\017\001\001 -\377\004\004\003\002\001\006\060\035\006\003\125\035\016\004\026 -\004\024\216\105\364\237\163\305\377\057\033\005\333\001\107\140 -\033\003\212\201\267\272\060\067\006\003\125\035\040\004\060\060 -\056\060\054\006\004\125\035\040\000\060\044\060\042\006\010\053 -\006\001\005\005\007\002\001\026\026\150\164\164\160\072\057\057 -\167\167\167\056\144\156\151\145\056\145\163\057\144\160\143\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003\202 -\002\001\000\165\345\163\311\121\121\057\213\031\240\207\351\377 -\256\066\066\246\374\101\037\343\036\327\161\140\031\306\157\232 -\002\060\275\142\161\255\163\376\221\055\116\344\046\100\104\251 -\256\170\046\043\061\151\334\232\163\226\036\111\121\013\340\357 -\301\270\103\357\161\234\356\101\267\305\120\037\062\204\236\042 -\206\361\367\037\217\331\255\053\116\332\227\050\227\273\226\232 -\032\370\261\331\172\004\363\124\231\022\031\226\025\200\147\071 -\377\002\137\172\374\125\102\120\132\346\271\242\377\270\250\142 -\036\024\315\331\077\276\243\145\110\305\073\327\067\316\015\372 -\050\220\332\277\371\343\121\107\045\175\112\323\147\115\207\252 -\142\274\136\354\172\200\104\174\367\237\012\275\145\127\224\312 -\362\021\146\326\122\177\344\072\160\165\004\315\073\227\324\066 -\162\367\121\126\277\064\365\322\101\341\264\332\250\103\376\153 -\022\111\022\264\135\317\042\102\226\214\010\043\046\214\262\020 -\116\135\252\123\356\001\057\165\345\271\242\021\063\304\327\152 -\375\370\016\312\156\202\331\347\273\131\043\116\265\371\021\035 -\057\153\043\365\173\021\040\352\101\022\220\062\106\333\061\073 -\251\301\133\163\150\072\106\033\214\376\227\267\126\271\141\231 -\314\116\360\203\372\067\361\336\034\235\034\161\213\003\223\303 -\304\163\202\056\250\230\035\144\242\232\214\367\124\010\115\317 -\352\201\313\365\133\011\231\143\257\165\214\226\370\171\065\325 -\334\353\101\201\171\070\204\136\157\361\157\142\166\333\221\316 -\132\205\140\071\035\133\342\052\057\103\045\333\302\172\044\323 -\025\260\242\361\214\240\175\153\110\011\023\377\242\114\146\212 -\354\160\122\011\123\214\060\314\270\325\272\044\334\060\231\076 -\241\136\267\337\201\254\354\067\276\116\233\047\130\336\176\241 -\233\124\177\006\266\057\344\062\120\375\347\020\273\250\315\332 -\030\033\324\143\146\075\352\121\161\071\364\234\076\337\132\364 -\332\307\114\046\355\213\265\041\272\064\171\002\163\141\020\332 -\230\061\250\140\313\176\007\247\320\267\005\103\211\133\315\205 -\046\331\260\121\257\367\214\122\252\022\247\130\337\222\233\147 -\362\235\362\346\364\151\061\364\026\347\336\167\133\036\335\232 -\005\001\255 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "DIRECCION GENERAL DE LA POLICIA" -# Issuer: CN=AC RAIZ DNIE,OU=DNIE,O=DIRECCION GENERAL DE LA POLICIA,C=ES -# Serial Number:00:d2:85:70:fd:ae:a7:d6:5f:11:84:15:c6:31:b5:cb -# Subject: CN=AC RAIZ DNIE,OU=DNIE,O=DIRECCION GENERAL DE LA POLICIA,C=ES -# Not Valid Before: Thu Feb 16 10:37:25 2006 -# Not Valid After : Fri Feb 08 22:59:59 2036 -# Fingerprint (SHA-256): 73:97:10:C5:24:5E:33:EC:8A:24:3A:1B:20:04:8F:C9:D5:F4:52:85:99:21:38:45:C1:64:D0:04:B8:B6:67:F9 -# Fingerprint (SHA1): B3:8F:EC:EC:0B:14:8A:A6:86:C3:D0:0F:01:EC:C8:84:8E:80:85:EB -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "DIRECCION GENERAL DE LA POLICIA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\263\217\354\354\013\024\212\246\206\303\320\017\001\354\310\204 -\216\200\205\353 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\025\136\365\021\172\242\301\025\016\222\176\146\376\073\204\303 -END -CKA_ISSUER MULTILINE_OCTAL -\060\135\061\013\060\011\006\003\125\004\006\023\002\105\123\061 -\050\060\046\006\003\125\004\012\014\037\104\111\122\105\103\103 -\111\117\116\040\107\105\116\105\122\101\114\040\104\105\040\114 -\101\040\120\117\114\111\103\111\101\061\015\060\013\006\003\125 -\004\013\014\004\104\116\111\105\061\025\060\023\006\003\125\004 -\003\014\014\101\103\040\122\101\111\132\040\104\116\111\105 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\000\322\205\160\375\256\247\326\137\021\204\025\306\061 -\265\313 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Agencia Catalana de Certificacio (NIF Q-0801176-I)" # @@ -19261,144 +15777,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "KISA RootCA 1" -# -# Issuer: CN=KISA RootCA 1,OU=Korea Certification Authority Central,O=KISA,C=KR -# Serial Number: 4 (0x4) -# Subject: CN=KISA RootCA 1,OU=Korea Certification Authority Central,O=KISA,C=KR -# Not Valid Before: Wed Aug 24 08:05:46 2005 -# Not Valid After : Sun Aug 24 08:05:46 2025 -# Fingerprint (SHA-256): 6F:DB:3F:76:C8:B8:01:A7:53:38:D8:A5:0A:7C:02:87:9F:61:98:B5:7E:59:4D:31:8D:38:32:90:0F:ED:CD:79 -# Fingerprint (SHA1): 02:72:68:29:3E:5F:5D:17:AA:A4:B3:C3:E6:36:1E:1F:92:57:5E:AA -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "KISA RootCA 1" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\144\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\015\060\013\006\003\125\004\012\014\004\113\111\123\101\061\056 -\060\054\006\003\125\004\013\014\045\113\157\162\145\141\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 -\150\157\162\151\164\171\040\103\145\156\164\162\141\154\061\026 -\060\024\006\003\125\004\003\014\015\113\111\123\101\040\122\157 -\157\164\103\101\040\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\144\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\015\060\013\006\003\125\004\012\014\004\113\111\123\101\061\056 -\060\054\006\003\125\004\013\014\045\113\157\162\145\141\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 -\150\157\162\151\164\171\040\103\145\156\164\162\141\154\061\026 -\060\024\006\003\125\004\003\014\015\113\111\123\101\040\122\157 -\157\164\103\101\040\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\004 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\163\060\202\002\133\240\003\002\001\002\002\001\004 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\144\061\013\060\011\006\003\125\004\006\023\002\113\122\061\015 -\060\013\006\003\125\004\012\014\004\113\111\123\101\061\056\060 -\054\006\003\125\004\013\014\045\113\157\162\145\141\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 -\157\162\151\164\171\040\103\145\156\164\162\141\154\061\026\060 -\024\006\003\125\004\003\014\015\113\111\123\101\040\122\157\157 -\164\103\101\040\061\060\036\027\015\060\065\060\070\062\064\060 -\070\060\065\064\066\132\027\015\062\065\060\070\062\064\060\070 -\060\065\064\066\132\060\144\061\013\060\011\006\003\125\004\006 -\023\002\113\122\061\015\060\013\006\003\125\004\012\014\004\113 -\111\123\101\061\056\060\054\006\003\125\004\013\014\045\113\157 -\162\145\141\040\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\040\103\145\156\164 -\162\141\154\061\026\060\024\006\003\125\004\003\014\015\113\111 -\123\101\040\122\157\157\164\103\101\040\061\060\202\001\040\060 -\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202 -\001\015\000\060\202\001\010\002\202\001\001\000\274\004\344\372 -\023\071\360\064\226\040\153\154\150\273\372\333\167\377\047\367 -\254\354\057\347\375\360\177\155\157\214\052\315\045\011\133\044 -\364\241\150\374\050\354\311\045\342\254\355\336\310\063\204\365 -\260\245\011\072\247\261\107\110\305\314\117\214\171\234\371\006 -\127\175\335\356\070\366\317\024\262\234\352\323\300\135\167\142 -\360\107\015\271\032\100\123\134\144\160\257\010\132\300\367\317 -\165\371\154\215\144\050\036\040\376\267\033\031\323\132\146\203 -\162\342\260\233\275\323\045\025\015\062\157\144\067\224\205\106 -\310\162\276\167\325\156\037\050\057\307\151\355\347\203\211\063 -\130\323\336\240\277\100\350\103\120\356\334\115\153\274\245\352 -\246\310\141\216\365\303\144\257\006\025\334\051\213\077\165\214 -\274\161\104\333\374\255\265\027\035\155\211\203\317\306\063\275 -\277\105\242\376\012\237\243\021\137\017\271\037\234\032\302\106 -\314\234\050\146\237\160\046\074\056\337\252\200\376\214\305\004 -\011\045\117\315\223\107\074\067\352\002\147\222\376\374\042\044 -\134\254\322\054\340\134\001\063\212\301\031\333\002\001\003\243 -\062\060\060\060\035\006\003\125\035\016\004\026\004\024\277\266 -\047\330\003\132\166\145\114\141\001\101\126\061\345\213\173\072 -\331\314\060\017\006\003\125\035\023\001\001\377\004\005\060\003 -\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\005 -\005\000\003\202\001\001\000\023\257\121\013\336\212\152\133\346 -\232\012\310\261\220\112\116\241\002\235\314\210\322\253\146\275 -\075\354\273\261\102\225\152\262\134\132\377\241\143\144\226\251 -\150\025\177\045\136\212\370\244\163\301\200\212\205\012\016\122 -\350\062\347\105\370\116\145\200\221\231\164\103\345\105\235\111 -\052\360\224\225\335\351\341\060\322\023\156\311\116\261\167\345 -\004\317\255\132\036\224\011\132\327\074\010\034\256\172\351\024 -\062\301\105\255\322\046\110\162\254\250\101\332\360\041\207\071 -\136\337\374\144\377\141\164\052\234\331\233\213\137\302\067\223 -\330\243\067\057\073\223\153\262\033\007\247\177\011\120\357\323 -\072\276\041\153\212\220\073\047\112\121\116\153\236\234\207\235 -\370\170\220\061\355\021\047\306\250\131\276\374\030\013\373\216 -\176\056\102\341\355\347\011\041\275\271\023\305\126\147\364\046 -\246\102\103\220\104\124\264\161\233\166\344\032\022\254\032\050 -\000\337\233\301\325\370\333\134\243\370\222\261\275\264\324\371 -\120\331\000\002\117\333\203\320\021\117\244\102\126\141\072\176 -\023\062\323\204\037\311\272 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "KISA RootCA 1" -# Issuer: CN=KISA RootCA 1,OU=Korea Certification Authority Central,O=KISA,C=KR -# Serial Number: 4 (0x4) -# Subject: CN=KISA RootCA 1,OU=Korea Certification Authority Central,O=KISA,C=KR -# Not Valid Before: Wed Aug 24 08:05:46 2005 -# Not Valid After : Sun Aug 24 08:05:46 2025 -# Fingerprint (SHA-256): 6F:DB:3F:76:C8:B8:01:A7:53:38:D8:A5:0A:7C:02:87:9F:61:98:B5:7E:59:4D:31:8D:38:32:90:0F:ED:CD:79 -# Fingerprint (SHA1): 02:72:68:29:3E:5F:5D:17:AA:A4:B3:C3:E6:36:1E:1F:92:57:5E:AA -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "KISA RootCA 1" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\002\162\150\051\076\137\135\027\252\244\263\303\346\066\036\037 -\222\127\136\252 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\150\233\027\306\124\340\340\340\231\125\026\102\367\132\206\330 -END -CKA_ISSUER MULTILINE_OCTAL -\060\144\061\013\060\011\006\003\125\004\006\023\002\113\122\061 -\015\060\013\006\003\125\004\012\014\004\113\111\123\101\061\056 -\060\054\006\003\125\004\013\014\045\113\157\162\145\141\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 -\150\157\162\151\164\171\040\103\145\156\164\162\141\154\061\026 -\060\024\006\003\125\004\003\014\015\113\111\123\101\040\122\157 -\157\164\103\101\040\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\004 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Go Daddy Class 2 Certification Authority" # @@ -19756,527 +16134,95 @@ CKA_VALUE MULTILINE_OCTAL \167\056\170\162\141\155\160\163\145\143\165\162\151\164\171\056 \143\157\155\061\044\060\042\006\003\125\004\012\023\033\130\122 \141\155\160\040\123\145\143\165\162\151\164\171\040\123\145\162 -\166\151\143\145\163\040\111\156\143\061\055\060\053\006\003\125 -\004\003\023\044\130\122\141\155\160\040\107\154\157\142\141\154 -\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101 -\165\164\150\157\162\151\164\171\060\202\001\042\060\015\006\011 -\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017\000 -\060\202\001\012\002\202\001\001\000\230\044\036\275\025\264\272 -\337\307\214\245\047\266\070\013\151\363\266\116\250\054\056\041 -\035\134\104\337\041\135\176\043\164\376\136\176\264\112\267\246 -\255\037\256\340\006\026\342\233\133\331\147\164\153\135\200\217 -\051\235\206\033\331\234\015\230\155\166\020\050\130\344\145\260 -\177\112\230\171\237\340\303\061\176\200\053\265\214\300\100\073 -\021\206\320\313\242\206\066\140\244\325\060\202\155\331\156\320 -\017\022\004\063\227\137\117\141\132\360\344\371\221\253\347\035 -\073\274\350\317\364\153\055\064\174\342\110\141\034\216\363\141 -\104\314\157\240\112\251\224\260\115\332\347\251\064\172\162\070 -\250\101\314\074\224\021\175\353\310\246\214\267\206\313\312\063 -\073\331\075\067\213\373\172\076\206\054\347\163\327\012\127\254 -\144\233\031\353\364\017\004\010\212\254\003\027\031\144\364\132 -\045\042\215\064\054\262\366\150\035\022\155\323\212\036\024\332 -\304\217\246\342\043\205\325\172\015\275\152\340\351\354\354\027 -\273\102\033\147\252\045\355\105\203\041\374\301\311\174\325\142 -\076\372\362\305\055\323\375\324\145\002\003\001\000\001\243\201 -\237\060\201\234\060\023\006\011\053\006\001\004\001\202\067\024 -\002\004\006\036\004\000\103\000\101\060\013\006\003\125\035\017 -\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 -\004\024\306\117\242\075\006\143\204\011\234\316\142\344\004\254 -\215\134\265\351\266\033\060\066\006\003\125\035\037\004\057\060 -\055\060\053\240\051\240\047\206\045\150\164\164\160\072\057\057 -\143\162\154\056\170\162\141\155\160\163\145\143\165\162\151\164 -\171\056\143\157\155\057\130\107\103\101\056\143\162\154\060\020 -\006\011\053\006\001\004\001\202\067\025\001\004\003\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003 -\202\001\001\000\221\025\071\003\001\033\147\373\112\034\371\012 -\140\133\241\332\115\227\142\371\044\123\047\327\202\144\116\220 -\056\303\111\033\053\232\334\374\250\170\147\065\361\035\360\021 -\275\267\110\343\020\366\015\337\077\322\311\266\252\125\244\110 -\272\002\333\336\131\056\025\133\073\235\026\175\107\327\067\352 -\137\115\166\022\066\273\037\327\241\201\004\106\040\243\054\155 -\251\236\001\176\077\051\316\000\223\337\375\311\222\163\211\211 -\144\236\347\053\344\034\221\054\322\271\316\175\316\157\061\231 -\323\346\276\322\036\220\360\011\024\171\134\043\253\115\322\332 -\041\037\115\231\171\235\341\317\047\237\020\233\034\210\015\260 -\212\144\101\061\270\016\154\220\044\244\233\134\161\217\272\273 -\176\034\033\333\152\200\017\041\274\351\333\246\267\100\364\262 -\213\251\261\344\357\232\032\320\075\151\231\356\250\050\243\341 -\074\263\360\262\021\234\317\174\100\346\335\347\103\175\242\330 -\072\265\251\215\362\064\231\304\324\020\341\006\375\011\204\020 -\073\356\304\114\364\354\047\174\102\302\164\174\202\212\011\311 -\264\003\045\274 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Trustwave" -# Issuer: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US -# Serial Number:50:94:6c:ec:18:ea:d5:9c:4d:d5:97:ef:75:8f:a0:ad -# Subject: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US -# Not Valid Before: Mon Nov 01 17:14:04 2004 -# Not Valid After : Mon Jan 01 05:37:19 2035 -# Fingerprint (SHA-256): CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2 -# Fingerprint (SHA1): B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustwave" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\270\001\206\321\353\234\206\245\101\004\317\060\124\363\114\122 -\267\345\130\306 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\241\013\104\263\312\020\330\000\156\235\017\330\017\222\012\321 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\202\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\036\060\034\006\003\125\004\013\023\025\167\167\167\056\170 -\162\141\155\160\163\145\143\165\162\151\164\171\056\143\157\155 -\061\044\060\042\006\003\125\004\012\023\033\130\122\141\155\160 -\040\123\145\143\165\162\151\164\171\040\123\145\162\166\151\143 -\145\163\040\111\156\143\061\055\060\053\006\003\125\004\003\023 -\044\130\122\141\155\160\040\107\154\157\142\141\154\040\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 -\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\120\224\154\354\030\352\325\234\115\325\227\357\165\217 -\240\255 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "SECOM Trust Systems CO LTD" -# -# Issuer: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP -# Serial Number: 0 (0x0) -# Subject: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP -# Not Valid Before: Tue Sep 30 04:20:49 2003 -# Not Valid After : Sat Sep 30 04:20:49 2023 -# Fingerprint (SHA-256): E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C -# Fingerprint (SHA1): 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SECOM Trust Systems CO LTD" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\120\061\013\060\011\006\003\125\004\006\023\002\112\120\061 -\030\060\026\006\003\125\004\012\023\017\123\105\103\117\115\040 -\124\162\165\163\164\056\156\145\164\061\047\060\045\006\003\125 -\004\013\023\036\123\145\143\165\162\151\164\171\040\103\157\155 -\155\165\156\151\143\141\164\151\157\156\040\122\157\157\164\103 -\101\061 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\120\061\013\060\011\006\003\125\004\006\023\002\112\120\061 -\030\060\026\006\003\125\004\012\023\017\123\105\103\117\115\040 -\124\162\165\163\164\056\156\145\164\061\047\060\045\006\003\125 -\004\013\023\036\123\145\143\165\162\151\164\171\040\103\157\155 -\155\165\156\151\143\141\164\151\157\156\040\122\157\157\164\103 -\101\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\132\060\202\002\102\240\003\002\001\002\002\001\000 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\120\061\013\060\011\006\003\125\004\006\023\002\112\120\061\030 -\060\026\006\003\125\004\012\023\017\123\105\103\117\115\040\124 -\162\165\163\164\056\156\145\164\061\047\060\045\006\003\125\004 -\013\023\036\123\145\143\165\162\151\164\171\040\103\157\155\155 -\165\156\151\143\141\164\151\157\156\040\122\157\157\164\103\101 -\061\060\036\027\015\060\063\060\071\063\060\060\064\062\060\064 -\071\132\027\015\062\063\060\071\063\060\060\064\062\060\064\071 -\132\060\120\061\013\060\011\006\003\125\004\006\023\002\112\120 -\061\030\060\026\006\003\125\004\012\023\017\123\105\103\117\115 -\040\124\162\165\163\164\056\156\145\164\061\047\060\045\006\003 -\125\004\013\023\036\123\145\143\165\162\151\164\171\040\103\157 -\155\155\165\156\151\143\141\164\151\157\156\040\122\157\157\164 -\103\101\061\060\202\001\042\060\015\006\011\052\206\110\206\367 -\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002 -\202\001\001\000\263\263\376\177\323\155\261\357\026\174\127\245 -\014\155\166\212\057\113\277\144\373\114\356\212\360\363\051\174 -\365\377\356\052\340\351\351\272\133\144\042\232\232\157\054\072 -\046\151\121\005\231\046\334\325\034\152\161\306\232\175\036\235 -\335\174\154\306\214\147\147\112\076\370\161\260\031\047\251\011 -\014\246\225\277\113\214\014\372\125\230\073\330\350\042\241\113 -\161\070\171\254\227\222\151\263\211\176\352\041\150\006\230\024 -\226\207\322\141\066\274\155\047\126\236\127\356\300\300\126\375 -\062\317\244\331\216\302\043\327\215\250\363\330\045\254\227\344 -\160\070\364\266\072\264\235\073\227\046\103\243\241\274\111\131 -\162\114\043\060\207\001\130\366\116\276\034\150\126\146\257\315 -\101\135\310\263\115\052\125\106\253\037\332\036\342\100\075\333 -\315\175\271\222\200\234\067\335\014\226\144\235\334\042\367\144 -\213\337\141\336\025\224\122\025\240\175\122\311\113\250\041\311 -\306\261\355\313\303\225\140\321\017\360\253\160\370\337\313\115 -\176\354\326\372\253\331\275\177\124\362\245\351\171\372\331\326 -\166\044\050\163\002\003\001\000\001\243\077\060\075\060\035\006 -\003\125\035\016\004\026\004\024\240\163\111\231\150\334\205\133 -\145\343\233\050\057\127\237\275\063\274\007\110\060\013\006\003 -\125\035\017\004\004\003\002\001\006\060\017\006\003\125\035\023 -\001\001\377\004\005\060\003\001\001\377\060\015\006\011\052\206 -\110\206\367\015\001\001\005\005\000\003\202\001\001\000\150\100 -\251\250\273\344\117\135\171\263\005\265\027\263\140\023\353\306 -\222\135\340\321\323\152\376\373\276\233\155\277\307\005\155\131 -\040\304\034\360\267\332\204\130\002\143\372\110\026\357\117\245 -\013\367\112\230\362\077\236\033\255\107\153\143\316\010\107\353 -\122\077\170\234\257\115\256\370\325\117\317\232\230\052\020\101 -\071\122\304\335\331\233\016\357\223\001\256\262\056\312\150\102 -\044\102\154\260\263\072\076\315\351\332\110\304\025\313\351\371 -\007\017\222\120\111\212\335\061\227\137\311\351\067\252\073\131 -\145\227\224\062\311\263\237\076\072\142\130\305\111\255\142\016 -\161\245\062\252\057\306\211\166\103\100\023\023\147\075\242\124 -\045\020\313\361\072\362\331\372\333\111\126\273\246\376\247\101 -\065\303\340\210\141\311\210\307\337\066\020\042\230\131\352\260 -\112\373\126\026\163\156\254\115\367\042\241\117\255\035\172\055 -\105\047\345\060\301\136\362\332\023\313\045\102\121\225\107\003 -\214\154\041\314\164\102\355\123\377\063\213\217\017\127\001\026 -\057\317\246\356\311\160\042\024\275\375\276\154\013\003 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "SECOM Trust Systems CO LTD" -# Issuer: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP -# Serial Number: 0 (0x0) -# Subject: OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP -# Not Valid Before: Tue Sep 30 04:20:49 2003 -# Not Valid After : Sat Sep 30 04:20:49 2023 -# Fingerprint (SHA-256): E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C -# Fingerprint (SHA1): 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "SECOM Trust Systems CO LTD" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\066\261\053\111\371\201\236\327\114\236\274\070\017\306\126\217 -\135\254\262\367 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\361\274\143\152\124\340\265\047\365\315\347\032\343\115\156\112 -END -CKA_ISSUER MULTILINE_OCTAL -\060\120\061\013\060\011\006\003\125\004\006\023\002\112\120\061 -\030\060\026\006\003\125\004\012\023\017\123\105\103\117\115\040 -\124\162\165\163\164\056\156\145\164\061\047\060\045\006\003\125 -\004\013\023\036\123\145\143\165\162\151\164\171\040\103\157\155 -\155\165\156\151\143\141\164\151\157\156\040\122\157\157\164\103 -\101\061 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "TW Government Root Certification Authority" -# -# Issuer: O=Government Root Certification Authority,C=TW -# Serial Number:1f:9d:59:5a:d7:2f:c2:06:44:a5:80:08:69:e3:5e:f6 -# Subject: O=Government Root Certification Authority,C=TW -# Not Valid Before: Thu Dec 05 13:23:33 2002 -# Not Valid After : Sun Dec 05 13:23:33 2032 -# Fingerprint (SHA-256): 76:00:29:5E:EF:E8:5B:9E:1F:D6:24:DB:76:06:2A:AA:AE:59:81:8A:54:D2:77:4C:D4:C0:B2:C0:11:31:E1:B3 -# Fingerprint (SHA1): F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TW Government Root Certification Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\037\235\131\132\327\057\302\006\104\245\200\010\151\343 -\136\366 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\162\060\202\003\132\240\003\002\001\002\002\020\037 -\235\131\132\327\057\302\006\104\245\200\010\151\343\136\366\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\077 -\061\013\060\011\006\003\125\004\006\023\002\124\127\061\060\060 -\056\006\003\125\004\012\014\047\107\157\166\145\162\156\155\145 -\156\164\040\122\157\157\164\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060 -\036\027\015\060\062\061\062\060\065\061\063\062\063\063\063\132 -\027\015\063\062\061\062\060\065\061\063\062\063\063\063\132\060 -\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061\060 -\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156\155 -\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146\151 -\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\232\045\270\354\314\242\165\250\173\367\316\133\131\212\311 -\321\206\022\010\124\354\234\362\347\106\366\210\363\174\351\245 -\337\114\107\066\244\033\001\034\177\036\127\212\215\303\305\321 -\041\343\332\044\077\110\053\373\237\056\241\224\347\054\034\223 -\321\277\033\001\207\123\231\316\247\365\012\041\166\167\377\251 -\267\306\163\224\117\106\367\020\111\067\372\250\131\111\135\152 -\201\007\126\362\212\371\006\320\367\160\042\115\264\267\101\271 -\062\270\261\360\261\303\234\077\160\375\123\335\201\252\330\143 -\170\366\330\123\156\241\254\152\204\044\162\124\206\306\322\262 -\312\034\016\171\201\326\265\160\142\010\001\056\116\117\016\325 -\021\257\251\257\345\232\277\334\314\207\155\046\344\311\127\242 -\373\226\371\314\341\077\123\214\154\114\176\233\123\010\013\154 -\027\373\147\310\302\255\261\315\200\264\227\334\166\001\026\025 -\351\152\327\244\341\170\107\316\206\325\373\061\363\372\061\276 -\064\252\050\373\160\114\035\111\307\257\054\235\155\146\246\266 -\215\144\176\265\040\152\235\073\201\266\217\100\000\147\113\211 -\206\270\314\145\376\025\123\351\004\301\326\137\035\104\327\012 -\057\047\232\106\175\241\015\165\255\124\206\025\334\111\073\361 -\226\316\017\233\240\354\243\172\135\276\325\052\165\102\345\173 -\336\245\266\252\257\050\254\254\220\254\070\267\325\150\065\046 -\172\334\367\073\363\375\105\233\321\273\103\170\156\157\361\102 -\124\152\230\360\015\255\227\351\122\136\351\325\152\162\336\152 -\367\033\140\024\364\245\344\266\161\147\252\037\352\342\115\301 -\102\100\376\147\106\027\070\057\107\077\161\234\256\345\041\312 -\141\055\155\007\250\204\174\055\356\121\045\361\143\220\236\375 -\341\127\210\153\357\212\043\155\261\346\275\077\255\321\075\226 -\013\205\215\315\153\047\273\267\005\233\354\273\221\251\012\007 -\022\002\227\116\040\220\360\377\015\036\342\101\073\323\100\072 -\347\215\135\332\146\344\002\260\007\122\230\134\016\216\063\234 -\302\246\225\373\125\031\156\114\216\256\113\017\275\301\070\115 -\136\217\204\035\146\315\305\140\226\264\122\132\005\211\216\225 -\172\230\301\221\074\225\043\262\016\364\171\264\311\174\301\112 -\041\002\003\001\000\001\243\152\060\150\060\035\006\003\125\035 -\016\004\026\004\024\314\314\357\314\051\140\244\073\261\222\266 -\074\372\062\142\217\254\045\025\073\060\014\006\003\125\035\023 -\004\005\060\003\001\001\377\060\071\006\004\147\052\007\000\004 -\061\060\057\060\055\002\001\000\060\011\006\005\053\016\003\002 -\032\005\000\060\007\006\005\147\052\003\000\000\004\024\003\233 -\360\042\023\377\225\050\066\323\334\236\300\062\373\061\072\212 -\121\145\060\015\006\011\052\206\110\206\367\015\001\001\005\005 -\000\003\202\002\001\000\100\200\112\372\046\311\316\136\060\335 -\117\206\164\166\130\365\256\263\203\063\170\244\172\164\027\031 -\116\351\122\265\271\340\012\164\142\252\150\312\170\240\114\232 -\216\054\043\056\325\152\022\044\277\324\150\323\212\320\330\234 -\237\264\037\014\336\070\176\127\070\374\215\342\117\136\014\237 -\253\073\322\377\165\227\313\244\343\147\010\377\345\300\026\265 -\110\001\175\351\371\012\377\033\345\152\151\277\170\041\250\302 -\247\043\251\206\253\166\126\350\016\014\366\023\335\052\146\212 -\144\111\075\032\030\207\220\004\237\102\122\267\117\313\376\107 -\101\166\065\357\377\000\166\066\105\062\233\306\106\205\135\342 -\044\260\036\343\110\226\230\127\107\224\125\172\017\101\261\104 -\044\363\301\376\032\153\277\210\375\301\246\332\223\140\136\201 -\112\231\040\234\110\146\031\265\000\171\124\017\270\054\057\113 -\274\251\135\133\140\177\214\207\245\340\122\143\052\276\330\073 -\205\100\025\376\036\266\145\077\305\113\332\176\265\172\065\051 -\243\056\172\230\140\042\243\364\175\047\116\055\352\264\164\074 -\351\017\244\063\017\020\021\274\023\001\326\345\016\323\277\265 -\022\242\341\105\043\300\314\010\156\141\267\211\253\203\343\044 -\036\346\135\007\347\037\040\076\317\147\310\347\254\060\155\047 -\113\150\156\113\052\134\002\010\064\333\370\166\344\147\243\046 -\234\077\242\062\302\112\305\201\030\061\020\126\252\204\357\055 -\012\377\270\037\167\322\277\245\130\240\142\344\327\113\221\165 -\215\211\200\230\176\155\313\123\116\136\257\366\262\227\205\227 -\271\332\125\006\271\044\356\327\306\070\036\143\033\022\073\225 -\341\130\254\362\337\204\325\137\231\057\015\125\133\346\070\333 -\056\077\162\351\110\205\313\273\051\023\217\036\070\125\271\363 -\262\304\060\231\043\116\135\362\110\241\022\014\334\022\220\011 -\220\124\221\003\074\107\345\325\311\145\340\267\113\175\354\107 -\323\263\013\076\255\236\320\164\000\016\353\275\121\255\300\336 -\054\300\303\152\376\357\334\013\247\372\106\337\140\333\234\246 -\131\120\165\043\151\163\223\262\371\374\002\323\107\346\161\316 -\020\002\356\047\214\204\377\254\105\015\023\134\203\062\340\045 -\245\206\054\174\364\022 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "TW Government Root Certification Authority" -# Issuer: O=Government Root Certification Authority,C=TW -# Serial Number:1f:9d:59:5a:d7:2f:c2:06:44:a5:80:08:69:e3:5e:f6 -# Subject: O=Government Root Certification Authority,C=TW -# Not Valid Before: Thu Dec 05 13:23:33 2002 -# Not Valid After : Sun Dec 05 13:23:33 2032 -# Fingerprint (SHA-256): 76:00:29:5E:EF:E8:5B:9E:1F:D6:24:DB:76:06:2A:AA:AE:59:81:8A:54:D2:77:4C:D4:C0:B2:C0:11:31:E1:B3 -# Fingerprint (SHA1): F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TW Government Root Certification Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\364\213\021\277\336\253\276\224\124\040\161\346\101\336\153\276 -\210\053\100\271 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\067\205\104\123\062\105\037\040\360\363\225\341\045\304\103\116 -END -CKA_ISSUER MULTILINE_OCTAL -\060\077\061\013\060\011\006\003\125\004\006\023\002\124\127\061 -\060\060\056\006\003\125\004\012\014\047\107\157\166\145\162\156 -\155\145\156\164\040\122\157\157\164\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\037\235\131\132\327\057\302\006\104\245\200\010\151\343 -\136\366 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "Trustis FPS Root CA" -# -# Issuer: OU=Trustis FPS Root CA,O=Trustis Limited,C=GB -# Serial Number:1b:1f:ad:b6:20:f9:24:d3:36:6b:f7:c7:f1:8c:a0:59 -# Subject: OU=Trustis FPS Root CA,O=Trustis Limited,C=GB -# Not Valid Before: Tue Dec 23 12:14:06 2003 -# Not Valid After : Sun Jan 21 11:36:54 2024 -# Fingerprint (SHA-256): C1:B4:82:99:AB:A5:20:8F:E9:63:0A:CE:55:CA:68:A0:3E:DA:5A:51:9C:88:02:A0:D3:A6:73:BE:8F:8E:55:7D -# Fingerprint (SHA1): 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustis FPS Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\107\102\061 -\030\060\026\006\003\125\004\012\023\017\124\162\165\163\164\151 -\163\040\114\151\155\151\164\145\144\061\034\060\032\006\003\125 -\004\013\023\023\124\162\165\163\164\151\163\040\106\120\123\040 -\122\157\157\164\040\103\101 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\107\102\061 -\030\060\026\006\003\125\004\012\023\017\124\162\165\163\164\151 -\163\040\114\151\155\151\164\145\144\061\034\060\032\006\003\125 -\004\013\023\023\124\162\165\163\164\151\163\040\106\120\123\040 -\122\157\157\164\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\033\037\255\266\040\371\044\323\066\153\367\307\361\214 -\240\131 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\147\060\202\002\117\240\003\002\001\002\002\020\033 -\037\255\266\040\371\044\323\066\153\367\307\361\214\240\131\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\105 -\061\013\060\011\006\003\125\004\006\023\002\107\102\061\030\060 -\026\006\003\125\004\012\023\017\124\162\165\163\164\151\163\040 -\114\151\155\151\164\145\144\061\034\060\032\006\003\125\004\013 -\023\023\124\162\165\163\164\151\163\040\106\120\123\040\122\157 -\157\164\040\103\101\060\036\027\015\060\063\061\062\062\063\061 -\062\061\064\060\066\132\027\015\062\064\060\061\062\061\061\061 -\063\066\065\064\132\060\105\061\013\060\011\006\003\125\004\006 -\023\002\107\102\061\030\060\026\006\003\125\004\012\023\017\124 -\162\165\163\164\151\163\040\114\151\155\151\164\145\144\061\034 -\060\032\006\003\125\004\013\023\023\124\162\165\163\164\151\163 -\040\106\120\123\040\122\157\157\164\040\103\101\060\202\001\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\001\017\000\060\202\001\012\002\202\001\001\000\305\120\173 -\236\073\065\320\337\304\214\315\216\233\355\243\300\066\231\364 -\102\352\247\076\200\203\017\246\247\131\207\311\220\105\103\176 -\000\352\206\171\052\003\275\075\067\231\211\146\267\345\212\126 -\206\223\234\150\113\150\004\214\223\223\002\076\060\322\067\072 -\042\141\211\034\205\116\175\217\325\257\173\065\366\176\050\107 -\211\061\334\016\171\144\037\231\322\133\272\376\177\140\277\255 -\353\347\074\070\051\152\057\345\221\013\125\377\354\157\130\325 -\055\311\336\114\146\161\217\014\327\004\332\007\346\036\030\343 -\275\051\002\250\372\034\341\133\271\203\250\101\110\274\032\161 -\215\347\142\345\055\262\353\337\174\317\333\253\132\312\061\361 -\114\042\363\005\023\367\202\371\163\171\014\276\327\113\034\300 -\321\025\074\223\101\144\321\346\276\043\027\042\000\211\136\037 -\153\245\254\156\247\113\214\355\243\162\346\257\143\115\057\205 -\322\024\065\232\056\116\214\352\062\230\050\206\241\221\011\101 -\072\264\341\343\362\372\360\311\012\242\101\335\251\343\003\307 -\210\025\073\034\324\032\224\327\237\144\131\022\155\002\003\001 -\000\001\243\123\060\121\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\037\006\003\125\035\043\004\030 -\060\026\200\024\272\372\161\045\171\213\127\101\045\041\206\013 -\161\353\262\144\016\213\041\147\060\035\006\003\125\035\016\004 -\026\004\024\272\372\161\045\171\213\127\101\045\041\206\013\161 -\353\262\144\016\213\041\147\060\015\006\011\052\206\110\206\367 -\015\001\001\005\005\000\003\202\001\001\000\176\130\377\375\065 -\031\175\234\030\117\236\260\053\274\216\214\024\377\054\240\332 -\107\133\303\357\201\055\257\005\352\164\110\133\363\076\116\007 -\307\155\305\263\223\317\042\065\134\266\077\165\047\137\011\226 -\315\240\376\276\100\014\134\022\125\370\223\202\312\051\351\136 -\077\126\127\213\070\066\367\105\032\114\050\315\236\101\270\355 -\126\114\204\244\100\310\270\260\245\053\151\160\004\152\303\370 -\324\022\062\371\016\303\261\334\062\204\104\054\157\313\106\017 -\352\146\101\017\117\361\130\245\246\015\015\017\141\336\245\236 -\135\175\145\241\074\027\347\250\125\116\357\240\307\355\306\104 -\177\124\365\243\340\217\360\174\125\042\217\051\266\201\243\341 -\155\116\054\033\200\147\354\255\040\237\014\142\141\325\227\377 -\103\355\055\301\332\135\051\052\205\077\254\145\356\206\017\005 -\215\220\137\337\356\237\364\277\356\035\373\230\344\177\220\053 -\204\170\020\016\154\111\123\357\025\133\145\106\112\135\257\272 -\373\072\162\035\315\366\045\210\036\227\314\041\234\051\001\015 -\145\353\127\331\363\127\226\273\110\315\201 +\166\151\143\145\163\040\111\156\143\061\055\060\053\006\003\125 +\004\003\023\044\130\122\141\155\160\040\107\154\157\142\141\154 +\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101 +\165\164\150\157\162\151\164\171\060\202\001\042\060\015\006\011 +\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017\000 +\060\202\001\012\002\202\001\001\000\230\044\036\275\025\264\272 +\337\307\214\245\047\266\070\013\151\363\266\116\250\054\056\041 +\035\134\104\337\041\135\176\043\164\376\136\176\264\112\267\246 +\255\037\256\340\006\026\342\233\133\331\147\164\153\135\200\217 +\051\235\206\033\331\234\015\230\155\166\020\050\130\344\145\260 +\177\112\230\171\237\340\303\061\176\200\053\265\214\300\100\073 +\021\206\320\313\242\206\066\140\244\325\060\202\155\331\156\320 +\017\022\004\063\227\137\117\141\132\360\344\371\221\253\347\035 +\073\274\350\317\364\153\055\064\174\342\110\141\034\216\363\141 +\104\314\157\240\112\251\224\260\115\332\347\251\064\172\162\070 +\250\101\314\074\224\021\175\353\310\246\214\267\206\313\312\063 +\073\331\075\067\213\373\172\076\206\054\347\163\327\012\127\254 +\144\233\031\353\364\017\004\010\212\254\003\027\031\144\364\132 +\045\042\215\064\054\262\366\150\035\022\155\323\212\036\024\332 +\304\217\246\342\043\205\325\172\015\275\152\340\351\354\354\027 +\273\102\033\147\252\045\355\105\203\041\374\301\311\174\325\142 +\076\372\362\305\055\323\375\324\145\002\003\001\000\001\243\201 +\237\060\201\234\060\023\006\011\053\006\001\004\001\202\067\024 +\002\004\006\036\004\000\103\000\101\060\013\006\003\125\035\017 +\004\004\003\002\001\206\060\017\006\003\125\035\023\001\001\377 +\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 +\004\024\306\117\242\075\006\143\204\011\234\316\142\344\004\254 +\215\134\265\351\266\033\060\066\006\003\125\035\037\004\057\060 +\055\060\053\240\051\240\047\206\045\150\164\164\160\072\057\057 +\143\162\154\056\170\162\141\155\160\163\145\143\165\162\151\164 +\171\056\143\157\155\057\130\107\103\101\056\143\162\154\060\020 +\006\011\053\006\001\004\001\202\067\025\001\004\003\002\001\001 +\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\003 +\202\001\001\000\221\025\071\003\001\033\147\373\112\034\371\012 +\140\133\241\332\115\227\142\371\044\123\047\327\202\144\116\220 +\056\303\111\033\053\232\334\374\250\170\147\065\361\035\360\021 +\275\267\110\343\020\366\015\337\077\322\311\266\252\125\244\110 +\272\002\333\336\131\056\025\133\073\235\026\175\107\327\067\352 +\137\115\166\022\066\273\037\327\241\201\004\106\040\243\054\155 +\251\236\001\176\077\051\316\000\223\337\375\311\222\163\211\211 +\144\236\347\053\344\034\221\054\322\271\316\175\316\157\061\231 +\323\346\276\322\036\220\360\011\024\171\134\043\253\115\322\332 +\041\037\115\231\171\235\341\317\047\237\020\233\034\210\015\260 +\212\144\101\061\270\016\154\220\044\244\233\134\161\217\272\273 +\176\034\033\333\152\200\017\041\274\351\333\246\267\100\364\262 +\213\251\261\344\357\232\032\320\075\151\231\356\250\050\243\341 +\074\263\360\262\021\234\317\174\100\346\335\347\103\175\242\330 +\072\265\251\215\362\064\231\304\324\020\341\006\375\011\204\020 +\073\356\304\114\364\354\047\174\102\302\164\174\202\212\011\311 +\264\003\045\274 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "Trustis FPS Root CA" -# Issuer: OU=Trustis FPS Root CA,O=Trustis Limited,C=GB -# Serial Number:1b:1f:ad:b6:20:f9:24:d3:36:6b:f7:c7:f1:8c:a0:59 -# Subject: OU=Trustis FPS Root CA,O=Trustis Limited,C=GB -# Not Valid Before: Tue Dec 23 12:14:06 2003 -# Not Valid After : Sun Jan 21 11:36:54 2024 -# Fingerprint (SHA-256): C1:B4:82:99:AB:A5:20:8F:E9:63:0A:CE:55:CA:68:A0:3E:DA:5A:51:9C:88:02:A0:D3:A6:73:BE:8F:8E:55:7D -# Fingerprint (SHA1): 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 +# Trust for "Trustwave" +# Issuer: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US +# Serial Number:50:94:6c:ec:18:ea:d5:9c:4d:d5:97:ef:75:8f:a0:ad +# Subject: CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US +# Not Valid Before: Mon Nov 01 17:14:04 2004 +# Not Valid After : Mon Jan 01 05:37:19 2035 +# Fingerprint (SHA-256): CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2 +# Fingerprint (SHA1): B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Trustis FPS Root CA" +CKA_LABEL UTF8 "Trustwave" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\073\300\070\013\063\303\366\246\014\206\025\042\223\331\337\365 -\113\201\300\004 +\270\001\206\321\353\234\206\245\101\004\317\060\124\363\114\122 +\267\345\130\306 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\060\311\347\036\153\346\024\353\145\262\026\151\040\061\147\115 +\241\013\104\263\312\020\330\000\156\235\017\330\017\222\012\321 END CKA_ISSUER MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\107\102\061 -\030\060\026\006\003\125\004\012\023\017\124\162\165\163\164\151 -\163\040\114\151\155\151\164\145\144\061\034\060\032\006\003\125 -\004\013\023\023\124\162\165\163\164\151\163\040\106\120\123\040 -\122\157\157\164\040\103\101 +\060\201\202\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\036\060\034\006\003\125\004\013\023\025\167\167\167\056\170 +\162\141\155\160\163\145\143\165\162\151\164\171\056\143\157\155 +\061\044\060\042\006\003\125\004\012\023\033\130\122\141\155\160 +\040\123\145\143\165\162\151\164\171\040\123\145\162\166\151\143 +\145\163\040\111\156\143\061\055\060\053\006\003\125\004\003\023 +\044\130\122\141\155\160\040\107\154\157\142\141\154\040\103\145 +\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 +\157\162\151\164\171 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\033\037\255\266\040\371\044\323\066\153\367\307\361\214 -\240\131 +\002\020\120\224\154\354\030\352\325\234\115\325\227\357\165\217 +\240\255 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -20449,168 +16395,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Chambersign Global Root" -# -# Issuer: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Serial Number: 0 (0x0) -# Subject: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Not Valid Before: Tue Sep 30 16:14:18 2003 -# Not Valid After : Wed Sep 30 16:14:18 2037 -# Fingerprint (SHA-256): EF:3C:B4:17:FC:8E:BF:6F:97:87:6C:9E:4E:CE:39:DE:1E:A5:FE:64:91:41:D1:02:8B:7D:11:C0:B2:29:8C:ED -# Fingerprint (SHA1): 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Chambersign Global Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\305\060\202\003\255\240\003\002\001\002\002\001\000 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061\047 -\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155\145 -\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101\070 -\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004\013 -\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060\036 -\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103\150 -\141\155\142\145\162\163\151\147\156\040\122\157\157\164\060\036 -\027\015\060\063\060\071\063\060\061\066\061\064\061\070\132\027 -\015\063\067\060\071\063\060\061\066\061\064\061\070\132\060\175 -\061\013\060\011\006\003\125\004\006\023\002\105\125\061\047\060 -\045\006\003\125\004\012\023\036\101\103\040\103\141\155\145\162 -\146\151\162\155\141\040\123\101\040\103\111\106\040\101\070\062 -\067\064\063\062\070\067\061\043\060\041\006\003\125\004\013\023 -\032\150\164\164\160\072\057\057\167\167\167\056\143\150\141\155 -\142\145\162\163\151\147\156\056\157\162\147\061\040\060\036\006 -\003\125\004\003\023\027\107\154\157\142\141\154\040\103\150\141 -\155\142\145\162\163\151\147\156\040\122\157\157\164\060\202\001 -\040\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\001\015\000\060\202\001\010\002\202\001\001\000\242\160 -\242\320\237\102\256\133\027\307\330\175\317\024\203\374\117\311 -\241\267\023\257\212\327\236\076\004\012\222\213\140\126\372\264 -\062\057\210\115\241\140\010\364\267\011\116\240\111\057\111\326 -\323\337\235\227\132\237\224\004\160\354\077\131\331\267\314\146 -\213\230\122\050\011\002\337\305\057\204\215\172\227\167\277\354 -\100\235\045\162\253\265\077\062\230\373\267\267\374\162\204\345 -\065\207\371\125\372\243\037\016\157\056\050\335\151\240\331\102 -\020\306\370\265\104\302\320\103\177\333\274\344\242\074\152\125 -\170\012\167\251\330\352\031\062\267\057\376\134\077\033\356\261 -\230\354\312\255\172\151\105\343\226\017\125\366\346\355\165\352 -\145\350\062\126\223\106\211\250\045\212\145\006\356\153\277\171 -\007\320\361\267\257\355\054\115\222\273\300\250\137\247\147\175 -\004\362\025\010\160\254\222\326\175\004\322\063\373\114\266\013 -\013\373\032\311\304\215\003\251\176\134\362\120\253\022\245\241 -\317\110\120\245\357\322\310\032\023\372\260\177\261\202\034\167 -\152\017\137\334\013\225\217\357\103\176\346\105\011\045\002\001 -\003\243\202\001\120\060\202\001\114\060\022\006\003\125\035\023 -\001\001\377\004\010\060\006\001\001\377\002\001\014\060\077\006 -\003\125\035\037\004\070\060\066\060\064\240\062\240\060\206\056 -\150\164\164\160\072\057\057\143\162\154\056\143\150\141\155\142 -\145\162\163\151\147\156\056\157\162\147\057\143\150\141\155\142 -\145\162\163\151\147\156\162\157\157\164\056\143\162\154\060\035 -\006\003\125\035\016\004\026\004\024\103\234\066\237\260\236\060 -\115\306\316\137\255\020\253\345\003\245\372\251\024\060\016\006 -\003\125\035\017\001\001\377\004\004\003\002\001\006\060\021\006 -\011\140\206\110\001\206\370\102\001\001\004\004\003\002\000\007 -\060\052\006\003\125\035\021\004\043\060\041\201\037\143\150\141 -\155\142\145\162\163\151\147\156\162\157\157\164\100\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\060\052\006\003 -\125\035\022\004\043\060\041\201\037\143\150\141\155\142\145\162 -\163\151\147\156\162\157\157\164\100\143\150\141\155\142\145\162 -\163\151\147\156\056\157\162\147\060\133\006\003\125\035\040\004 -\124\060\122\060\120\006\013\053\006\001\004\001\201\207\056\012 -\001\001\060\101\060\077\006\010\053\006\001\005\005\007\002\001 -\026\063\150\164\164\160\072\057\057\143\160\163\056\143\150\141 -\155\142\145\162\163\151\147\156\056\157\162\147\057\143\160\163 -\057\143\150\141\155\142\145\162\163\151\147\156\162\157\157\164 -\056\150\164\155\154\060\015\006\011\052\206\110\206\367\015\001 -\001\005\005\000\003\202\001\001\000\074\073\160\221\371\004\124 -\047\221\341\355\355\376\150\177\141\135\345\101\145\117\062\361 -\030\005\224\152\034\336\037\160\333\076\173\062\002\064\265\014 -\154\241\212\174\245\364\217\377\324\330\255\027\325\055\004\321 -\077\130\200\342\201\131\210\276\300\343\106\223\044\376\220\275 -\046\242\060\055\350\227\046\127\065\211\164\226\030\366\025\342 -\257\044\031\126\002\002\262\272\017\024\352\306\212\146\301\206 -\105\125\213\276\222\276\234\244\004\307\111\074\236\350\051\172 -\211\327\376\257\377\150\365\245\027\220\275\254\231\314\245\206 -\127\011\147\106\333\326\026\302\106\361\344\251\120\365\217\321 -\222\025\323\137\076\306\000\111\072\156\130\262\321\321\047\015 -\045\310\062\370\040\021\315\175\062\063\110\224\124\114\335\334 -\171\304\060\237\353\216\270\125\265\327\210\134\305\152\044\075 -\262\323\005\003\121\306\007\357\314\024\162\164\075\156\162\316 -\030\050\214\112\240\167\345\011\053\105\104\107\254\267\147\177 -\001\212\005\132\223\276\241\301\377\370\347\016\147\244\107\111 -\166\135\165\220\032\365\046\217\360 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Chambersign Global Root" -# Issuer: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Serial Number: 0 (0x0) -# Subject: CN=Global Chambersign Root,OU=http://www.chambersign.org,O=AC Camerfirma SA CIF A82743287,C=EU -# Not Valid Before: Tue Sep 30 16:14:18 2003 -# Not Valid After : Wed Sep 30 16:14:18 2037 -# Fingerprint (SHA-256): EF:3C:B4:17:FC:8E:BF:6F:97:87:6C:9E:4E:CE:39:DE:1E:A5:FE:64:91:41:D1:02:8B:7D:11:C0:B2:29:8C:ED -# Fingerprint (SHA1): 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Chambersign Global Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\063\233\153\024\120\044\233\125\172\001\207\162\204\331\340\057 -\303\322\330\351 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\305\346\173\277\006\320\117\103\355\304\172\145\212\373\153\031 -END -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\105\125\061 -\047\060\045\006\003\125\004\012\023\036\101\103\040\103\141\155 -\145\162\146\151\162\155\141\040\123\101\040\103\111\106\040\101 -\070\062\067\064\063\062\070\067\061\043\060\041\006\003\125\004 -\013\023\032\150\164\164\160\072\057\057\167\167\167\056\143\150 -\141\155\142\145\162\163\151\147\156\056\157\162\147\061\040\060 -\036\006\003\125\004\003\023\027\107\154\157\142\141\154\040\103 -\150\141\155\142\145\162\163\151\147\156\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\000 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Sectigo (AAA)" # @@ -20764,169 +16548,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "GeoTrust Universal CA" -# -# Issuer: CN=GeoTrust Universal CA,O=GeoTrust Inc.,C=US -# Serial Number: 1 (0x1) -# Subject: CN=GeoTrust Universal CA,O=GeoTrust Inc.,C=US -# Not Valid Before: Thu Mar 04 05:00:00 2004 -# Not Valid After : Sun Mar 04 05:00:00 2029 -# Fingerprint (SHA-256): A0:45:9B:9F:63:B2:25:59:F5:FA:5D:4C:6D:B3:F9:F7:2F:F1:93:42:03:35:78:F0:73:BF:1D:1B:46:CB:B9:12 -# Fingerprint (SHA1): E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GeoTrust Universal CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\107\145\157\124\162\165 -\163\164\040\111\156\143\056\061\036\060\034\006\003\125\004\003 -\023\025\107\145\157\124\162\165\163\164\040\125\156\151\166\145 -\162\163\141\154\040\103\101 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\107\145\157\124\162\165 -\163\164\040\111\156\143\056\061\036\060\034\006\003\125\004\003 -\023\025\107\145\157\124\162\165\163\164\040\125\156\151\166\145 -\162\163\141\154\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\150\060\202\003\120\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\105\061\013\060\011\006\003\125\004\006\023\002\125\123\061\026 -\060\024\006\003\125\004\012\023\015\107\145\157\124\162\165\163 -\164\040\111\156\143\056\061\036\060\034\006\003\125\004\003\023 -\025\107\145\157\124\162\165\163\164\040\125\156\151\166\145\162 -\163\141\154\040\103\101\060\036\027\015\060\064\060\063\060\064 -\060\065\060\060\060\060\132\027\015\062\071\060\063\060\064\060 -\065\060\060\060\060\132\060\105\061\013\060\011\006\003\125\004 -\006\023\002\125\123\061\026\060\024\006\003\125\004\012\023\015 -\107\145\157\124\162\165\163\164\040\111\156\143\056\061\036\060 -\034\006\003\125\004\003\023\025\107\145\157\124\162\165\163\164 -\040\125\156\151\166\145\162\163\141\154\040\103\101\060\202\002 -\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\002\017\000\060\202\002\012\002\202\002\001\000\246\025 -\125\240\243\306\340\037\214\235\041\120\327\301\276\053\133\265 -\244\236\241\331\162\130\275\000\033\114\277\141\311\024\035\105 -\202\253\306\035\200\326\075\353\020\234\072\257\155\044\370\274 -\161\001\236\006\365\174\137\036\301\016\125\312\203\232\131\060 -\256\031\313\060\110\225\355\042\067\215\364\112\232\162\146\076 -\255\225\300\340\026\000\340\020\037\053\061\016\327\224\124\323 -\102\063\240\064\035\036\105\166\335\117\312\030\067\354\205\025 -\172\031\010\374\325\307\234\360\362\251\056\020\251\222\346\075 -\130\075\251\026\150\074\057\165\041\030\177\050\167\245\341\141 -\027\267\246\351\370\036\231\333\163\156\364\012\242\041\154\356 -\332\252\205\222\146\257\366\172\153\202\332\272\042\010\065\017 -\317\102\361\065\372\152\356\176\053\045\314\072\021\344\155\257 -\163\262\166\035\255\320\262\170\147\032\244\071\034\121\013\147 -\126\203\375\070\135\015\316\335\360\273\053\226\037\336\173\062 -\122\375\035\273\265\006\241\262\041\136\245\326\225\150\177\360 -\231\236\334\105\010\076\347\322\011\015\065\224\335\200\116\123 -\227\327\265\011\104\040\144\026\027\003\002\114\123\015\150\336 -\325\252\162\115\223\155\202\016\333\234\275\317\264\363\134\135 -\124\172\151\011\226\326\333\021\301\215\165\250\264\317\071\310 -\316\074\274\044\174\346\142\312\341\275\175\247\275\127\145\013 -\344\376\045\355\266\151\020\334\050\032\106\275\001\035\320\227 -\265\341\230\073\300\067\144\326\075\224\356\013\341\365\050\256 -\013\126\277\161\213\043\051\101\216\206\305\113\122\173\330\161 -\253\037\212\025\246\073\203\132\327\130\001\121\306\114\101\331 -\177\330\101\147\162\242\050\337\140\203\251\236\310\173\374\123 -\163\162\131\365\223\172\027\166\016\316\367\345\134\331\013\125 -\064\242\252\133\265\152\124\347\023\312\127\354\227\155\364\136 -\006\057\105\213\130\324\043\026\222\344\026\156\050\143\131\060 -\337\120\001\234\143\211\032\237\333\027\224\202\160\067\303\044 -\236\232\107\326\132\312\116\250\151\211\162\037\221\154\333\176 -\236\033\255\307\037\163\335\054\117\031\145\375\177\223\100\020 -\056\322\360\355\074\236\056\050\076\151\046\063\305\173\002\003 -\001\000\001\243\143\060\141\060\017\006\003\125\035\023\001\001 -\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004 -\026\004\024\332\273\056\252\260\014\270\210\046\121\164\134\155 -\003\323\300\330\217\172\326\060\037\006\003\125\035\043\004\030 -\060\026\200\024\332\273\056\252\260\014\270\210\046\121\164\134 -\155\003\323\300\330\217\172\326\060\016\006\003\125\035\017\001 -\001\377\004\004\003\002\001\206\060\015\006\011\052\206\110\206 -\367\015\001\001\005\005\000\003\202\002\001\000\061\170\346\307 -\265\337\270\224\100\311\161\304\250\065\354\106\035\302\205\363 -\050\130\206\260\013\374\216\262\071\217\104\125\253\144\204\134 -\151\251\320\232\070\074\372\345\037\065\345\104\343\200\171\224 -\150\244\273\304\237\075\341\064\315\060\106\213\124\053\225\245 -\357\367\077\231\204\375\065\346\317\061\306\334\152\277\247\327 -\043\010\341\230\136\303\132\010\166\251\246\257\167\057\267\140 -\275\104\106\152\357\227\377\163\225\301\216\350\223\373\375\061 -\267\354\127\021\021\105\233\060\361\032\210\071\301\117\074\247 -\000\325\307\374\253\155\200\042\160\245\014\340\135\004\051\002 -\373\313\240\221\321\174\326\303\176\120\325\235\130\276\101\070 -\353\271\165\074\025\331\233\311\112\203\131\300\332\123\375\063 -\273\066\030\233\205\017\025\335\356\055\254\166\223\271\331\001 -\215\110\020\250\373\365\070\206\361\333\012\306\275\204\243\043 -\101\336\326\167\157\205\324\205\034\120\340\256\121\212\272\215 -\076\166\342\271\312\047\362\137\237\357\156\131\015\006\330\053 -\027\244\322\174\153\273\137\024\032\110\217\032\114\347\263\107 -\034\216\114\105\053\040\356\110\337\347\335\011\216\030\250\332 -\100\215\222\046\021\123\141\163\135\353\275\347\304\115\051\067 -\141\353\254\071\055\147\056\026\326\365\000\203\205\241\314\177 -\166\304\175\344\267\113\146\357\003\105\140\151\266\014\122\226 -\222\204\136\246\243\265\244\076\053\331\314\330\033\107\252\362 -\104\332\117\371\003\350\360\024\313\077\363\203\336\320\301\124 -\343\267\350\012\067\115\213\040\131\003\060\031\241\054\310\275 -\021\037\337\256\311\112\305\363\047\146\146\206\254\150\221\377 -\331\346\123\034\017\213\134\151\145\012\046\310\036\064\303\135 -\121\173\327\251\234\006\241\066\335\325\211\224\274\331\344\055 -\014\136\011\154\010\227\174\243\075\174\223\377\077\241\024\247 -\317\265\135\353\333\333\034\304\166\337\210\271\275\105\005\225 -\033\256\374\106\152\114\257\110\343\316\256\017\322\176\353\346 -\154\234\117\201\152\172\144\254\273\076\325\347\313\166\056\305 -\247\110\301\134\220\017\313\310\077\372\346\062\341\215\033\157 -\244\346\216\330\371\051\110\212\316\163\376\054 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "GeoTrust Universal CA" -# Issuer: CN=GeoTrust Universal CA,O=GeoTrust Inc.,C=US -# Serial Number: 1 (0x1) -# Subject: CN=GeoTrust Universal CA,O=GeoTrust Inc.,C=US -# Not Valid Before: Thu Mar 04 05:00:00 2004 -# Not Valid After : Sun Mar 04 05:00:00 2029 -# Fingerprint (SHA-256): A0:45:9B:9F:63:B2:25:59:F5:FA:5D:4C:6D:B3:F9:F7:2F:F1:93:42:03:35:78:F0:73:BF:1D:1B:46:CB:B9:12 -# Fingerprint (SHA1): E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "GeoTrust Universal CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\346\041\363\065\103\171\005\232\113\150\060\235\212\057\164\042 -\025\207\354\171 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\222\145\130\213\242\032\061\162\163\150\134\264\245\172\007\110 -END -CKA_ISSUER MULTILINE_OCTAL -\060\105\061\013\060\011\006\003\125\004\006\023\002\125\123\061 -\026\060\024\006\003\125\004\012\023\015\107\145\157\124\162\165 -\163\164\040\111\156\143\056\061\036\060\034\006\003\125\004\003 -\023\025\107\145\157\124\162\165\163\164\040\125\156\151\166\145 -\162\163\141\154\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Certum" # @@ -22421,225 +18042,54 @@ CKA_VALUE MULTILINE_OCTAL \361\344\017\264\304\114\245\141\223\370\227\020\007\052\060\045 \251\271\310\161\270\357\150\314\055\176\365\340\176\017\202\250 \157\266\272\154\203\103\167\315\212\222\027\241\236\133\170\026 -\075\105\342\063\162\335\341\146\312\231\323\311\305\046\375\015 -\150\004\106\256\266\331\233\214\276\031\276\261\306\362\031\343 -\134\002\312\054\330\157\112\007\331\311\065\332\100\165\362\304 -\247\031\157\236\102\020\230\165\346\225\213\140\274\355\305\022 -\327\212\316\325\230\134\126\226\003\305\356\167\006\065\377\317 -\344\356\077\023\141\356\333\332\055\205\360\315\256\235\262\030 -\011\105\303\222\241\162\027\374\107\266\240\013\054\361\304\336 -\103\150\010\152\137\073\360\166\143\373\314\006\054\246\306\342 -\016\265\271\276\044\217 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Certum Trusted Network CA 2" -# Issuer: CN=Certum Trusted Network CA 2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL -# Serial Number:21:d6:d0:4a:4f:25:0f:c9:32:37:fc:aa:5e:12:8d:e9 -# Subject: CN=Certum Trusted Network CA 2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL -# Not Valid Before: Thu Oct 06 08:39:56 2011 -# Not Valid After : Sat Oct 06 08:39:56 2046 -# Fingerprint (SHA-256): B6:76:F2:ED:DA:E8:77:5C:D3:6C:B0:F6:3C:D1:D4:60:39:61:F4:9E:62:65:BA:01:3A:2F:03:07:B6:D0:B8:04 -# Fingerprint (SHA1): D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum Trusted Network CA 2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\323\335\110\076\053\277\114\005\350\257\020\365\372\166\046\317 -\323\334\060\222 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\155\106\236\331\045\155\010\043\133\136\164\175\036\047\333\362 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\200\061\013\060\011\006\003\125\004\006\023\002\120\114 -\061\042\060\040\006\003\125\004\012\023\031\125\156\151\172\145 -\164\157\040\124\145\143\150\156\157\154\157\147\151\145\163\040 -\123\056\101\056\061\047\060\045\006\003\125\004\013\023\036\103 -\145\162\164\165\155\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\061\044\060 -\042\006\003\125\004\003\023\033\103\145\162\164\165\155\040\124 -\162\165\163\164\145\144\040\116\145\164\167\157\162\153\040\103 -\101\040\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\041\326\320\112\117\045\017\311\062\067\374\252\136\022 -\215\351 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "LuxTrust Global Root 2" -# -# Issuer: CN=LuxTrust Global Root 2,O=LuxTrust S.A.,C=LU -# Serial Number:0a:7e:a6:df:4b:44:9e:da:6a:24:85:9e:e6:b8:15:d3:16:7f:bb:b1 -# Subject: CN=LuxTrust Global Root 2,O=LuxTrust S.A.,C=LU -# Not Valid Before: Thu Mar 05 13:21:57 2015 -# Not Valid After : Mon Mar 05 13:21:57 2035 -# Fingerprint (SHA-256): 54:45:5F:71:29:C2:0B:14:47:C4:18:F9:97:16:8F:24:C5:8F:C5:02:3B:F5:DA:5B:E2:EB:6E:1D:D8:90:2E:D5 -# Fingerprint (SHA1): 1E:0E:56:19:0A:D1:8B:25:98:B2:04:44:FF:66:8A:04:17:99:5F:3F -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "LuxTrust Global Root 2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\114\125\061 -\026\060\024\006\003\125\004\012\014\015\114\165\170\124\162\165 -\163\164\040\123\056\101\056\061\037\060\035\006\003\125\004\003 -\014\026\114\165\170\124\162\165\163\164\040\107\154\157\142\141 -\154\040\122\157\157\164\040\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\114\125\061 -\026\060\024\006\003\125\004\012\014\015\114\165\170\124\162\165 -\163\164\040\123\056\101\056\061\037\060\035\006\003\125\004\003 -\014\026\114\165\170\124\162\165\163\164\040\107\154\157\142\141 -\154\040\122\157\157\164\040\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\012\176\246\337\113\104\236\332\152\044\205\236\346\270 -\025\323\026\177\273\261 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\303\060\202\003\253\240\003\002\001\002\002\024\012 -\176\246\337\113\104\236\332\152\044\205\236\346\270\025\323\026 -\177\273\261\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\060\106\061\013\060\011\006\003\125\004\006\023\002\114 -\125\061\026\060\024\006\003\125\004\012\014\015\114\165\170\124 -\162\165\163\164\040\123\056\101\056\061\037\060\035\006\003\125 -\004\003\014\026\114\165\170\124\162\165\163\164\040\107\154\157 -\142\141\154\040\122\157\157\164\040\062\060\036\027\015\061\065 -\060\063\060\065\061\063\062\061\065\067\132\027\015\063\065\060 -\063\060\065\061\063\062\061\065\067\132\060\106\061\013\060\011 -\006\003\125\004\006\023\002\114\125\061\026\060\024\006\003\125 -\004\012\014\015\114\165\170\124\162\165\163\164\040\123\056\101 -\056\061\037\060\035\006\003\125\004\003\014\026\114\165\170\124 -\162\165\163\164\040\107\154\157\142\141\154\040\122\157\157\164 -\040\062\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\327\205\227\277\021\230\351\360\142\203\114\074\207 -\371\123\152\067\013\362\017\074\207\316\157\334\046\051\275\305 -\211\272\311\203\075\367\356\312\133\306\155\111\163\264\311\106 -\243\033\064\023\077\301\211\105\127\364\331\261\373\066\145\113 -\373\010\342\110\161\021\310\156\073\236\235\337\211\145\067\246 -\205\366\073\104\030\266\306\067\060\142\104\222\227\151\175\102 -\060\044\344\015\014\211\153\143\336\305\341\337\116\251\024\154 -\123\340\141\316\366\027\057\035\074\275\346\042\114\035\223\365 -\020\304\241\166\354\152\336\305\154\337\226\264\126\100\102\300 -\142\222\060\241\055\025\224\240\322\040\006\011\156\152\155\345 -\353\267\276\324\360\361\025\174\213\346\116\272\023\314\113\047 -\136\231\074\027\135\217\201\177\063\075\117\323\077\033\354\134 -\077\360\074\114\165\156\362\246\325\235\332\055\007\143\002\306 -\162\351\224\274\114\111\225\117\210\122\310\333\350\151\202\370 -\314\064\133\042\360\206\247\211\275\110\012\155\146\201\155\310 -\310\144\373\001\341\364\341\336\331\236\335\333\133\324\052\231 -\046\025\033\036\114\222\051\202\236\325\222\201\222\101\160\031 -\367\244\345\223\113\274\167\147\061\335\034\375\061\160\015\027 -\231\014\371\014\071\031\052\027\265\060\161\125\325\017\256\130 -\341\075\057\064\233\317\237\366\170\205\302\223\172\162\076\146 -\217\234\026\021\140\217\236\211\157\147\276\340\107\132\073\014 -\232\147\213\317\106\306\256\070\243\362\247\274\346\326\205\153 -\063\044\160\042\113\313\010\233\273\310\370\002\051\035\276\040 -\014\106\277\153\207\233\263\052\146\102\065\106\154\252\272\255 -\371\230\173\351\120\125\024\061\277\261\332\055\355\200\255\150 -\044\373\151\253\330\161\023\060\346\147\263\207\100\375\211\176 -\362\103\321\021\337\057\145\057\144\316\137\024\271\261\277\061 -\275\207\170\132\131\145\210\252\374\131\062\110\206\326\114\271 -\051\113\225\323\166\363\167\045\155\102\034\070\203\115\375\243 -\137\233\177\055\254\171\033\016\102\061\227\143\244\373\212\151 -\325\042\015\064\220\060\056\250\264\340\155\266\224\254\274\213 -\116\327\160\374\305\070\216\144\045\341\115\071\220\316\311\207 -\204\130\161\002\003\001\000\001\243\201\250\060\201\245\060\017 -\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\102\006\003\125\035\040\004\073\060\071\060\067\006\007\053\201 -\053\001\001\001\012\060\054\060\052\006\010\053\006\001\005\005 -\007\002\001\026\036\150\164\164\160\163\072\057\057\162\145\160 -\157\163\151\164\157\162\171\056\154\165\170\164\162\165\163\164 -\056\154\165\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\037\006\003\125\035\043\004\030\060\026\200\024 -\377\030\050\166\371\110\005\054\241\256\361\053\033\053\262\123 -\370\113\174\263\060\035\006\003\125\035\016\004\026\004\024\377 -\030\050\166\371\110\005\054\241\256\361\053\033\053\262\123\370 -\113\174\263\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\003\202\002\001\000\152\031\024\355\156\171\301\054\207 -\324\015\160\176\327\366\170\311\013\004\116\304\261\316\223\160 -\376\260\124\300\062\315\231\060\144\027\277\017\345\342\063\375 -\007\066\100\162\016\032\266\152\131\326\000\345\150\040\335\056 -\162\015\037\152\144\061\040\204\175\111\246\132\067\353\105\311 -\205\365\324\307\027\231\007\346\233\125\344\014\350\251\264\316 -\214\133\265\021\134\317\212\016\015\326\254\167\201\376\062\234 -\044\236\162\316\124\363\320\157\242\126\326\354\303\067\054\145 -\130\276\127\000\032\362\065\372\353\173\061\135\302\301\022\075 -\226\201\210\226\211\301\131\134\172\346\177\160\064\347\203\342 -\261\341\341\270\130\357\324\225\344\140\234\360\226\227\162\214 -\353\204\002\056\145\217\244\267\322\177\147\335\310\323\236\134 -\252\251\244\240\045\024\006\233\354\117\176\055\013\177\035\165 -\361\063\330\355\316\270\165\155\076\133\271\230\035\061\015\126 -\330\103\017\060\221\262\004\153\335\126\276\225\200\125\147\276 -\330\315\203\331\030\356\056\017\206\055\222\236\160\023\354\336 -\121\311\103\170\002\245\115\310\371\137\304\221\130\106\026\167 -\132\164\252\100\274\007\237\060\271\261\367\022\027\335\343\377 -\044\100\035\172\152\321\117\030\012\252\220\035\353\100\036\337 -\241\036\104\222\020\232\362\215\341\321\113\106\236\350\105\102 -\227\352\105\231\363\354\146\325\002\372\362\246\112\044\252\336 -\316\271\312\371\077\223\157\371\243\272\352\245\076\231\255\375 -\377\173\231\365\145\356\360\131\050\147\327\220\225\244\023\204 -\251\204\301\350\316\316\165\223\143\032\274\074\352\325\144\037 -\055\052\022\071\306\303\132\062\355\107\221\026\016\274\070\301 -\120\336\217\312\052\220\064\034\356\101\224\234\136\031\056\370 -\105\111\231\164\221\260\004\157\343\004\132\261\253\052\253\376 -\307\320\226\266\332\341\112\144\006\156\140\115\275\102\116\377 -\170\332\044\312\033\264\327\226\071\154\256\361\016\252\247\175 -\110\213\040\114\317\144\326\270\227\106\260\116\321\052\126\072 -\240\223\275\257\200\044\340\012\176\347\312\325\312\350\205\125 -\334\066\052\341\224\150\223\307\146\162\104\017\200\041\062\154 -\045\307\043\200\203\012\353 +\075\105\342\063\162\335\341\146\312\231\323\311\305\046\375\015 +\150\004\106\256\266\331\233\214\276\031\276\261\306\362\031\343 +\134\002\312\054\330\157\112\007\331\311\065\332\100\165\362\304 +\247\031\157\236\102\020\230\165\346\225\213\140\274\355\305\022 +\327\212\316\325\230\134\126\226\003\305\356\167\006\065\377\317 +\344\356\077\023\141\356\333\332\055\205\360\315\256\235\262\030 +\011\105\303\222\241\162\027\374\107\266\240\013\054\361\304\336 +\103\150\010\152\137\073\360\166\143\373\314\006\054\246\306\342 +\016\265\271\276\044\217 END CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE -# Trust for "LuxTrust Global Root 2" -# Issuer: CN=LuxTrust Global Root 2,O=LuxTrust S.A.,C=LU -# Serial Number:0a:7e:a6:df:4b:44:9e:da:6a:24:85:9e:e6:b8:15:d3:16:7f:bb:b1 -# Subject: CN=LuxTrust Global Root 2,O=LuxTrust S.A.,C=LU -# Not Valid Before: Thu Mar 05 13:21:57 2015 -# Not Valid After : Mon Mar 05 13:21:57 2035 -# Fingerprint (SHA-256): 54:45:5F:71:29:C2:0B:14:47:C4:18:F9:97:16:8F:24:C5:8F:C5:02:3B:F5:DA:5B:E2:EB:6E:1D:D8:90:2E:D5 -# Fingerprint (SHA1): 1E:0E:56:19:0A:D1:8B:25:98:B2:04:44:FF:66:8A:04:17:99:5F:3F +# Trust for "Certum Trusted Network CA 2" +# Issuer: CN=Certum Trusted Network CA 2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL +# Serial Number:21:d6:d0:4a:4f:25:0f:c9:32:37:fc:aa:5e:12:8d:e9 +# Subject: CN=Certum Trusted Network CA 2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL +# Not Valid Before: Thu Oct 06 08:39:56 2011 +# Not Valid After : Sat Oct 06 08:39:56 2046 +# Fingerprint (SHA-256): B6:76:F2:ED:DA:E8:77:5C:D3:6C:B0:F6:3C:D1:D4:60:39:61:F4:9E:62:65:BA:01:3A:2F:03:07:B6:D0:B8:04 +# Fingerprint (SHA1): D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92 CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST CKA_TOKEN CK_BBOOL CK_TRUE CKA_PRIVATE CK_BBOOL CK_FALSE CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "LuxTrust Global Root 2" +CKA_LABEL UTF8 "Certum Trusted Network CA 2" CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\036\016\126\031\012\321\213\045\230\262\004\104\377\146\212\004 -\027\231\137\077 +\323\335\110\076\053\277\114\005\350\257\020\365\372\166\046\317 +\323\334\060\222 END CKA_CERT_MD5_HASH MULTILINE_OCTAL -\262\341\011\000\141\257\367\361\221\157\304\255\215\136\073\174 +\155\106\236\331\045\155\010\043\133\136\164\175\036\047\333\362 END CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\114\125\061 -\026\060\024\006\003\125\004\012\014\015\114\165\170\124\162\165 -\163\164\040\123\056\101\056\061\037\060\035\006\003\125\004\003 -\014\026\114\165\170\124\162\165\163\164\040\107\154\157\142\141 -\154\040\122\157\157\164\040\062 +\060\201\200\061\013\060\011\006\003\125\004\006\023\002\120\114 +\061\042\060\040\006\003\125\004\012\023\031\125\156\151\172\145 +\164\157\040\124\145\143\150\156\157\154\157\147\151\145\163\040 +\123\056\101\056\061\047\060\045\006\003\125\004\013\023\036\103 +\145\162\164\165\155\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\061\044\060 +\042\006\003\125\004\003\023\033\103\145\162\164\165\155\040\124 +\162\165\163\164\145\144\040\116\145\164\167\157\162\153\040\103 +\101\040\062 END CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\024\012\176\246\337\113\104\236\332\152\044\205\236\346\270 -\025\323\026\177\273\261 +\002\020\041\326\320\112\117\045\017\311\062\067\374\252\136\022 +\215\351 END CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR @@ -23876,323 +19326,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Network Solutions RSA Certificate Authority" -# -# Issuer: CN=Network Solutions RSA Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Serial Number:4c:03:4b:ac:67:18:4c:7f:af:44:08:4d:82:96:c7:b2 -# Subject: CN=Network Solutions RSA Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Not Valid Before: Wed Nov 18 00:00:00 2015 -# Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (SHA-256): DD:BF:14:97:33:BC:2B:F8:A0:9D:7F:01:2B:01:A6:DE:A1:1D:7B:AE:26:71:37:83:EF:64:07:A2:49:5B:F1:89 -# Fingerprint (SHA1): 8E:92:8C:0F:C2:7B:B7:AB:A3:4E:6B:C0:CA:12:50:CB:57:B6:0F:84 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions RSA Certificate Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\122\123\101\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\122\123\101\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\114\003\113\254\147\030\114\177\257\104\010\115\202\226 -\307\262 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\342\060\202\003\312\240\003\002\001\002\002\020\114 -\003\113\254\147\030\114\177\257\104\010\115\202\226\307\262\060 -\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\201 -\212\061\013\060\011\006\003\125\004\006\023\002\125\123\061\013 -\060\011\006\003\125\004\010\023\002\106\114\061\025\060\023\006 -\003\125\004\007\023\014\112\141\143\153\163\157\156\166\151\154 -\154\145\061\041\060\037\006\003\125\004\012\023\030\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\114 -\056\114\056\103\056\061\064\060\062\006\003\125\004\003\023\053 -\116\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156 -\163\040\122\123\101\040\103\145\162\164\151\146\151\143\141\164 -\145\040\101\165\164\150\157\162\151\164\171\060\036\027\015\061 -\065\061\061\061\070\060\060\060\060\060\060\132\027\015\063\070 -\060\061\061\070\062\063\065\071\065\071\132\060\201\212\061\013 -\060\011\006\003\125\004\006\023\002\125\123\061\013\060\011\006 -\003\125\004\010\023\002\106\114\061\025\060\023\006\003\125\004 -\007\023\014\112\141\143\153\163\157\156\166\151\154\154\145\061 -\041\060\037\006\003\125\004\012\023\030\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\114\056\114\056 -\103\056\061\064\060\062\006\003\125\004\003\023\053\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\122 -\123\101\040\103\145\162\164\151\146\151\143\141\164\145\040\101 -\165\164\150\157\162\151\164\171\060\202\002\042\060\015\006\011 -\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000 -\060\202\002\012\002\202\002\001\000\204\337\250\246\243\214\013 -\170\036\310\115\031\225\335\051\220\222\040\065\220\052\224\215 -\202\063\055\160\022\130\245\010\212\236\301\010\363\223\326\150 -\300\057\024\276\171\244\374\175\314\325\274\076\217\355\234\112 -\002\141\131\075\252\303\157\164\000\322\370\032\064\324\124\236 -\152\164\107\232\057\340\322\367\017\367\303\335\077\245\277\301 -\372\175\102\151\140\000\200\354\074\346\273\201\067\244\036\006 -\024\075\127\217\220\244\065\112\064\163\207\266\032\303\135\220 -\357\006\115\160\166\066\074\202\211\355\317\144\031\203\045\103 -\116\034\342\361\152\122\206\376\121\344\176\070\337\025\215\114 -\154\140\101\112\117\260\100\125\106\071\165\311\201\071\000\163 -\212\142\352\017\145\267\217\117\227\100\316\317\356\301\152\050 -\240\161\251\231\047\321\075\311\065\163\172\200\231\370\175\206 -\271\235\171\072\355\323\052\372\176\246\270\377\127\052\163\262 -\246\277\332\211\272\006\033\332\145\240\346\276\140\224\210\366 -\337\146\341\047\152\033\376\320\136\251\215\040\213\012\304\037 -\176\210\101\057\262\301\320\363\266\150\355\310\073\361\357\252 -\007\336\176\327\042\340\201\366\245\352\173\026\364\102\124\235 -\226\176\366\142\026\123\315\375\012\253\262\102\241\116\052\210 -\102\165\203\275\214\345\115\172\347\035\343\114\270\336\343\253 -\140\070\055\147\051\376\344\137\256\302\250\350\277\256\154\371 -\353\263\122\361\177\351\354\302\057\331\235\312\027\236\102\372 -\073\130\301\076\210\142\117\137\223\301\227\155\146\217\034\042 -\363\232\301\364\355\271\153\032\176\066\204\310\061\270\360\136 -\053\176\225\344\171\317\165\114\302\330\004\277\070\216\050\263 -\335\133\266\330\117\043\156\222\350\067\225\256\203\256\326\374 -\071\052\106\006\037\361\204\165\041\326\270\116\246\052\227\130 -\145\365\232\030\001\327\365\303\177\051\311\020\356\163\112\103 -\166\173\321\246\060\121\377\326\053\035\036\142\204\276\371\276 -\151\227\231\307\015\347\174\044\120\165\027\375\244\040\347\065 -\150\003\140\224\247\331\015\306\032\054\345\342\116\325\314\016 -\300\172\060\126\357\140\222\276\331\056\365\307\360\350\105\317 -\332\206\256\357\330\167\251\022\047\002\003\001\000\001\243\102 -\060\100\060\035\006\003\125\035\016\004\026\004\024\017\361\112 -\112\165\164\005\021\014\035\330\133\231\353\277\376\252\175\136 -\327\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 -\206\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001 -\001\377\060\015\006\011\052\206\110\206\367\015\001\001\014\005 -\000\003\202\002\001\000\075\313\322\106\170\365\366\072\027\350 -\303\173\144\321\305\273\220\170\215\365\117\271\304\055\227\373 -\013\346\305\270\361\266\352\350\130\113\064\255\167\171\054\065 -\037\162\175\002\076\356\265\320\026\212\006\067\226\265\357\103 -\320\011\020\054\227\146\307\201\037\036\346\047\305\202\221\130 -\136\363\310\133\101\150\200\203\221\271\234\201\370\047\372\105 -\337\356\171\362\134\155\160\002\124\356\300\123\330\103\353\005 -\172\314\364\121\335\251\324\042\175\152\073\362\376\210\324\122 -\111\072\205\222\144\123\370\152\123\140\210\217\362\133\324\256 -\053\122\340\352\377\124\176\241\344\357\206\033\247\203\013\006 -\146\136\060\200\214\125\240\107\063\377\153\036\104\110\113\141 -\252\036\076\350\114\144\307\330\155\175\016\256\074\074\102\075 -\312\044\032\160\361\141\024\234\072\030\325\360\006\051\221\042 -\262\072\072\241\026\124\143\032\371\063\225\104\237\044\243\041 -\144\004\010\342\233\325\336\010\122\034\142\034\123\026\107\065 -\102\046\307\247\014\375\363\133\023\167\002\214\134\342\026\360 -\030\037\331\175\365\337\002\044\210\172\363\136\377\027\016\263 -\142\147\241\253\261\027\216\075\072\106\260\365\106\214\253\204 -\330\365\016\241\040\353\302\360\231\164\075\216\263\003\330\044 -\305\154\353\153\014\123\277\140\151\335\214\050\305\157\317\273 -\322\201\167\053\306\174\261\304\112\154\025\020\067\051\135\256 -\370\261\021\005\304\024\215\354\023\243\104\375\115\213\150\270 -\301\377\235\325\067\056\110\370\050\174\334\371\163\123\331\266 -\001\165\102\172\277\013\337\121\120\270\123\262\341\356\164\220 -\313\274\252\320\161\203\242\253\116\311\020\266\075\034\357\100 -\327\117\103\220\063\271\001\226\124\135\052\325\006\133\222\206 -\270\006\020\201\006\310\221\333\051\040\262\123\275\363\113\133 -\114\333\151\037\211\156\124\077\327\211\135\347\265\315\014\276 -\077\175\170\070\001\322\266\147\246\317\130\110\224\032\105\375 -\220\163\111\312\265\103\240\041\142\215\111\004\046\252\370\037 -\056\077\362\056\241\362\253\364\006\036\260\055\304\301\160\102 -\075\375\303\121\111\210\000\016\312\202\015\233\171\002\342\300 -\056\223\337\344\362\361 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Network Solutions RSA Certificate Authority" -# Issuer: CN=Network Solutions RSA Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Serial Number:4c:03:4b:ac:67:18:4c:7f:af:44:08:4d:82:96:c7:b2 -# Subject: CN=Network Solutions RSA Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Not Valid Before: Wed Nov 18 00:00:00 2015 -# Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (SHA-256): DD:BF:14:97:33:BC:2B:F8:A0:9D:7F:01:2B:01:A6:DE:A1:1D:7B:AE:26:71:37:83:EF:64:07:A2:49:5B:F1:89 -# Fingerprint (SHA1): 8E:92:8C:0F:C2:7B:B7:AB:A3:4E:6B:C0:CA:12:50:CB:57:B6:0F:84 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions RSA Certificate Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\216\222\214\017\302\173\267\253\243\116\153\300\312\022\120\313 -\127\266\017\204 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\132\057\130\274\203\054\055\231\264\233\170\044\324\217\371\147 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\122\123\101\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\114\003\113\254\147\030\114\177\257\104\010\115\202\226 -\307\262 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - -# -# Certificate "Network Solutions ECC Certificate Authority" -# -# Issuer: CN=Network Solutions ECC Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Serial Number:79:38:4b:b4:19:1a:8d:74:22:cc:ff:85:32:f2:e4:ba -# Subject: CN=Network Solutions ECC Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Not Valid Before: Wed Nov 18 00:00:00 2015 -# Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (SHA-256): 21:93:CF:EA:38:12:11:A1:AE:AA:2D:E9:84:E6:30:64:3A:87:16:0B:12:08:11:81:45:EA:FB:8E:1B:C6:99:58 -# Fingerprint (SHA1): 80:F9:5B:74:1C:38:39:94:95:C3:4F:20:C2:3E:73:36:31:4D:3C:6B -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions ECC Certificate Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\105\103\103\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\105\103\103\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\171\070\113\264\031\032\215\164\042\314\377\205\062\362 -\344\272 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\224\060\202\002\031\240\003\002\001\002\002\020\171 -\070\113\264\031\032\215\164\042\314\377\205\062\362\344\272\060 -\012\006\010\052\206\110\316\075\004\003\003\060\201\212\061\013 -\060\011\006\003\125\004\006\023\002\125\123\061\013\060\011\006 -\003\125\004\010\023\002\106\114\061\025\060\023\006\003\125\004 -\007\023\014\112\141\143\153\163\157\156\166\151\154\154\145\061 -\041\060\037\006\003\125\004\012\023\030\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\114\056\114\056 -\103\056\061\064\060\062\006\003\125\004\003\023\053\116\145\164 -\167\157\162\153\040\123\157\154\165\164\151\157\156\163\040\105 -\103\103\040\103\145\162\164\151\146\151\143\141\164\145\040\101 -\165\164\150\157\162\151\164\171\060\036\027\015\061\065\061\061 -\061\070\060\060\060\060\060\060\132\027\015\063\070\060\061\061 -\070\062\063\065\071\065\071\132\060\201\212\061\013\060\011\006 -\003\125\004\006\023\002\125\123\061\013\060\011\006\003\125\004 -\010\023\002\106\114\061\025\060\023\006\003\125\004\007\023\014 -\112\141\143\153\163\157\156\166\151\154\154\145\061\041\060\037 -\006\003\125\004\012\023\030\116\145\164\167\157\162\153\040\123 -\157\154\165\164\151\157\156\163\040\114\056\114\056\103\056\061 -\064\060\062\006\003\125\004\003\023\053\116\145\164\167\157\162 -\153\040\123\157\154\165\164\151\157\156\163\040\105\103\103\040 -\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150 -\157\162\151\164\171\060\166\060\020\006\007\052\206\110\316\075 -\002\001\006\005\053\201\004\000\042\003\142\000\004\024\341\003 -\013\145\157\255\131\326\036\356\311\277\264\114\305\306\134\057 -\060\307\237\122\333\150\141\300\151\020\342\222\172\032\303\277 -\222\250\211\071\212\373\347\240\273\161\244\240\303\337\167\326 -\224\067\023\137\176\123\135\120\272\343\114\010\307\145\342\101 -\260\346\131\362\234\370\300\262\167\301\012\221\046\167\362\151 -\266\273\320\101\074\052\210\032\224\221\026\306\076\243\102\060 -\100\060\035\006\003\125\035\016\004\026\004\024\233\173\353\310 -\377\203\362\122\230\107\060\012\126\370\070\276\343\353\000\316 -\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 -\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 -\377\060\012\006\010\052\206\110\316\075\004\003\003\003\151\000 -\060\146\002\061\000\251\144\130\367\234\271\023\146\042\111\177 -\262\321\002\351\023\374\034\373\244\064\222\344\312\007\015\267 -\261\122\170\050\064\313\362\041\126\221\206\206\310\212\013\257 -\062\204\124\145\211\002\061\000\354\171\015\235\211\360\014\030 -\352\173\127\122\255\013\346\324\171\133\313\233\342\006\105\165 -\030\275\320\374\247\335\307\341\307\042\266\343\101\044\135\043 -\346\250\237\000\152\120\062\045 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Network Solutions ECC Certificate Authority" -# Issuer: CN=Network Solutions ECC Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Serial Number:79:38:4b:b4:19:1a:8d:74:22:cc:ff:85:32:f2:e4:ba -# Subject: CN=Network Solutions ECC Certificate Authority,O=Network Solutions L.L.C.,L=Jacksonville,ST=FL,C=US -# Not Valid Before: Wed Nov 18 00:00:00 2015 -# Not Valid After : Mon Jan 18 23:59:59 2038 -# Fingerprint (SHA-256): 21:93:CF:EA:38:12:11:A1:AE:AA:2D:E9:84:E6:30:64:3A:87:16:0B:12:08:11:81:45:EA:FB:8E:1B:C6:99:58 -# Fingerprint (SHA1): 80:F9:5B:74:1C:38:39:94:95:C3:4F:20:C2:3E:73:36:31:4D:3C:6B -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Network Solutions ECC Certificate Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\200\371\133\164\034\070\071\224\225\303\117\040\302\076\163\066 -\061\115\074\153 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\245\250\314\343\034\101\021\214\152\214\070\275\242\107\376\262 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\212\061\013\060\011\006\003\125\004\006\023\002\125\123 -\061\013\060\011\006\003\125\004\010\023\002\106\114\061\025\060 -\023\006\003\125\004\007\023\014\112\141\143\153\163\157\156\166 -\151\154\154\145\061\041\060\037\006\003\125\004\012\023\030\116 -\145\164\167\157\162\153\040\123\157\154\165\164\151\157\156\163 -\040\114\056\114\056\103\056\061\064\060\062\006\003\125\004\003 -\023\053\116\145\164\167\157\162\153\040\123\157\154\165\164\151 -\157\156\163\040\105\103\103\040\103\145\162\164\151\146\151\143 -\141\164\145\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\171\070\113\264\031\032\215\164\042\314\377\205\062\362 -\344\272 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Australian Defence Public Root CA" # @@ -28237,181 +23370,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "RCSC RootCA" -# -# Issuer: CN=RCSC RootCA,O=VI Registru centras- i.k. 124110246,OU=RCSC,C=LT -# Serial Number:4f:00:1b:a1:24:bd:cb:88:48:be:bd:3f:2b:62:c7:c5 -# Subject: CN=RCSC RootCA,O=VI Registru centras- i.k. 124110246,OU=RCSC,C=LT -# Not Valid Before: Tue May 23 08:36:51 2017 -# Not Valid After : Mon May 23 08:36:51 2044 -# Fingerprint (SHA-256): 77:07:BB:2B:E9:F7:CE:05:70:60:B8:30:8C:3B:C0:87:B5:65:29:B3:63:8E:AF:5B:2A:80:49:C8:E1:5E:D7:20 -# Fingerprint (SHA1): FD:E7:C6:FD:B3:2B:B8:E6:39:39:84:0D:6A:E0:52:C3:D8:B7:3B:87 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "RCSC RootCA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\140\061\013\060\011\006\003\125\004\006\023\002\114\124\061 -\015\060\013\006\003\125\004\013\023\004\122\103\123\103\061\054 -\060\052\006\003\125\004\012\023\043\126\111\040\122\145\147\151 -\163\164\162\165\040\143\145\156\164\162\141\163\055\040\151\056 -\153\056\040\061\062\064\061\061\060\062\064\066\061\024\060\022 -\006\003\125\004\003\023\013\122\103\123\103\040\122\157\157\164 -\103\101 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\140\061\013\060\011\006\003\125\004\006\023\002\114\124\061 -\015\060\013\006\003\125\004\013\023\004\122\103\123\103\061\054 -\060\052\006\003\125\004\012\023\043\126\111\040\122\145\147\151 -\163\164\162\165\040\143\145\156\164\162\141\163\055\040\151\056 -\153\056\040\061\062\064\061\061\060\062\064\066\061\024\060\022 -\006\003\125\004\003\023\013\122\103\123\103\040\122\157\157\164 -\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\117\000\033\241\044\275\313\210\110\276\275\077\053\142 -\307\305 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\236\060\202\003\206\240\003\002\001\002\002\020\117 -\000\033\241\044\275\313\210\110\276\275\077\053\142\307\305\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\140 -\061\013\060\011\006\003\125\004\006\023\002\114\124\061\015\060 -\013\006\003\125\004\013\023\004\122\103\123\103\061\054\060\052 -\006\003\125\004\012\023\043\126\111\040\122\145\147\151\163\164 -\162\165\040\143\145\156\164\162\141\163\055\040\151\056\153\056 -\040\061\062\064\061\061\060\062\064\066\061\024\060\022\006\003 -\125\004\003\023\013\122\103\123\103\040\122\157\157\164\103\101 -\060\036\027\015\061\067\060\065\062\063\060\070\063\066\065\061 -\132\027\015\064\064\060\065\062\063\060\070\063\066\065\061\132 -\060\140\061\013\060\011\006\003\125\004\006\023\002\114\124\061 -\015\060\013\006\003\125\004\013\023\004\122\103\123\103\061\054 -\060\052\006\003\125\004\012\023\043\126\111\040\122\145\147\151 -\163\164\162\165\040\143\145\156\164\162\141\163\055\040\151\056 -\153\056\040\061\062\064\061\061\060\062\064\066\061\024\060\022 -\006\003\125\004\003\023\013\122\103\123\103\040\122\157\157\164 -\103\101\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\316\152\252\110\012\103\227\131\306\362\254\366\035 -\356\022\332\176\066\210\347\363\110\233\371\270\156\103\255\273 -\327\021\102\326\036\235\150\010\332\352\270\242\172\345\175\075 -\062\317\224\200\356\277\076\346\116\251\236\035\307\111\077\047 -\006\374\031\357\267\330\217\031\222\301\102\070\233\115\100\313 -\206\001\277\255\221\071\214\213\037\243\253\156\150\241\263\323 -\172\331\154\050\003\164\133\111\007\310\100\241\126\255\265\101 -\113\045\245\271\123\163\201\106\141\125\004\340\047\263\253\120 -\344\037\010\262\345\363\222\176\254\205\034\333\235\372\147\172 -\060\377\356\057\362\061\263\203\220\202\245\031\352\313\312\355 -\101\351\200\142\257\060\320\205\034\065\255\042\131\030\125\326 -\024\070\200\233\232\257\212\004\010\306\355\211\265\277\010\026 -\177\261\155\133\030\331\072\210\304\031\027\064\342\112\105\303 -\112\241\005\211\167\204\317\354\044\077\041\360\115\302\273\322 -\163\013\113\253\213\367\132\220\137\114\026\245\250\117\310\351 -\276\162\016\274\315\270\014\054\316\200\272\005\366\344\111\307 -\236\157\074\120\116\072\024\105\124\252\160\050\144\144\162\103 -\032\126\305\311\063\136\171\357\170\213\303\224\357\045\073\345 -\073\313\123\333\263\154\373\236\005\102\377\171\072\363\265\071 -\377\316\076\143\032\373\027\353\275\074\216\205\070\027\344\004 -\232\332\123\342\231\071\065\254\230\175\205\203\265\243\213\011 -\351\071\370\177\075\220\061\303\026\176\334\257\277\051\364\103 -\171\245\304\375\137\133\322\365\313\126\363\333\026\327\032\254 -\363\346\140\375\121\323\074\214\125\050\021\000\325\104\316\314 -\321\235\055\343\006\152\302\131\313\164\056\342\203\130\144\126 -\237\376\016\000\055\115\045\360\122\213\130\336\146\172\357\300 -\124\077\123\337\021\155\147\262\311\056\270\302\251\026\234\304 -\064\207\111\357\103\371\261\020\303\330\056\233\060\333\103\052 -\311\217\112\003\020\203\167\316\063\326\026\161\316\042\260\026 -\010\311\227\263\325\051\320\115\016\054\102\255\056\375\327\327 -\165\276\061\372\330\137\047\265\153\275\000\060\316\162\234\273 -\100\022\040\240\026\105\257\055\142\306\227\031\135\103\070\117 -\264\372\301\002\003\001\000\001\243\124\060\122\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\035\006 -\003\125\035\016\004\026\004\024\032\046\001\117\043\361\017\240 -\017\334\125\041\073\336\223\273\314\376\056\036\060\020\006\011 -\053\006\001\004\001\202\067\025\001\004\003\002\001\000\060\015 -\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202\002 -\001\000\250\030\347\215\305\011\147\017\133\215\147\327\374\022 -\221\165\057\222\106\107\123\147\136\265\316\137\261\177\017\042 -\167\214\240\053\116\070\355\272\244\154\330\272\130\147\300\373 -\271\225\040\164\010\141\066\044\176\045\251\356\111\047\112\341 -\321\233\025\112\212\311\053\202\204\056\260\157\233\342\260\320 -\301\226\327\064\065\226\334\124\137\215\251\203\102\161\011\050 -\121\265\051\275\241\073\262\272\175\161\317\302\037\210\340\032 -\124\215\343\021\104\062\247\220\360\003\303\370\276\162\266\133 -\340\264\274\277\153\066\223\216\241\001\254\131\121\111\310\236 -\054\210\223\102\160\327\035\347\212\305\303\110\050\151\305\345 -\305\041\333\310\357\153\142\024\075\057\154\123\367\261\025\062 -\074\200\024\103\026\340\271\071\026\335\214\020\333\071\155\200 -\262\377\176\227\317\114\231\133\152\031\030\260\347\111\304\177 -\132\006\357\211\370\210\001\070\265\351\326\040\227\073\176\306 -\024\225\005\262\330\373\147\052\370\357\352\043\021\247\355\352 -\007\352\275\150\217\263\203\054\213\163\272\366\033\341\152\056 -\164\312\071\051\246\041\365\127\170\170\133\046\077\361\320\066 -\272\360\066\136\276\277\322\262\247\117\135\361\324\112\215\167 -\127\300\030\160\307\246\026\047\270\354\202\332\243\350\144\365 -\234\205\106\221\240\240\265\026\373\216\145\034\115\366\201\333 -\162\232\103\314\231\032\172\227\322\153\066\237\122\357\165\150 -\054\102\106\210\131\104\326\117\222\033\005\271\217\013\232\320 -\161\322\116\241\033\254\201\034\001\021\211\023\316\056\330\237 -\125\340\036\376\170\024\303\101\247\116\361\273\035\010\276\165 -\013\165\154\375\166\317\234\145\115\067\036\042\113\065\162\230 -\364\361\037\332\077\022\106\105\020\023\171\124\063\037\212\155 -\363\173\042\346\147\074\063\176\275\350\323\212\015\013\230\013 -\275\315\364\260\276\221\302\041\353\000\050\116\022\200\222\334 -\053\243\000\046\302\233\333\311\135\372\027\147\035\270\006\255 -\146\141\122\034\232\111\131\213\333\016\124\241\130\342\215\067 -\064\241\173\215\305\274\332\212\250\322\130\160\261\142\366\260 -\134\300\022\167\262\166\206\177\057\250\324\035\321\174\247\342 -\232\360 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "RCSC RootCA" -# Issuer: CN=RCSC RootCA,O=VI Registru centras- i.k. 124110246,OU=RCSC,C=LT -# Serial Number:4f:00:1b:a1:24:bd:cb:88:48:be:bd:3f:2b:62:c7:c5 -# Subject: CN=RCSC RootCA,O=VI Registru centras- i.k. 124110246,OU=RCSC,C=LT -# Not Valid Before: Tue May 23 08:36:51 2017 -# Not Valid After : Mon May 23 08:36:51 2044 -# Fingerprint (SHA-256): 77:07:BB:2B:E9:F7:CE:05:70:60:B8:30:8C:3B:C0:87:B5:65:29:B3:63:8E:AF:5B:2A:80:49:C8:E1:5E:D7:20 -# Fingerprint (SHA1): FD:E7:C6:FD:B3:2B:B8:E6:39:39:84:0D:6A:E0:52:C3:D8:B7:3B:87 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "RCSC RootCA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\375\347\306\375\263\053\270\346\071\071\204\015\152\340\122\303 -\330\267\073\207 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\013\010\222\006\231\145\312\170\047\010\143\252\060\121\052\327 -END -CKA_ISSUER MULTILINE_OCTAL -\060\140\061\013\060\011\006\003\125\004\006\023\002\114\124\061 -\015\060\013\006\003\125\004\013\023\004\122\103\123\103\061\054 -\060\052\006\003\125\004\012\023\043\126\111\040\122\145\147\151 -\163\164\162\165\040\143\145\156\164\162\141\163\055\040\151\056 -\153\056\040\061\062\064\061\061\060\062\064\066\061\024\060\022 -\006\003\125\004\003\023\013\122\103\123\103\040\122\157\157\164 -\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\117\000\033\241\044\275\313\210\110\276\275\077\053\142 -\307\305 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "VRK Gov. Root CA - G2" # @@ -29047,174 +24005,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Digidentity Services Root CA" -# -# Issuer: C=NL,O=Digidentity B.V.,CN=Digidentity Services Root CA -# Serial Number:12:81:b9:18:f3:79:3a:42:93:ce:91:58:61:e4:ed:5c -# Subject: C=NL,O=Digidentity B.V.,CN=Digidentity Services Root CA -# Not Valid Before: Tue Jul 10 10:05:42 2018 -# Not Valid After : Sat Jul 04 10:05:42 2043 -# Fingerprint (SHA-256): E2:80:97:72:1A:8C:AB:88:80:AF:80:FD:EF:89:02:B1:F1:5B:C7:47:3A:D6:8E:C2:29:91:25:7A:91:0D:9E:A2 -# Fingerprint (SHA1): 7B:3F:B2:77:EE:31:1C:1E:D5:60:CA:B9:6E:4F:ED:77:5E:6A:3E:ED -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Digidentity Services Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\117\061\045\060\043\006\003\125\004\003\014\034\104\151\147 -\151\144\145\156\164\151\164\171\040\123\145\162\166\151\143\145 -\163\040\122\157\157\164\040\103\101\061\031\060\027\006\003\125 -\004\012\014\020\104\151\147\151\144\145\156\164\151\164\171\040 -\102\056\126\056\061\013\060\011\006\003\125\004\006\023\002\116 -\114 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\117\061\045\060\043\006\003\125\004\003\014\034\104\151\147 -\151\144\145\156\164\151\164\171\040\123\145\162\166\151\143\145 -\163\040\122\157\157\164\040\103\101\061\031\060\027\006\003\125 -\004\012\014\020\104\151\147\151\144\145\156\164\151\164\171\040 -\102\056\126\056\061\013\060\011\006\003\125\004\006\023\002\116 -\114 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\022\201\271\030\363\171\072\102\223\316\221\130\141\344 -\355\134 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\152\060\202\003\122\240\003\002\001\002\002\020\022 -\201\271\030\363\171\072\102\223\316\221\130\141\344\355\134\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\117 -\061\045\060\043\006\003\125\004\003\014\034\104\151\147\151\144 -\145\156\164\151\164\171\040\123\145\162\166\151\143\145\163\040 -\122\157\157\164\040\103\101\061\031\060\027\006\003\125\004\012 -\014\020\104\151\147\151\144\145\156\164\151\164\171\040\102\056 -\126\056\061\013\060\011\006\003\125\004\006\023\002\116\114\060 -\036\027\015\061\070\060\067\061\060\061\060\060\065\064\062\132 -\027\015\064\063\060\067\060\064\061\060\060\065\064\062\132\060 -\117\061\045\060\043\006\003\125\004\003\014\034\104\151\147\151 -\144\145\156\164\151\164\171\040\123\145\162\166\151\143\145\163 -\040\122\157\157\164\040\103\101\061\031\060\027\006\003\125\004 -\012\014\020\104\151\147\151\144\145\156\164\151\164\171\040\102 -\056\126\056\061\013\060\011\006\003\125\004\006\023\002\116\114 -\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 -\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 -\000\222\007\073\005\363\075\325\301\312\346\346\307\006\372\171 -\250\077\150\147\104\167\063\144\303\037\135\330\162\131\203\143 -\317\223\314\245\223\023\001\101\304\012\017\246\317\147\032\062 -\064\240\272\100\234\107\276\102\254\336\033\007\134\110\043\063 -\122\235\051\363\267\134\306\065\102\152\206\164\147\310\311\232 -\023\125\223\120\137\106\057\100\051\360\246\236\174\173\132\124 -\332\212\052\362\001\233\112\215\356\317\154\020\105\365\360\040 -\021\072\275\216\130\172\230\102\227\223\003\142\017\074\174\141 -\050\232\332\125\115\044\300\174\317\013\313\331\035\331\315\151 -\272\213\315\216\064\305\364\165\127\106\053\202\215\156\074\345 -\010\225\172\157\112\213\175\343\204\177\176\102\052\331\261\041 -\240\046\342\232\070\027\261\252\335\062\344\114\246\253\371\304 -\046\007\136\006\225\271\317\255\237\311\377\313\043\322\071\350 -\044\110\210\022\261\325\317\264\304\354\075\213\376\165\157\307 -\021\162\022\350\272\332\232\322\175\161\153\136\331\214\176\061 -\206\337\130\335\054\231\112\254\260\055\315\312\334\140\057\153 -\060\242\132\213\074\313\033\060\374\021\063\111\111\331\126\326 -\350\041\336\264\272\074\172\327\030\045\036\200\366\213\346\005 -\227\165\324\164\150\205\103\012\164\213\034\261\055\271\237\004 -\330\241\227\324\246\064\122\314\215\062\204\255\211\355\346\370 -\105\214\163\234\035\065\346\016\347\255\230\367\111\311\012\231 -\226\120\242\056\215\177\356\251\032\036\251\254\047\266\314\131 -\313\112\222\350\362\327\216\247\215\135\116\325\165\007\240\324 -\170\043\331\265\037\132\343\261\100\032\240\361\176\155\150\304 -\174\071\132\276\112\322\065\223\365\146\064\326\375\013\224\252 -\230\256\242\055\056\100\162\300\253\256\000\163\212\067\210\172 -\374\102\232\205\335\172\262\062\376\335\304\206\064\204\177\173 -\032\151\300\267\076\264\223\334\006\261\340\030\342\176\207\262 -\050\305\325\151\116\361\313\303\323\122\074\005\041\234\331\145 -\254\031\253\377\261\145\054\070\172\152\004\063\247\254\237\050 -\056\316\302\114\223\230\360\302\001\252\220\030\107\323\272\053 -\060\251\315\151\125\330\037\143\074\067\063\074\145\357\357\347 -\035\002\003\001\000\001\243\102\060\100\060\017\006\003\125\035 -\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125 -\035\016\004\026\004\024\302\170\147\027\153\217\076\116\261\130 -\226\216\172\102\332\147\077\304\027\135\060\016\006\003\125\035 -\017\001\001\377\004\004\003\002\001\006\060\015\006\011\052\206 -\110\206\367\015\001\001\013\005\000\003\202\002\001\000\036\242 -\063\120\006\170\074\272\322\254\036\122\166\305\107\073\316\275 -\072\252\244\300\257\265\134\247\165\054\343\040\144\263\265\205 -\127\011\337\076\223\317\226\006\062\036\326\116\063\027\077\350 -\242\010\271\135\252\200\056\235\357\122\136\027\017\340\007\174 -\211\343\101\030\355\214\124\256\126\262\174\100\210\026\053\174 -\305\105\256\302\346\117\066\370\163\375\264\016\231\100\111\205 -\257\041\276\022\223\323\376\146\100\374\321\123\240\045\177\235 -\166\021\140\110\060\114\235\254\211\334\210\044\277\242\123\063 -\261\212\313\342\336\141\103\170\177\172\341\355\044\216\174\010 -\277\064\316\063\224\165\163\156\364\317\050\062\337\275\042\030 -\315\041\274\244\034\336\260\244\377\216\032\043\307\137\164\123 -\171\266\000\173\154\062\177\134\355\073\161\260\032\004\342\016 -\343\243\157\177\123\275\146\177\265\271\037\033\254\163\323\223 -\122\243\131\003\070\255\133\147\150\142\032\047\311\366\275\177 -\035\255\235\060\166\024\130\073\363\060\252\102\171\107\020\263 -\177\331\072\312\331\231\112\107\234\133\204\022\237\145\370\307 -\200\265\364\077\034\320\136\131\374\170\104\201\247\211\076\210 -\135\222\226\261\164\142\246\354\351\142\165\133\315\351\102\021 -\054\213\024\042\232\007\214\006\344\203\250\312\127\222\131\006 -\150\262\071\072\232\121\010\105\342\006\003\345\066\117\210\136 -\224\275\024\074\257\125\370\062\165\063\137\313\121\273\022\031 -\106\145\001\163\101\146\005\214\277\030\113\377\071\071\217\156 -\340\342\131\326\360\234\274\014\076\072\170\201\117\044\131\332 -\104\112\327\117\266\257\232\354\104\365\167\233\333\303\043\220 -\366\106\030\275\277\057\321\176\050\100\024\061\175\272\040\005 -\170\244\166\335\026\016\012\172\254\151\106\376\360\001\356\152 -\322\155\016\216\073\025\056\174\043\217\167\341\345\175\374\030 -\003\224\336\041\224\046\333\106\211\124\370\043\263\130\053\376 -\057\366\364\226\033\223\145\255\171\003\054\304\337\041\070\164 -\344\232\035\366\105\107\071\162\325\161\135\373\276\010\155\026 -\325\250\267\141\143\052\247\050\300\007\246\265\336\225\355\222 -\252\154\373\315\134\115\131\132\346\135\040\233\206\227 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "Digidentity Services Root CA" -# Issuer: C=NL,O=Digidentity B.V.,CN=Digidentity Services Root CA -# Serial Number:12:81:b9:18:f3:79:3a:42:93:ce:91:58:61:e4:ed:5c -# Subject: C=NL,O=Digidentity B.V.,CN=Digidentity Services Root CA -# Not Valid Before: Tue Jul 10 10:05:42 2018 -# Not Valid After : Sat Jul 04 10:05:42 2043 -# Fingerprint (SHA-256): E2:80:97:72:1A:8C:AB:88:80:AF:80:FD:EF:89:02:B1:F1:5B:C7:47:3A:D6:8E:C2:29:91:25:7A:91:0D:9E:A2 -# Fingerprint (SHA1): 7B:3F:B2:77:EE:31:1C:1E:D5:60:CA:B9:6E:4F:ED:77:5E:6A:3E:ED -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Digidentity Services Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\173\077\262\167\356\061\034\036\325\140\312\271\156\117\355\167 -\136\152\076\355 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\046\177\371\026\347\311\347\204\373\314\314\111\216\014\070\355 -END -CKA_ISSUER MULTILINE_OCTAL -\060\117\061\045\060\043\006\003\125\004\003\014\034\104\151\147 -\151\144\145\156\164\151\164\171\040\123\145\162\166\151\143\145 -\163\040\122\157\157\164\040\103\101\061\031\060\027\006\003\125 -\004\012\014\020\104\151\147\151\144\145\156\164\151\164\171\040 -\102\056\126\056\061\013\060\011\006\003\125\004\006\023\002\116 -\114 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\022\201\271\030\363\171\072\102\223\316\221\130\141\344 -\355\134 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "HiPKI Root CA - G1" # @@ -29383,207 +24173,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "TrustFactory SSL Root Certificate Authority" -# -# Issuer: CN=TrustFactory SSL Root Certificate Authority,OU=TrustFactory PKI Operations,O=TrustFactory(Pty)Ltd,L=Johannesburg,ST=Gauteng,C=ZA -# Serial Number:68:5d:cc:26:39:e0:23:66:e4:4a:9d:64:d3:8e:04:35 -# Subject: CN=TrustFactory SSL Root Certificate Authority,OU=TrustFactory PKI Operations,O=TrustFactory(Pty)Ltd,L=Johannesburg,ST=Gauteng,C=ZA -# Not Valid Before: Tue Dec 05 10:59:29 2017 -# Not Valid After : Thu Nov 28 10:59:29 2047 -# Fingerprint (SHA-256): 60:81:42:DA:5C:67:5D:D4:7C:1A:A3:A2:6E:E3:29:E2:4E:81:D5:FF:3B:94:01:7B:C1:C1:A0:C3:7D:B4:C1:A0 -# Fingerprint (SHA1): D1:14:78:E8:E5:FB:62:54:05:93:D2:2C:51:57:0D:01:4E:AC:76:D8 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TrustFactory SSL Root Certificate Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\261\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\020\060\016\006\003\125\004\010\014\007\107\141\165\164\145 -\156\147\061\025\060\023\006\003\125\004\007\014\014\112\157\150 -\141\156\156\145\163\142\165\162\147\061\035\060\033\006\003\125 -\004\012\014\024\124\162\165\163\164\106\141\143\164\157\162\171 -\050\120\164\171\051\114\164\144\061\044\060\042\006\003\125\004 -\013\014\033\124\162\165\163\164\106\141\143\164\157\162\171\040 -\120\113\111\040\117\160\145\162\141\164\151\157\156\163\061\064 -\060\062\006\003\125\004\003\014\053\124\162\165\163\164\106\141 -\143\164\157\162\171\040\123\123\114\040\122\157\157\164\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\261\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\020\060\016\006\003\125\004\010\014\007\107\141\165\164\145 -\156\147\061\025\060\023\006\003\125\004\007\014\014\112\157\150 -\141\156\156\145\163\142\165\162\147\061\035\060\033\006\003\125 -\004\012\014\024\124\162\165\163\164\106\141\143\164\157\162\171 -\050\120\164\171\051\114\164\144\061\044\060\042\006\003\125\004 -\013\014\033\124\162\165\163\164\106\141\143\164\157\162\171\040 -\120\113\111\040\117\160\145\162\141\164\151\157\156\163\061\064 -\060\062\006\003\125\004\003\014\053\124\162\165\163\164\106\141 -\143\164\157\162\171\040\123\123\114\040\122\157\157\164\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\150\135\314\046\071\340\043\146\344\112\235\144\323\216 -\004\065 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\006\121\060\202\004\071\240\003\002\001\002\002\020\150 -\135\314\046\071\340\043\146\344\112\235\144\323\216\004\065\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\201 -\261\061\013\060\011\006\003\125\004\006\023\002\132\101\061\020 -\060\016\006\003\125\004\010\014\007\107\141\165\164\145\156\147 -\061\025\060\023\006\003\125\004\007\014\014\112\157\150\141\156 -\156\145\163\142\165\162\147\061\035\060\033\006\003\125\004\012 -\014\024\124\162\165\163\164\106\141\143\164\157\162\171\050\120 -\164\171\051\114\164\144\061\044\060\042\006\003\125\004\013\014 -\033\124\162\165\163\164\106\141\143\164\157\162\171\040\120\113 -\111\040\117\160\145\162\141\164\151\157\156\163\061\064\060\062 -\006\003\125\004\003\014\053\124\162\165\163\164\106\141\143\164 -\157\162\171\040\123\123\114\040\122\157\157\164\040\103\145\162 -\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162\151 -\164\171\060\036\027\015\061\067\061\062\060\065\061\060\065\071 -\062\071\132\027\015\064\067\061\061\062\070\061\060\065\071\062 -\071\132\060\201\261\061\013\060\011\006\003\125\004\006\023\002 -\132\101\061\020\060\016\006\003\125\004\010\014\007\107\141\165 -\164\145\156\147\061\025\060\023\006\003\125\004\007\014\014\112 -\157\150\141\156\156\145\163\142\165\162\147\061\035\060\033\006 -\003\125\004\012\014\024\124\162\165\163\164\106\141\143\164\157 -\162\171\050\120\164\171\051\114\164\144\061\044\060\042\006\003 -\125\004\013\014\033\124\162\165\163\164\106\141\143\164\157\162 -\171\040\120\113\111\040\117\160\145\162\141\164\151\157\156\163 -\061\064\060\062\006\003\125\004\003\014\053\124\162\165\163\164 -\106\141\143\164\157\162\171\040\123\123\114\040\122\157\157\164 -\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 -\150\157\162\151\164\171\060\202\002\042\060\015\006\011\052\206 -\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202 -\002\012\002\202\002\001\000\225\321\107\050\356\360\124\274\353 -\275\325\253\006\176\045\244\003\252\375\140\172\316\067\271\151 -\332\051\171\167\154\075\177\202\064\302\135\376\102\244\015\101 -\132\000\322\203\244\152\155\301\345\310\121\142\372\153\325\306 -\107\334\070\156\021\220\214\150\025\317\351\272\130\346\232\213 -\205\201\020\055\317\347\123\111\351\243\067\042\014\274\164\262 -\266\045\122\021\317\242\041\074\211\240\327\244\035\043\020\153 -\035\131\073\067\364\135\066\070\100\265\165\102\257\055\032\007 -\274\215\143\024\330\112\370\042\231\357\300\132\111\157\253\222 -\077\113\354\244\152\030\077\121\056\323\040\347\117\056\203\006 -\072\136\177\025\213\317\372\065\056\123\271\152\032\317\247\370 -\074\271\311\163\027\072\375\255\015\130\315\222\165\352\077\377 -\271\206\363\376\325\240\365\145\352\143\326\372\206\021\264\164 -\325\265\130\204\252\055\135\112\027\276\354\246\044\327\240\275 -\267\030\070\026\147\156\021\205\133\137\140\122\213\321\317\345 -\102\320\234\136\365\216\205\275\362\206\154\250\125\334\353\035 -\172\375\254\050\360\304\322\307\251\007\327\135\076\027\126\224 -\106\356\233\312\304\260\214\032\152\327\317\233\316\246\114\055 -\200\370\235\361\043\100\232\100\053\070\125\036\065\003\335\165 -\333\061\324\116\212\047\157\227\216\234\314\166\231\035\126\256 -\062\114\027\331\031\257\250\244\314\013\312\002\165\001\116\075 -\274\024\364\252\073\233\320\117\267\347\376\132\304\316\326\014 -\163\063\254\251\315\054\213\035\015\041\371\141\346\241\166\342 -\256\360\164\111\001\374\071\337\250\023\222\310\143\211\136\265 -\020\361\035\041\366\323\030\373\167\114\151\342\152\314\340\171 -\254\116\233\144\317\350\342\363\042\242\207\236\236\033\044\014 -\161\146\345\351\166\344\144\124\233\315\015\366\121\175\273\237 -\000\132\036\164\264\320\253\215\035\253\010\357\053\302\333\275 -\203\141\327\311\144\274\017\156\027\306\062\337\014\363\246\136 -\356\354\040\014\052\317\172\105\120\173\030\326\373\022\166\341 -\257\131\037\201\332\064\202\066\105\277\222\311\125\245\326\165 -\006\131\207\233\244\203\336\255\170\171\154\074\250\217\235\356 -\134\354\074\343\211\242\053\002\003\001\000\001\243\143\060\141 -\060\035\006\003\125\035\016\004\026\004\024\102\072\136\066\132 -\334\033\252\320\242\352\365\361\104\177\164\045\163\351\275\060 -\037\006\003\125\035\043\004\030\060\026\200\024\102\072\136\066 -\132\334\033\252\320\242\352\365\361\104\177\164\045\163\351\275 -\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 -\377\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001 -\006\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000 -\003\202\002\001\000\006\072\042\152\034\374\033\172\335\150\277 -\325\112\250\276\013\142\330\152\147\111\064\140\034\133\263\355 -\045\276\066\016\040\127\165\003\207\350\146\167\254\167\325\167 -\141\224\155\350\164\161\124\153\364\374\266\362\213\212\147\137 -\035\004\010\077\376\201\040\355\217\074\327\107\166\130\102\321 -\152\307\061\164\176\064\115\246\173\105\121\160\023\370\106\104 -\107\317\015\332\226\024\306\202\126\076\205\032\350\262\245\237 -\177\315\017\154\203\202\342\030\007\334\146\134\212\312\135\250 -\204\057\124\214\203\360\305\074\100\040\062\342\117\350\126\353 -\225\302\344\306\120\376\042\350\257\001\122\053\225\256\206\126 -\225\247\173\036\306\067\356\065\366\367\373\066\320\340\052\335 -\060\062\303\155\024\045\307\125\322\153\043\157\220\052\012\143 -\226\172\146\350\335\200\262\171\377\223\150\155\017\261\024\123 -\345\316\173\114\320\301\043\013\072\203\344\314\216\373\334\056 -\331\164\122\340\120\275\272\111\370\166\064\026\037\151\053\364 -\050\206\035\114\064\025\027\332\164\250\160\226\135\077\302\035 -\307\004\207\125\242\153\261\262\365\065\126\142\273\273\365\107 -\354\202\264\146\152\023\110\170\124\143\317\137\200\354\230\106 -\304\111\311\364\244\053\225\045\307\300\243\333\126\134\275\252 -\366\271\067\342\332\104\345\015\113\207\171\235\246\235\037\255 -\017\375\316\351\146\255\361\004\224\125\110\327\253\047\226\141 -\125\371\066\335\065\337\210\126\065\366\152\261\223\130\130\145 -\052\264\245\335\017\115\213\007\031\275\202\252\165\264\102\314 -\125\131\336\247\162\050\201\176\254\253\033\354\200\034\230\127 -\022\031\337\267\046\051\061\322\372\220\015\134\036\060\057\052 -\206\056\105\143\325\236\345\174\160\177\002\145\056\031\364\001 -\106\336\334\270\127\235\276\171\076\124\177\056\203\116\162\305 -\315\131\141\075\367\240\266\223\224\153\135\011\060\046\163\070 -\126\374\127\170\207\357\355\070\302\015\126\060\204\211\233\026 -\216\172\010\265\177\046\022\303\120\365\033\052\262\157\220\070 -\066\340\065\021\114\331\036\036\373\341\270\214\105\254\140\341 -\371\265\271\354\277\301\011\172\051\045\303\351\041\313\320\357 -\203\254\042\074\150 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE -CKA_NSS_SERVER_DISTRUST_AFTER CK_BBOOL CK_FALSE -CKA_NSS_EMAIL_DISTRUST_AFTER CK_BBOOL CK_FALSE - -# Trust for "TrustFactory SSL Root Certificate Authority" -# Issuer: CN=TrustFactory SSL Root Certificate Authority,OU=TrustFactory PKI Operations,O=TrustFactory(Pty)Ltd,L=Johannesburg,ST=Gauteng,C=ZA -# Serial Number:68:5d:cc:26:39:e0:23:66:e4:4a:9d:64:d3:8e:04:35 -# Subject: CN=TrustFactory SSL Root Certificate Authority,OU=TrustFactory PKI Operations,O=TrustFactory(Pty)Ltd,L=Johannesburg,ST=Gauteng,C=ZA -# Not Valid Before: Tue Dec 05 10:59:29 2017 -# Not Valid After : Thu Nov 28 10:59:29 2047 -# Fingerprint (SHA-256): 60:81:42:DA:5C:67:5D:D4:7C:1A:A3:A2:6E:E3:29:E2:4E:81:D5:FF:3B:94:01:7B:C1:C1:A0:C3:7D:B4:C1:A0 -# Fingerprint (SHA1): D1:14:78:E8:E5:FB:62:54:05:93:D2:2C:51:57:0D:01:4E:AC:76:D8 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TrustFactory SSL Root Certificate Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\321\024\170\350\345\373\142\124\005\223\322\054\121\127\015\001 -\116\254\166\330 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\272\224\236\216\200\351\110\235\106\253\251\023\077\132\240\340 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\261\061\013\060\011\006\003\125\004\006\023\002\132\101 -\061\020\060\016\006\003\125\004\010\014\007\107\141\165\164\145 -\156\147\061\025\060\023\006\003\125\004\007\014\014\112\157\150 -\141\156\156\145\163\142\165\162\147\061\035\060\033\006\003\125 -\004\012\014\024\124\162\165\163\164\106\141\143\164\157\162\171 -\050\120\164\171\051\114\164\144\061\044\060\042\006\003\125\004 -\013\014\033\124\162\165\163\164\106\141\143\164\157\162\171\040 -\120\113\111\040\117\160\145\162\141\164\151\157\156\163\061\064 -\060\062\006\003\125\004\003\014\053\124\162\165\163\164\106\141 -\143\164\157\162\171\040\123\123\114\040\122\157\157\164\040\103 -\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 -\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\150\135\314\046\071\340\043\146\344\112\235\144\323\216 -\004\065 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "A-Trust-Root-07" # diff --git a/SPECS/caddy/0001-Disable-commands-that-can-alter-the-binary.patch b/SPECS/caddy/0001-Disable-commands-that-can-alter-the-binary.patch index 710f8c5a44..ec1be08a98 100644 --- a/SPECS/caddy/0001-Disable-commands-that-can-alter-the-binary.patch +++ b/SPECS/caddy/0001-Disable-commands-that-can-alter-the-binary.patch @@ -8,10 +8,10 @@ Subject: [PATCH 1/2] Disable commands that can alter the binary 1 file changed, 45 deletions(-) diff --git a/cmd/commands.go b/cmd/commands.go -index 259dd358..31b85a18 100644 +index 417720f..bee012a 100644 --- a/cmd/commands.go +++ b/cmd/commands.go -@@ -395,51 +395,6 @@ is always printed to stdout. +@@ -405,51 +405,6 @@ is always printed to stdout. }, }) @@ -61,8 +61,8 @@ index 259dd358..31b85a18 100644 - }) - defaultFactory.Use(func(rootCmd *cobra.Command) { - rootCmd.AddCommand(caddyCmdToCobra(Command{ + manpageCommand := Command{ Name: "manpage", -- -2.47.1 +2.34.1 diff --git a/SPECS/caddy/CVE-2024-45339.patch b/SPECS/caddy/CVE-2024-45339.patch deleted file mode 100644 index 8b2ea2fa42..0000000000 --- a/SPECS/caddy/CVE-2024-45339.patch +++ /dev/null @@ -1,120 +0,0 @@ -From afd4339ec8682b92eb6bcc870d138106ffd5f58d Mon Sep 17 00:00:00 2001 -From: kavyasree -Date: Fri, 31 Jan 2025 21:16:51 +0530 -Subject: [PATCH] Patch CVE-2024-45339 - -Reference: https://github.com/golang/glog/pull/74 - ---- - vendor/github.com/golang/glog/glog_file.go | 60 ++++++++++++++++------ - 1 file changed, 44 insertions(+), 16 deletions(-) - -diff --git a/vendor/github.com/golang/glog/glog_file.go b/vendor/github.com/golang/glog/glog_file.go -index e7d125c..6d239fa 100644 ---- a/vendor/github.com/golang/glog/glog_file.go -+++ b/vendor/github.com/golang/glog/glog_file.go -@@ -118,32 +118,53 @@ var onceLogDirs sync.Once - // contains tag ("INFO", "FATAL", etc.) and t. If the file is created - // successfully, create also attempts to update the symlink for that tag, ignoring - // errors. --func create(tag string, t time.Time) (f *os.File, filename string, err error) { -+func create(tag string, t time.Time, dir string) (f *os.File, filename string, err error) { -+ if dir != "" { -+ f, name, err := createInDir(dir, tag, t) -+ if err == nil { -+ return f, name, err -+ } -+ return nil, "", fmt.Errorf("log: cannot create log: %v", err) -+ } -+ - onceLogDirs.Do(createLogDirs) - if len(logDirs) == 0 { - return nil, "", errors.New("log: no log dirs") - } -- name, link := logName(tag, t) - var lastErr error - for _, dir := range logDirs { -- fname := filepath.Join(dir, name) -- f, err := os.Create(fname) -+ f, name, err := createInDir(dir, tag, t) - if err == nil { -- symlink := filepath.Join(dir, link) -- os.Remove(symlink) // ignore err -- os.Symlink(name, symlink) // ignore err -- if *logLink != "" { -- lsymlink := filepath.Join(*logLink, link) -- os.Remove(lsymlink) // ignore err -- os.Symlink(fname, lsymlink) // ignore err -- } -- return f, fname, nil -+ return f, name, err - } - lastErr = err - } - return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr) - } - -+func createInDir(dir, tag string, t time.Time) (f *os.File, name string, err error) { -+ name, link := logName(tag, t) -+ fname := filepath.Join(dir, name) -+ // O_EXCL is important here, as it prevents a vulnerability. The general idea is that logs often -+ // live in an insecure directory (like /tmp), so an unprivileged attacker could create fname in -+ // advance as a symlink to a file the logging process can access, but the attacker cannot. O_EXCL -+ // fails the open if it already exists, thus prevent our this code from opening the existing file -+ // the attacker points us to. -+ f, err = os.OpenFile(fname, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666) -+ if err == nil { -+ symlink := filepath.Join(dir, link) -+ os.Remove(symlink) // ignore err -+ os.Symlink(name, symlink) // ignore err -+ if *logLink != "" { -+ lsymlink := filepath.Join(*logLink, link) -+ os.Remove(lsymlink) // ignore err -+ os.Symlink(fname, lsymlink) // ignore err -+ } -+ return f, fname, nil -+ } -+ return nil, "", err -+} -+ - // flushSyncWriter is the interface satisfied by logging destinations. - type flushSyncWriter interface { - Flush() error -@@ -247,6 +268,7 @@ type syncBuffer struct { - names []string - sev logsink.Severity - nbytes uint64 // The number of bytes written to this file -+ madeAt time.Time - } - - func (sb *syncBuffer) Sync() error { -@@ -254,9 +276,14 @@ func (sb *syncBuffer) Sync() error { - } - - func (sb *syncBuffer) Write(p []byte) (n int, err error) { -+ // Rotate the file if it is too large, but ensure we only do so, -+ // if rotate doesn't create a conflicting filename. - if sb.nbytes+uint64(len(p)) >= MaxSize { -- if err := sb.rotateFile(time.Now()); err != nil { -- return 0, err -+ now := timeNow() -+ if now.After(sb.madeAt.Add(1*time.Second)) || now.Second() != sb.madeAt.Second() { -+ if err := sb.rotateFile(now); err != nil { -+ return 0, err -+ } - } - } - n, err = sb.Writer.Write(p) -@@ -274,7 +301,8 @@ const footer = "\nCONTINUED IN NEXT FILE\n" - func (sb *syncBuffer) rotateFile(now time.Time) error { - var err error - pn := "" -- file, name, err := create(sb.sev.String(), now) -+ file, name, err := create(sb.sev.String(), now, "") -+ sb.madeAt = now - - if sb.file != nil { - // The current log file becomes the previous log at the end of --- -2.34.1 - diff --git a/SPECS/caddy/CVE-2025-22869.patch b/SPECS/caddy/CVE-2025-22869.patch deleted file mode 100644 index 8c80028d42..0000000000 --- a/SPECS/caddy/CVE-2025-22869.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 041b89a18f81265899e42e6801f830c101a96120 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Sun, 2 Mar 2025 13:46:00 +0000 -Subject: [PATCH] CVE-2025-22869 - -Upstream Reference : https://github.com/golang/crypto/commit/7292932d45d55c7199324ab0027cc86e8198aa22 - -ssh: limit the size of the internal packet queue while waiting for KEX - -In the SSH protocol, clients and servers execute the key exchange to -generate one-time session keys used for encryption and authentication. -The key exchange is performed initially after the connection is -established and then periodically after a configurable amount of data. -While a key exchange is in progress, we add the received packets to an -internal queue until we receive SSH_MSG_KEXINIT from the other side. -This can result in high memory usage if the other party is slow to -respond to the SSH_MSG_KEXINIT packet, or memory exhaustion if a -malicious client never responds to an SSH_MSG_KEXINIT packet during a -large file transfer. -We now limit the internal queue to 64 packets: this means 2MB with the -typical 32KB packet size. -When the internal queue is full we block further writes until the -pending key exchange is completed or there is a read or write error. - -Thanks to Yuichi Watanabe for reporting this issue. - -Change-Id: I1ce2214cc16e08b838d4bc346c74c72addafaeec -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/652135 -Reviewed-by: Neal Patel -Auto-Submit: Gopher Robot -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI - ---- - vendor/golang.org/x/crypto/ssh/handshake.go | 47 ++++++++++++++++----- - 1 file changed, 37 insertions(+), 10 deletions(-) - -diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go -index 70a7369..e14eb6c 100644 ---- a/vendor/golang.org/x/crypto/ssh/handshake.go -+++ b/vendor/golang.org/x/crypto/ssh/handshake.go -@@ -24,6 +24,11 @@ const debugHandshake = false - // quickly. - const chanSize = 16 - -+// maxPendingPackets sets the maximum number of packets to queue while waiting -+// for KEX to complete. This limits the total pending data to maxPendingPackets -+// * maxPacket bytes, which is ~16.8MB. -+const maxPendingPackets = 64 -+ - // keyingTransport is a packet based transport that supports key - // changes. It need not be thread-safe. It should pass through - // msgNewKeys in both directions. -@@ -58,11 +63,19 @@ type handshakeTransport struct { - incoming chan []byte - readError error - -- mu sync.Mutex -- writeError error -- sentInitPacket []byte -- sentInitMsg *kexInitMsg -- pendingPackets [][]byte // Used when a key exchange is in progress. -+ mu sync.Mutex -+ // Condition for the above mutex. It is used to notify a completed key -+ // exchange or a write failure. Writes can wait for this condition while a -+ // key exchange is in progress. -+ writeCond *sync.Cond -+ writeError error -+ sentInitPacket []byte -+ sentInitMsg *kexInitMsg -+ // Used to queue writes when a key exchange is in progress. The length is -+ // limited by pendingPacketsSize. Once full, writes will block until the key -+ // exchange is completed or an error occurs. If not empty, it is emptied -+ // all at once when the key exchange is completed in kexLoop. -+ pendingPackets [][]byte - writePacketsLeft uint32 - writeBytesLeft int64 - -@@ -114,6 +127,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, - - config: config, - } -+ t.writeCond = sync.NewCond(&t.mu) - t.resetReadThresholds() - t.resetWriteThresholds() - -@@ -236,6 +250,7 @@ func (t *handshakeTransport) recordWriteError(err error) { - defer t.mu.Unlock() - if t.writeError == nil && err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - } - -@@ -339,6 +354,8 @@ write: - } - } - t.pendingPackets = t.pendingPackets[:0] -+ // Unblock writePacket if waiting for KEX. -+ t.writeCond.Broadcast() - t.mu.Unlock() - } - -@@ -526,11 +543,20 @@ func (t *handshakeTransport) writePacket(p []byte) error { - } - - if t.sentInitMsg != nil { -- // Copy the packet so the writer can reuse the buffer. -- cp := make([]byte, len(p)) -- copy(cp, p) -- t.pendingPackets = append(t.pendingPackets, cp) -- return nil -+ if len(t.pendingPackets) < maxPendingPackets { -+ // Copy the packet so the writer can reuse the buffer. -+ cp := make([]byte, len(p)) -+ copy(cp, p) -+ t.pendingPackets = append(t.pendingPackets, cp) -+ return nil -+ } -+ for t.sentInitMsg != nil { -+ // Block and wait for KEX to complete or an error. -+ t.writeCond.Wait() -+ if t.writeError != nil { -+ return t.writeError -+ } -+ } - } - - if t.writeBytesLeft > 0 { -@@ -547,6 +573,7 @@ func (t *handshakeTransport) writePacket(p []byte) error { - - if err := t.pushPacket(p); err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - - return nil --- -2.45.2 \ No newline at end of file diff --git a/SPECS/caddy/CVE-2025-22872.patch b/SPECS/caddy/CVE-2025-22872.patch deleted file mode 100644 index e520d0aa38..0000000000 --- a/SPECS/caddy/CVE-2025-22872.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 9ba151b580e96d9fe4f9a400f91e726119546fff Mon Sep 17 00:00:00 2001 -From: Roland Shoemaker -Date: Mon, 24 Feb 2025 11:18:31 -0800 -Subject: [PATCH] html: properly handle trailing solidus in unquoted attribute - value in foreign content - -The parser properly treats tags like

as

, but the -tokenizer emits the SelfClosingTagToken token incorrectly. When the -parser is used to parse foreign content, this results in an incorrect -DOM. - -Thanks to Sean Ng (https://ensy.zip) for reporting this issue. - -Fixes golang/go#73070 -Fixes CVE-2025-22872 - -Change-Id: I65c18df6d6244bf943b61e6c7a87895929e78f4f -Reviewed-on: https://go-review.googlesource.com/c/net/+/661256 -Reviewed-by: Neal Patel -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI -Auto-Submit: Gopher Robot ---- - vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go -index 3c57880..6598c1f 100644 ---- a/vendor/golang.org/x/net/html/token.go -+++ b/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.34.1 - diff --git a/SPECS/caddy/CVE-2025-47914.patch b/SPECS/caddy/CVE-2025-47914.patch deleted file mode 100644 index 11e2027d26..0000000000 --- a/SPECS/caddy/CVE-2025-47914.patch +++ /dev/null @@ -1,37 +0,0 @@ -From f91f7a7c31bf90b39c1de895ad116a2bacc88748 Mon Sep 17 00:00:00 2001 -From: Neal Patel -Date: Wed, 10 Sep 2025 14:27:42 -0400 -Subject: [PATCH] ssh/agent: prevent panic on malformed constraint - -An attacker could supply a malformed Constraint that -would trigger a panic in a serving agent, effectively -causing denial of service. - -Thank you to Jakub Ciolek for reporting this issue. - -Fixes CVE-2025-47914 -Fixes golang/go#76364 - -Change-Id: I195bbc68b1560d4f04897722a6a653a7cbf086eb -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/721960 -LUCI-TryBot-Result: Go LUCI -Auto-Submit: Roland Shoemaker -Reviewed-by: Damien Neil ---- - vendor/golang.org/x/crypto/ssh/agent/server.go | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/vendor/golang.org/x/crypto/ssh/agent/server.go b/vendor/golang.org/x/crypto/ssh/agent/server.go -index 88ce4da6c4..4e8ff86b61 100644 ---- a/vendor/golang.org/x/crypto/ssh/agent/server.go -+++ b/vendor/golang.org/x/crypto/ssh/agent/server.go -@@ -203,6 +203,9 @@ func parseConstraints(constraints []byte) (lifetimeSecs uint32, confirmBeforeUse - for len(constraints) != 0 { - switch constraints[0] { - case agentConstrainLifetime: -+ if len(constraints) < 5 { -+ return 0, false, nil, io.ErrUnexpectedEOF -+ } - lifetimeSecs = binary.BigEndian.Uint32(constraints[1:5]) - constraints = constraints[5:] - case agentConstrainConfirm: diff --git a/SPECS/caddy/CVE-2025-58181.patch b/SPECS/caddy/CVE-2025-58181.patch deleted file mode 100644 index 76b17efad6..0000000000 --- a/SPECS/caddy/CVE-2025-58181.patch +++ /dev/null @@ -1,53 +0,0 @@ -From e79546e28b85ea53dd37afe1c4102746ef553b9c Mon Sep 17 00:00:00 2001 -From: Neal Patel -Date: Wed, 19 Nov 2025 13:35:12 -0500 -Subject: [PATCH] ssh: curb GSSAPI DoS risk by limiting number of specified - OIDs - -Previously, an attacker could specify an integer up to 0xFFFFFFFF -that would directly allocate memory despite the observability of -the rest of the payload. This change places a hard cap on the -amount of mechanisms that can be specified and encoded in the -payload. Additionally, it performs a small sanity check to deny -payloads whose stated size is contradictory to the observed payload. - -Thank you to Jakub Ciolek for reporting this issue. - -Fixes CVE-2025-58181 -Fixes golang/go#76363 - -Change-Id: I0307ab3e906a3f2ae763b5f9f0310f7073f84485 -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/721961 -Auto-Submit: Roland Shoemaker -Reviewed-by: Damien Neil -LUCI-TryBot-Result: Go LUCI ---- - vendor/golang.org/x/crypto/ssh/ssh_gss.go | 8 +++++++- - 1 files changed, 7 insertions(+), 1 deletion(-) - -diff --git a/vendor/golang.org/x/crypto//ssh/ssh_gss.go b/vendor/golang.org/x/crypto/ssh/ssh_gss.go -index 24bd7c8e83..a6249a1227 100644 ---- a/vendor/golang.org/x/crypto/ssh/ssh_gss.go -+++ b/vendor/golang.org/x/crypto/ssh/ssh_gss.go -@@ -106,6 +106,13 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) { - if !ok { - return nil, errors.New("parse uint32 failed") - } -+ // Each ASN.1 encoded OID must have a minimum -+ // of 2 bytes; 64 maximum mechanisms is an -+ // arbitrary, but reasonable ceiling. -+ const maxMechs = 64 -+ if n > maxMechs || int(n)*2 > len(rest) { -+ return nil, errors.New("invalid mechanism count") -+ } - s := &userAuthRequestGSSAPI{ - N: n, - OIDS: make([]asn1.ObjectIdentifier, n), -@@ -122,7 +129,6 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) { - if rest, err = asn1.Unmarshal(desiredMech, &s.OIDS[i]); err != nil { - return nil, err - } -- - } - return s, nil - } diff --git a/SPECS/caddy/caddy.signatures.json b/SPECS/caddy/caddy.signatures.json index da8730e8a7..d4805ec661 100644 --- a/SPECS/caddy/caddy.signatures.json +++ b/SPECS/caddy/caddy.signatures.json @@ -8,7 +8,7 @@ "poweredby-black.png": "4691c0d3bd2156db97b76d12f0c98662fe8869f30fe2c07631ffb43bda09e6a1", "poweredby-white.png": "e128419a13a91428ea9985fd54c91b8e80061c4d72b4ee913e616b3c823fcdd6", "0001-Disable-commands-that-can-alter-the-binary.patch": "1ef152b99af5a3a549254c845145ea9142abd571fb92c370acb3604dc77a1415", - "caddy-2.9.1.tar.gz": "beb52478dfb34ad29407003520d94ee0baccbf210d1af72cebf430d6d7dd7b63", - "caddy-2.9.1-vendor.tar.gz": "3a7bc2b669f1cc55273d9486fd651473ca5de02131c4de292bffac0aaab82837" + "caddy-2.11.2.tar.gz": "ee12f7b5f97308708de5067deebb3d3322fc24f6d54f906a47a0a4e8db799122", + "caddy-2.11.2-vendor.tar.gz": "cccbed2afed999aa2eac773968a5d76d1478db44ecb3745df7123b717312a669" } } diff --git a/SPECS/caddy/caddy.spec b/SPECS/caddy/caddy.spec index 030f76e518..5816f9a7cd 100644 --- a/SPECS/caddy/caddy.spec +++ b/SPECS/caddy/caddy.spec @@ -2,8 +2,8 @@ Summary: Web server with automatic HTTPS Name: caddy -Version: 2.9.1 -Release: 20%{?dist} +Version: 2.11.2 +Release: 1%{?dist} Distribution: Edge Microvisor Toolkit Vendor: Intel Corporation # main source code is Apache-2.0 @@ -27,16 +27,8 @@ Source31: poweredby-black.png # downstream only patch to disable commands that can alter the binary Patch1: 0001-Disable-commands-that-can-alter-the-binary.patch -Patch2: CVE-2025-22869.patch -Patch3: CVE-2024-45339.patch -Patch4: CVE-2025-22872.patch -Patch5: CVE-2025-58181.patch -Patch6: CVE-2025-61727.patch -Patch7: CVE-2025-61729.patch -Patch8: CVE-2025-47913.patch -Patch9: CVE-2025-47914.patch -Patch10: CVE-2025-58190.patch -Patch11: CVE-2025-47911.patch +Patch2: CVE-2025-61727.patch +Patch3: CVE-2025-61729.patch # https://github.com/caddyserver/caddy/commit/2028da4e74cd41f0f7f94222c6599da1a371d4b8 BuildRequires: golang >= 1.25.5 # dario.cat/mergo : BSD-3-Clause @@ -459,6 +451,9 @@ fi %{_datadir}/fish/vendor_completions.d/caddy.fish %changelog +* Fri Mar 20 2026 Shalini Singhal - 2.11.2-1 +- Version upgrade from 2.9.1 to 2.11.2. + * Fri Feb 13 2026 Rajesh Shanmugam - 2.9.1-20 - Add patch for CVE-2025-47911 and CVE-2025-58190 diff --git a/SPECS/cert-manager/CVE-2024-45338.patch b/SPECS/cert-manager/CVE-2024-45338.patch deleted file mode 100644 index ead0b39789..0000000000 --- a/SPECS/cert-manager/CVE-2024-45338.patch +++ /dev/null @@ -1,63 +0,0 @@ -From bda2595d9dbcd7805b5b78466753b9d1849945d2 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Thu, 2 Jan 2025 10:22:12 +0000 -Subject: [PATCH] Fix CVE CVE-2024-45338 in cert-manager - ---- - cmd/ctl/vendor/golang.org/x/net/html/doctype.go | 2 +- - cmd/ctl/vendor/golang.org/x/net/html/foreign.go | 3 +-- - cmd/ctl/vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/cmd/ctl/vendor/golang.org/x/net/html/doctype.go b/cmd/ctl/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/cmd/ctl/vendor/golang.org/x/net/html/doctype.go -+++ b/cmd/ctl/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/cmd/ctl/vendor/golang.org/x/net/html/foreign.go b/cmd/ctl/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/cmd/ctl/vendor/golang.org/x/net/html/foreign.go -+++ b/cmd/ctl/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/cmd/ctl/vendor/golang.org/x/net/html/parse.go b/cmd/ctl/vendor/golang.org/x/net/html/parse.go -index 46a89ed..5b8374b 100644 ---- a/cmd/ctl/vendor/golang.org/x/net/html/parse.go -+++ b/cmd/ctl/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.39.4 - diff --git a/SPECS/cert-manager/CVE-2025-22868.patch b/SPECS/cert-manager/CVE-2025-22868.patch deleted file mode 100644 index 895a0dba84..0000000000 --- a/SPECS/cert-manager/CVE-2025-22868.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 681b4d8edca1bcfea5bce685d77ea7b82ed3e7b3 Mon Sep 17 00:00:00 2001 -From: Neal Patel -Date: Thu, 30 Jan 2025 14:10:09 -0500 -Subject: [PATCH] jws: split token into fixed number of parts - -Thanks to 'jub0bs' for reporting this issue. - -Fixes #71490 -Fixes CVE-2025-22868 - -Change-Id: I2552731f46d4907f29aafe7863c558387b6bd6e2 -Reviewed-on: https://go-review.googlesource.com/c/oauth2/+/652155 -Auto-Submit: Gopher Robot -Reviewed-by: Damien Neil -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI ---- - cmd/controller/vendor/golang.org/x/oauth2/jws/jws.go | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/cmd/controller/vendor/golang.org/x/oauth2/jws/jws.go b/cmd/controller/vendor/golang.org/x/oauth2/jws/jws.go -index 95015648b..6f03a49d3 100644 ---- a/cmd/controller/vendor/golang.org/x/oauth2/jws/jws.go -+++ b/cmd/controller/vendor/golang.org/x/oauth2/jws/jws.go -@@ -165,11 +165,11 @@ func Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error) { - // Verify tests whether the provided JWT token's signature was produced by the private key - // associated with the supplied public key. - func Verify(token string, key *rsa.PublicKey) error { -- parts := strings.Split(token, ".") -- if len(parts) != 3 { -+ if strings.Count(token, ".") != 2 { - return errors.New("jws: invalid token received, token must have 3 parts") - } - -+ parts := strings.SplitN(token, ".", 3) - signedContent := parts[0] + "." + parts[1] - signatureString, err := base64.RawURLEncoding.DecodeString(parts[2]) - if err != nil { diff --git a/SPECS/cert-manager/CVE-2025-22869.patch b/SPECS/cert-manager/CVE-2025-22869.patch deleted file mode 100644 index 738a99080e..0000000000 --- a/SPECS/cert-manager/CVE-2025-22869.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 041b89a18f81265899e42e6801f830c101a96120 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Sun, 2 Mar 2025 13:46:00 +0000 -Subject: [PATCH] CVE-2025-22869 - -Upstream Reference : https://github.com/golang/crypto/commit/7292932d45d55c7199324ab0027cc86e8198aa22 - -ssh: limit the size of the internal packet queue while waiting for KEX - -In the SSH protocol, clients and servers execute the key exchange to -generate one-time session keys used for encryption and authentication. -The key exchange is performed initially after the connection is -established and then periodically after a configurable amount of data. -While a key exchange is in progress, we add the received packets to an -internal queue until we receive SSH_MSG_KEXINIT from the other side. -This can result in high memory usage if the other party is slow to -respond to the SSH_MSG_KEXINIT packet, or memory exhaustion if a -malicious client never responds to an SSH_MSG_KEXINIT packet during a -large file transfer. -We now limit the internal queue to 64 packets: this means 2MB with the -typical 32KB packet size. -When the internal queue is full we block further writes until the -pending key exchange is completed or there is a read or write error. - -Thanks to Yuichi Watanabe for reporting this issue. - -Change-Id: I1ce2214cc16e08b838d4bc346c74c72addafaeec -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/652135 -Reviewed-by: Neal Patel -Auto-Submit: Gopher Robot -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI - ---- - cmd/controller/vendor/golang.org/x/crypto/ssh/handshake.go | 47 ++++++++++++++++----- - 1 file changed, 37 insertions(+), 10 deletions(-) - -diff --git a/cmd/controller/vendor/golang.org/x/crypto/ssh/handshake.go b/cmd/controller/vendor/golang.org/x/crypto/ssh/handshake.go -index 70a7369..e14eb6c 100644 ---- a/cmd/controller/vendor/golang.org/x/crypto/ssh/handshake.go -+++ b/cmd/controller/vendor/golang.org/x/crypto/ssh/handshake.go -@@ -24,6 +24,11 @@ const debugHandshake = false - // quickly. - const chanSize = 16 - -+// maxPendingPackets sets the maximum number of packets to queue while waiting -+// for KEX to complete. This limits the total pending data to maxPendingPackets -+// * maxPacket bytes, which is ~16.8MB. -+const maxPendingPackets = 64 -+ - // keyingTransport is a packet based transport that supports key - // changes. It need not be thread-safe. It should pass through - // msgNewKeys in both directions. -@@ -58,11 +63,19 @@ type handshakeTransport struct { - incoming chan []byte - readError error - -- mu sync.Mutex -- writeError error -- sentInitPacket []byte -- sentInitMsg *kexInitMsg -- pendingPackets [][]byte // Used when a key exchange is in progress. -+ mu sync.Mutex -+ // Condition for the above mutex. It is used to notify a completed key -+ // exchange or a write failure. Writes can wait for this condition while a -+ // key exchange is in progress. -+ writeCond *sync.Cond -+ writeError error -+ sentInitPacket []byte -+ sentInitMsg *kexInitMsg -+ // Used to queue writes when a key exchange is in progress. The length is -+ // limited by pendingPacketsSize. Once full, writes will block until the key -+ // exchange is completed or an error occurs. If not empty, it is emptied -+ // all at once when the key exchange is completed in kexLoop. -+ pendingPackets [][]byte - writePacketsLeft uint32 - writeBytesLeft int64 - -@@ -114,6 +127,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, - - config: config, - } -+ t.writeCond = sync.NewCond(&t.mu) - t.resetReadThresholds() - t.resetWriteThresholds() - -@@ -236,6 +250,7 @@ func (t *handshakeTransport) recordWriteError(err error) { - defer t.mu.Unlock() - if t.writeError == nil && err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - } - -@@ -339,6 +354,8 @@ write: - } - } - t.pendingPackets = t.pendingPackets[:0] -+ // Unblock writePacket if waiting for KEX. -+ t.writeCond.Broadcast() - t.mu.Unlock() - } - -@@ -526,11 +543,20 @@ func (t *handshakeTransport) writePacket(p []byte) error { - } - - if t.sentInitMsg != nil { -- // Copy the packet so the writer can reuse the buffer. -- cp := make([]byte, len(p)) -- copy(cp, p) -- t.pendingPackets = append(t.pendingPackets, cp) -- return nil -+ if len(t.pendingPackets) < maxPendingPackets { -+ // Copy the packet so the writer can reuse the buffer. -+ cp := make([]byte, len(p)) -+ copy(cp, p) -+ t.pendingPackets = append(t.pendingPackets, cp) -+ return nil -+ } -+ for t.sentInitMsg != nil { -+ // Block and wait for KEX to complete or an error. -+ t.writeCond.Wait() -+ if t.writeError != nil { -+ return t.writeError -+ } -+ } - } - - if t.writeBytesLeft > 0 { -@@ -547,6 +573,7 @@ func (t *handshakeTransport) writePacket(p []byte) error { - - if err := t.pushPacket(p); err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - - return nil --- -2.45.2 - diff --git a/SPECS/cert-manager/CVE-2025-22872.patch b/SPECS/cert-manager/CVE-2025-22872.patch deleted file mode 100644 index af3845d83b..0000000000 --- a/SPECS/cert-manager/CVE-2025-22872.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 160cea2aabe42233d5840bcdd246e0232bee0035 Mon Sep 17 00:00:00 2001 -From: Kevin Lockwood -Date: Thu, 8 May 2025 12:53:56 -0700 -Subject: [PATCH] Patch CVE-2025-22872 - -Upstream Patch Reference: https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9.patch ---- - cmd/ctl/vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/cmd/ctl/vendor/golang.org/x/net/html/token.go b/cmd/ctl/vendor/golang.org/x/net/html/token.go -index 3c57880..6598c1f 100644 ---- a/cmd/ctl/vendor/golang.org/x/net/html/token.go -+++ b/cmd/ctl/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.34.1 - diff --git a/SPECS/cert-manager/CVE-2025-27144.patch b/SPECS/cert-manager/CVE-2025-27144.patch deleted file mode 100644 index 89e37594d5..0000000000 --- a/SPECS/cert-manager/CVE-2025-27144.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 46c92791edfab05377ba880024389a356d58ea20 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 09:39:10 +0000 -Subject: [PATCH] CVE-2025-27144 - ---- - cmd/controller/vendor/github.com/go-jose/go-jose/v3/jwe.go | 5 +++-- - cmd/controller/vendor/github.com/go-jose/go-jose/v3/jws.go | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jwe.go b/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jwe.go -index 4267ac7..1ba4ae0 100644 ---- a/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jwe.go -+++ b/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jwe.go -@@ -202,10 +202,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { - - // parseEncryptedCompact parses a message in compact format. - func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64URLDecode(parts[0]) - if err != nil { -diff --git a/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jws.go b/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jws.go -index e37007d..401fc18 100644 ---- a/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jws.go -+++ b/cmd/controller/vendor/github.com/go-jose/go-jose/v3/jws.go -@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { - - // parseSignedCompact parses a message in compact format. - func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/cert-manager/CVE-2025-30204.patch b/SPECS/cert-manager/CVE-2025-30204.patch deleted file mode 100644 index cc389d54b3..0000000000 --- a/SPECS/cert-manager/CVE-2025-30204.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 20e897717946a5bb7750e795c245012bddcfa312 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Mar 2025 21:29:08 +0000 -Subject: [PATCH] CVE-2025-30204 - -Upstream Patch Reference : v4: https://github.com/golang-jwt/jwt/commit/2f0e9add62078527821828c76865661aa7718a84 ---- - github.com/golang-jwt/jwt/v4/parser.go | 36 +++++++++++++++++++++++--- - 1 file changed, 33 insertions(+), 3 deletions(-) - -diff --git a/cmd/controller/vendor/github.com/golang-jwt/jwt/v4/parser.go b/cmd/controller/vendor/github.com/golang-jwt/jwt/v4/parser.go -index 2f61a69..9484f28 100644 ---- a/cmd/controller/vendor/github.com/golang-jwt/jwt/v4/parser.go -+++ b/cmd/controller/vendor/github.com/golang-jwt/jwt/v4/parser.go -@@ -7,6 +7,8 @@ import ( - "strings" - ) - -+const tokenDelimiter = "." -+ - type Parser struct { - // If populated, only these methods will be considered valid. - // -@@ -116,9 +118,10 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - // It's only ever useful in cases where you know the signature is valid (because it has - // been checked previously in the stack) and you want to extract values from it. - func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { -- parts = strings.Split(tokenString, ".") -- if len(parts) != 3 { -- return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) -+ var ok bool -+ parts, ok = splitToken(tokenString) -+ if !ok { -+ return nil, nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - token = &Token{Raw: tokenString} -@@ -168,3 +171,30 @@ func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Toke - - return token, parts, nil - } -+ -+// splitToken splits a token string into three parts: header, claims, and signature. It will only -+// return true if the token contains exactly two delimiters and three parts. In all other cases, it -+// will return nil parts and false. -+func splitToken(token string) ([]string, bool) { -+ parts := make([]string, 3) -+ header, remain, ok := strings.Cut(token, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[0] = header -+ claims, remain, ok := strings.Cut(remain, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[1] = claims -+ // One more cut to ensure the signature is the last part of the token and there are no more -+ // delimiters. This avoids an issue where malicious input could contain additional delimiters -+ // causing unecessary overhead parsing tokens. -+ signature, _, unexpected := strings.Cut(remain, tokenDelimiter) -+ if unexpected { -+ return nil, false -+ } -+ parts[2] = signature -+ -+ return parts, true -+} --- -2.45.2 - diff --git a/SPECS/cert-manager/CVE-2025-32386.patch b/SPECS/cert-manager/CVE-2025-32386.patch deleted file mode 100644 index 9f7253f228..0000000000 --- a/SPECS/cert-manager/CVE-2025-32386.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 8374e59e76c401229470d6f3840cdbbdfa1512a8 Mon Sep 17 00:00:00 2001 -From: Kevin Lockwood -Date: Wed, 21 May 2025 13:29:45 -0700 -Subject: [PATCH] Fix CVE-2025-32387 - -Upstream Link: https://github.com/helm/helm/commit/d8ca55fc669645c10c0681d49723f4bb8c0b1ce7.patch ---- - .../helm/v3/pkg/chart/loader/archive.go | 32 ++++++++++++++++++- - .../helm/v3/pkg/chart/loader/directory.go | 4 +++ - 2 files changed, 35 insertions(+), 1 deletion(-) - -diff --git a/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go b/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go -index 196e5f8..4cb994c 100644 ---- a/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go -+++ b/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/archive.go -@@ -33,6 +33,15 @@ import ( - "helm.sh/helm/v3/pkg/chart" - ) - -+// MaxDecompressedChartSize is the maximum size of a chart archive that will be -+// decompressed. This is the decompressed size of all the files. -+// The default value is 100 MiB. -+var MaxDecompressedChartSize int64 = 100 * 1024 * 1024 // Default 100 MiB -+ -+// MaxDecompressedFileSize is the size of the largest file that Helm will attempt to load. -+// The size of the file is the decompressed version of it when it is stored in an archive. -+var MaxDecompressedFileSize int64 = 5 * 1024 * 1024 // Default 5 MiB -+ - var drivePathPattern = regexp.MustCompile(`^[a-zA-Z]:/`) - - // FileLoader loads a chart from a file -@@ -119,6 +128,7 @@ func LoadArchiveFiles(in io.Reader) ([]*BufferedFile, error) { - - files := []*BufferedFile{} - tr := tar.NewReader(unzipped) -+ remainingSize := MaxDecompressedChartSize - for { - b := bytes.NewBuffer(nil) - hd, err := tr.Next() -@@ -178,10 +188,30 @@ func LoadArchiveFiles(in io.Reader) ([]*BufferedFile, error) { - return nil, errors.New("chart yaml not in base directory") - } - -- if _, err := io.Copy(b, tr); err != nil { -+ if hd.Size > remainingSize { -+ return nil, fmt.Errorf("decompressed chart is larger than the maximum size %d", MaxDecompressedChartSize) -+ } -+ -+ if hd.Size > MaxDecompressedFileSize { -+ return nil, fmt.Errorf("decompressed chart file %q is larger than the maximum file size %d", hd.Name, MaxDecompressedFileSize) -+ } -+ -+ limitedReader := io.LimitReader(tr, remainingSize) -+ -+ bytesWritten, err := io.Copy(b, limitedReader) -+ if err != nil { - return nil, err - } - -+ remainingSize -= bytesWritten -+ // When the bytesWritten are less than the file size it means the limit reader ended -+ // copying early. Here we report that error. This is important if the last file extracted -+ // is the one that goes over the limit. It assumes the Size stored in the tar header -+ // is correct, something many applications do. -+ if bytesWritten < hd.Size || remainingSize <= 0 { -+ return nil, fmt.Errorf("decompressed chart is larger than the maximum size %d", MaxDecompressedChartSize) -+ } -+ - data := bytes.TrimPrefix(b.Bytes(), utf8bom) - - files = append(files, &BufferedFile{Name: n, Data: data}) -diff --git a/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go b/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go -index 9bcbee6..fd8e02e 100644 ---- a/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go -+++ b/cmd/ctl/vendor/helm.sh/helm/v3/pkg/chart/loader/directory.go -@@ -101,6 +101,10 @@ func LoadDir(dir string) (*chart.Chart, error) { - return fmt.Errorf("cannot load irregular file %s as it has file mode type bits set", name) - } - -+ if fi.Size() > MaxDecompressedFileSize { -+ return fmt.Errorf("chart file %q is larger than the maximum file size %d", fi.Name(), MaxDecompressedFileSize) -+ } -+ - data, err := os.ReadFile(name) - if err != nil { - return errors.Wrapf(err, "error reading %s", n) --- -2.34.1 - diff --git a/SPECS/cert-manager/cert-manager.signatures.json b/SPECS/cert-manager/cert-manager.signatures.json deleted file mode 100644 index 01eaffd161..0000000000 --- a/SPECS/cert-manager/cert-manager.signatures.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Signatures": { - "cert-manager-1.12.15.tar.gz": "2c556e4c47753a5cd48510297bc5cab2b0943b7de1b3898df598a0ee969c8e72", - "cert-manager-1.12.15-vendor.tar.gz": "20afae660bffb8a636185aa920c1ada8bd345bae773ebe9e277b490ddc1bad49" - } -} diff --git a/SPECS/cert-manager/cert-manager.spec b/SPECS/cert-manager/cert-manager.spec deleted file mode 100644 index e49571240c..0000000000 --- a/SPECS/cert-manager/cert-manager.spec +++ /dev/null @@ -1,211 +0,0 @@ -Summary: Automatically provision and manage TLS certificates in Kubernetes -Name: cert-manager -Version: 1.12.15 -Release: 5%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -URL: https://github.com/jetstack/cert-manager -Source0: https://github.com/jetstack/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -# Below is a manually created tarball, no download link. -# We're using pre-populated GO dependencies from this tarball, since network is disabled during build time. -# How to re-build this file: -# 1. wget https://github.com/jetstack/%%{name}/archive/refs/tags/v%%{version}.tar.gz -O %%{name}-%%{version}.tar.gz -# 2. /SPECS/cert-manager/generate_source_tarball.sh --srcTarball %%{name}-%%{version}.tar.gz --pkgVersion %%{version} -Source1: %{name}-%{version}-vendor.tar.gz -Patch0: CVE-2024-45338.patch -Patch1: CVE-2025-27144.patch -Patch2: CVE-2025-22868.patch -Patch3: CVE-2025-22869.patch -Patch4: CVE-2025-30204.patch -Patch5: CVE-2025-32386.patch -Patch6: CVE-2025-22872.patch - -BuildRequires: golang -Requires: %{name}-acmesolver -Requires: %{name}-cainjector -Requires: %{name}-cmctl -Requires: %{name}-controller -Requires: %{name}-webhook - -%description -cert-manager is a Kubernetes add-on to automate the management and issuance -of TLS certificates from various issuing sources. - -%package acmesolver -Summary: cert-manager's acmesolver binary - -%description acmesolver -HTTP server used to solve ACME challenges. - -%package cainjector -Summary: cert-manager's cainjector binary - -%description cainjector -cert-manager CA injector is a Kubernetes addon to automate the injection of CA data into -webhooks and APIServices from cert-manager certificates. - -%package controller -Summary: cert-manager's controller binary - -%description controller -cert-manager is a Kubernetes addon to automate the management and issuance of -TLS certificates from various issuing sources. - -%package cmctl -Summary: cert-manager's cmctl binary - -%description cmctl -cmctl is a CLI tool manage and configure cert-manager resources for Kubernetes - -%package webhook -Summary: cert-manager's webhook binary - -%description webhook -Webhook component providing API validation, mutation and conversion functionality for cert-manager. - -%prep -%autosetup -a 1 -p1 - -%build - -LOCAL_BIN_DIR=$(realpath bin) -go -C cmd/acmesolver build -mod=vendor -o "${LOCAL_BIN_DIR}"/acmesolver main.go -go -C cmd/controller build -mod=vendor -o "${LOCAL_BIN_DIR}"/controller main.go -go -C cmd/cainjector build -mod=vendor -o "${LOCAL_BIN_DIR}"/cainjector main.go -go -C cmd/ctl build -mod=vendor -o "${LOCAL_BIN_DIR}"/cmctl main.go -go -C cmd/webhook build -mod=vendor -o "${LOCAL_BIN_DIR}"/webhook main.go - -%install -mkdir -p %{buildroot}%{_bindir} -install -D -m0755 bin/acmesolver %{buildroot}%{_bindir}/ -install -D -m0755 bin/cainjector %{buildroot}%{_bindir}/ -install -D -m0755 bin/controller %{buildroot}%{_bindir}/ -install -D -m0755 bin/cmctl %{buildroot}%{_bindir}/ -install -D -m0755 bin/webhook %{buildroot}%{_bindir}/ -%files - -%files acmesolver -%license LICENSE LICENSES -%doc README.md -%{_bindir}/acmesolver - -%files cainjector -%license LICENSE LICENSES -%doc README.md -%{_bindir}/cainjector - -%files controller -%license LICENSE LICENSES -%doc README.md -%{_bindir}/controller - -%files cmctl -%license LICENSE LICENSES -%doc README.md -%{_bindir}/cmctl - -%files webhook -%license LICENSE LICENSES -%doc README.md -%{_bindir}/webhook - -%changelog -* Mon Sep 8 2025 Lee Chee Yang - 1.12.15-5 -- merge from Azure Linux 3.0.20250910-3.0. -- Patch CVE-2025-32386 (also fixes CVE-2025-32387) -- Patch CVE-2025-22872 - -* Fri Apr 28 2025 Ranjan Dutta - 1.12.15-4 -- merge from Azure Linux 3.0.20250423. -- Patch CVE-2025-30204 - -* Fri Mar 21 2025 Anuj Mittal - 1.12.15-3 -- Bump Release to rebuild - -* Mon Mar 03 2025 Kanishk Bansal - 1.12.15-2 -- Fix CVE-2025-22868, CVE-2025-22869 & CVE-2025-27144 with an upstream patch - -* Mon Jan 27 2025 Rohit Rawat - 1.12.15-1 -- Upgrade to 1.12.15 - to fix CVE-2024-12401 -- Remove CVE-2024-45337.patch as it is fixed in 1.12.15 - -* Tue Dec 31 2024 Rohit Rawat - 1.12.13-3 -- Add patch for CVE-2024-45338 - -* Wed Jan 08 2025 Muhammad Falak - 1.12.13-2 -- Patch CVE-2024-45337 - -* Mon Sep 16 2024 Jiri Appl - 1.12.13-1 -- Upgrade to 1.12.13 which carries helm 3.14.2 to fix CVE-2024-26147 and CVE-2024-25620 - -* Wed Aug 07 2024 Bhagyashri Pathak - 1.12.12-2 -- Patch for CVE-2024-25620 - -* Wed Jul 10 2024 Tobias Brick - 1.12.12-1 -- Upgrade to 1.12.12 to fix CVE-2024-26147 and CVE-2023-45142 - -* Wed May 29 2024 Neha Agarwal - 1.11.2-8 -- Bump release to build with new helm to fix CVE-2024-25620 - -* Wed May 22 2024 Neha Agarwal - 1.11.2-7 -- Bump release to build with new helm to fix CVE-2024-26147 - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.11.2-6 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.11.2-5 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.11.2-4 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.11.2-3 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.11.2-2 -- Bump release to rebuild with go 1.19.10 - -* Mon May 15 2023 Aditya Dubey - 1.11.0-1 -- Upgrade to v1.11.2 -- Removed patch for CVE-2023-25165 -- This version uses helm v3.11.1, which fixes CVE-2023-25165 and thus we do not need the patch file anymore - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.7.3-10 -- Bump release to rebuild with go 1.19.8 - -* Wed Mar 29 2023 CBL-Mariner Servicing Account - 1.7.3-9 -- Add patch for CVE-2023-25165 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.7.3-8 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.7.3-7 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.7.3-6 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.7.3-5 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.7.3-4 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.7.3-3 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 1.7.3-2 -- Bump release to rebuild against Go 1.18.5 - -* Fri Aug 05 2022 Chris Gunn - 1.7.3-1 -- Update to v1.7.3 -- Split binaries into separate packages. - -* Tue Jun 14 2022 Muhammad Falak - 1.5.3-2 -- Add a hard BR on golang <= 1.17.10 -- Bump release to rebuild with golang 1.17.10 - -* Fri Sep 10 2021 Henry Li - 1.5.3-1 -- Original version for CBL-Mariner -- License Verified diff --git a/SPECS/cert-manager/generate_source_tarball.sh b/SPECS/cert-manager/generate_source_tarball.sh deleted file mode 100755 index 993e831002..0000000000 --- a/SPECS/cert-manager/generate_source_tarball.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -# Quit on failure -set -e - -PKG_VERSION="" -SRC_TARBALL="" -OUT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# parameters: -# -# --srcTarball : src tarball file -# this file contains the 'initial' source code of the component -# and should be replaced with the new/modified src code -# --outFolder : folder where to copy the new tarball(s) -# --pkgVersion : package version -# -PARAMS="" -while (( "$#" )); do - case "$1" in - --srcTarball) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - SRC_TARBALL=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - --outFolder) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - OUT_FOLDER=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - --pkgVersion) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - PKG_VERSION=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - -*|--*=) # unsupported flags - echo "Error: Unsupported flag $1" >&2 - exit 1 - ;; - *) # preserve positional arguments - PARAMS="${PARAMS} $1" - shift - ;; - esac -done - -echo "--srcTarball -> ${SRC_TARBALL}" -echo "--outFolder -> ${OUT_FOLDER}" -echo "--pkgVersion -> ${PKG_VERSION}" - -if [ -z "${SRC_TARBALL}" ]; then - echo "--srcTarball parameter cannot be empty" - exit 1 -fi - -SRC_TARBALL=$(realpath "${SRC_TARBALL}") - -if [ -z "${PKG_VERSION}" ]; then - echo "--pkgVersion parameter cannot be empty" - exit 1 -fi - -echo "-- create temp folder" -tmpdir=$(mktemp -d) -function cleanup { - echo "+++ cleanup -> remove ${tmpdir}" - rm -rf ${tmpdir} -} -trap cleanup EXIT - -pushd "${tmpdir}" > /dev/null - -echo "Unpacking source tarball..." -tar -xf "${SRC_TARBALL}" - -cd "cert-manager-${PKG_VERSION}" - -# We need to individually vendor each cmd we will build -vendor_directories=() - -echo "Get vendored modules for each command" -for dir in cmd/*; do - if [ -d "${dir}" ]; then - echo "Vendoring '${dir}'" - pushd "${dir}" > /dev/null - go mod vendor - vendor_directories+=("${dir}/vendor") - popd > /dev/null - fi -done - -echo "Tar vendored modules" -VENDOR_TARBALL="${OUT_FOLDER}/cert-manager-${PKG_VERSION}-vendor.tar.gz" -tar --sort=name \ - --mtime="2021-04-26 00:00Z" \ - --owner=0 --group=0 --numeric-owner \ - --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ - -cf "${VENDOR_TARBALL}" ${vendor_directories[@]} - -popd > /dev/null -echo "cert-manager vendored modules are available at ${VENDOR_TARBALL}" diff --git a/SPECS/cf-cli/CVE-2025-47911.patch b/SPECS/cf-cli/CVE-2025-47911.patch new file mode 100644 index 0000000000..68e2315387 --- /dev/null +++ b/SPECS/cf-cli/CVE-2025-47911.patch @@ -0,0 +1,100 @@ +From b5b92bc4e653d8670c03b4d0179c4ac29340ddb1 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit + +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go +index 04c6bec..12f2273 100644 +--- a/vendor/golang.org/x/net/html/escape.go ++++ b/vendor/golang.org/x/net/html/escape.go +@@ -299,7 +299,7 @@ func escape(w writer, s string) error { + case '\r': + esc = " " + default: +- panic("unrecognized escape character") ++ panic("html: unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 979ef17..4d12a1c 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { + } + + if n.Type == ElementNode { +- p.oe = append(p.oe, n) ++ p.insertOpenElement(n) ++ } ++} ++ ++func (p *parser) insertOpenElement(n *Node) { ++ p.oe = append(p.oe, n) ++ if len(p.oe) > 512 { ++ panic("html: open stack of elements exceeds 512 nodes") + } + } + +@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: +- p.oe = append(p.oe, p.head) ++ p.insertOpenElement(p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: +@@ -2320,9 +2327,13 @@ func (p *parser) parseCurrentToken() { + } + } + +-func (p *parser) parse() error { ++func (p *parser) parse() (err error) { ++ defer func() { ++ if panicErr := recover(); panicErr != nil { ++ err = fmt.Errorf("%s", panicErr) ++ } ++ }() + // Iterate until EOF. Any other error will cause an early return. +- var err error + for err != io.EOF { + // CDATA sections are allowed only in foreign content. + n := p.oe.top() +@@ -2351,6 +2362,8 @@ func (p *parser) parse() error { + // s. Conversely, explicit s in r's data can be silently dropped, + // with no corresponding node in the resulting tree. + // ++// Parse will reject HTML that is nested deeper than 512 elements. ++// + // The input is assumed to be UTF-8 encoded. + func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/cf-cli/CVE-2025-58190.patch b/SPECS/cf-cli/CVE-2025-58190.patch new file mode 100644 index 0000000000..6100b35874 --- /dev/null +++ b/SPECS/cf-cli/CVE-2025-58190.patch @@ -0,0 +1,126 @@ +From f01dfb86be3c18a5a22779a859214884cd77ae04 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec + +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 5b8374b..979ef17 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + return -1 + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) + } + } + switch s { +@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { + return + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) + } + } + } +@@ -1674,7 +1674,7 @@ func inTableBodyIM(p *parser) bool { + return inTableIM(p) + } + +-// Section 12.2.6.4.14. ++// Section 13.2.6.4.14. + func inRowIM(p *parser) bool { + switch p.tok.Type { + case StartTagToken: +@@ -1686,7 +1686,9 @@ func inRowIM(p *parser) bool { + p.im = inCellIM + return true + case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } +@@ -1696,22 +1698,28 @@ func inRowIM(p *parser) bool { + case EndTagToken: + switch p.tok.DataAtom { + case a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return true + } + // Ignore the token. + return true + case a.Table: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } + // Ignore the token. + return true + case a.Tbody, a.Tfoot, a.Thead: +- if p.elementInScope(tableScope, p.tok.DataAtom) { +- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) ++ if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() ++ p.im = inTableBodyIM + return false + } + // Ignore the token. +@@ -2218,16 +2226,20 @@ func parseForeignContent(p *parser) bool { + p.acknowledgeSelfClosingTag() + } + case EndTagToken: ++ if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { ++ p.oe = p.oe[:len(p.oe)-1] ++ return true ++ } + for i := len(p.oe) - 1; i >= 0; i-- { +- if p.oe[i].Namespace == "" { +- return p.im(p) +- } + if strings.EqualFold(p.oe[i].Data, p.tok.Data) { + p.oe = p.oe[:i] ++ return true ++ } ++ if i > 0 && p.oe[i-1].Namespace == "" { + break + } + } +- return true ++ return p.im(p) + default: + // Ignore the token. + } +-- +2.45.4 + diff --git a/SPECS/cf-cli/cf-cli.spec b/SPECS/cf-cli/cf-cli.spec index 1a9dca2739..2ba7ba0633 100644 --- a/SPECS/cf-cli/cf-cli.spec +++ b/SPECS/cf-cli/cf-cli.spec @@ -5,7 +5,7 @@ Summary: The official command line client for Cloud Foundry. Name: cf-cli # Note: Upgrading the package also warrants an upgrade in the CF_BUILD_SHA Version: 8.7.11 -Release: 5%{?dist} +Release: 6%{?dist} License: Apache-2.0 Vendor: Microsoft Corporation Distribution: Azure Linux @@ -36,6 +36,8 @@ Patch0: CVE-2024-45337.patch Patch1: CVE-2024-45338.patch Patch2: CVE-2025-22869.patch Patch3: CVE-2025-22872.patch +Patch4: CVE-2025-47911.patch +Patch5: CVE-2025-58190.patch BuildRequires: golang < 1.25 %global debug_package %{nil} @@ -45,9 +47,7 @@ BuildRequires: golang < 1.25 The official command line client for Cloud Foundry. %prep -%setup -q -n cli-%{version} -tar --no-same-owner -xf %{SOURCE1} -%autopatch -p1 +%autosetup -p1 -n cli-%{version} -a1 %build export GOPATH=%{our_gopath} @@ -64,11 +64,15 @@ install -p -m 755 -t %{buildroot}%{_bindir} ./out/cf %files %defattr(-,root,root) -%license LICENSE -%doc NOTICE README.md +%license LICENSE NOTICE +%doc README.md %{_bindir}/cf %changelog +* Mon Mar 16 2026 Lee Chee Yang - 8.7.11-6 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-47911, CVE-2025-58190 + * Fri Oct 3 2025 Lee Chee Yang - 8.7.11-5 - merge from Azure Linux 3.0.20250910-3.0 - Set BR for golang to < 1.25 diff --git a/SPECS/cni-plugins/CVE-2024-45338.patch b/SPECS/cni-plugins/CVE-2024-45338.patch deleted file mode 100644 index c2fb46031c..0000000000 --- a/SPECS/cni-plugins/CVE-2024-45338.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 8e66b04771e35c4e4125e8c60334b34e2423effb Mon Sep 17 00:00:00 2001 -From: Roland Shoemaker -Date: Wed, 04 Dec 2024 09:35:55 -0800 -Subject: [PATCH] html: use strings.EqualFold instead of lowering ourselves - -Instead of using strings.ToLower and == to check case insensitive -equality, just use strings.EqualFold, even when the strings are only -ASCII. This prevents us unnecessarily lowering extremely long strings, -which can be a somewhat expensive operation, even if we're only -attempting to compare equality with five characters. - -Thanks to Guido Vranken for reporting this issue. - -Fixes golang/go#70906 -Fixes CVE-2024-45338 - -Change-Id: I323b919f912d60dab6a87cadfdcac3e6b54cd128 -Reviewed-on: https://go-review.googlesource.com/c/net/+/637536 -LUCI-TryBot-Result: Go LUCI -Auto-Submit: Gopher Robot -Reviewed-by: Roland Shoemaker -Reviewed-by: Tatiana Bradley ---- - vendor/golang.org/x/net/html/doctype.go | 2 +- - vendor/golang.org/x/net/html/foreign.go | 3 +-- - vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/vendor/golang.org/x/net/html/doctype.go -+++ b/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/vendor/golang.org/x/net/html/foreign.go -+++ b/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 038941d..cb012d8 100644 ---- a/vendor/golang.org/x/net/html/parse.go -+++ b/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.25.1 - diff --git a/SPECS/cni-plugins/CVE-2025-22872.patch b/SPECS/cni-plugins/CVE-2025-22872.patch deleted file mode 100644 index 2d63a81790..0000000000 --- a/SPECS/cni-plugins/CVE-2025-22872.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 1c0308205a333d387cf0ad2ddd9e7bec8d5f21b2 Mon Sep 17 00:00:00 2001 -From: Sreenivasulu Malavathula -Date: Mon, 28 Apr 2025 17:40:01 -0500 -Subject: [PATCH] Address CVE-2025-22872 -Upstream Patch Reference: https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9 - ---- - vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go -index de67f93..9bbdf7d 100644 ---- a/vendor/golang.org/x/net/html/token.go -+++ b/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.2 - diff --git a/SPECS/cni-plugins/cni-plugins.signatures.json b/SPECS/cni-plugins/cni-plugins.signatures.json deleted file mode 100644 index 7d28f002cb..0000000000 --- a/SPECS/cni-plugins/cni-plugins.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "cni-plugins-1.4.0.tar.gz": "890e00a8ffc71c860e4f09ab4e1c452d85ec18cc4ac8ee3da11bbfc113355f5e" - } -} diff --git a/SPECS/cni-plugins/cni-plugins.spec b/SPECS/cni-plugins/cni-plugins.spec deleted file mode 100644 index 69de7da7ff..0000000000 --- a/SPECS/cni-plugins/cni-plugins.spec +++ /dev/null @@ -1,136 +0,0 @@ -Summary: Container Network Interface (CNI) plugins -Name: cni-plugins -Version: 1.4.0 -Release: 4%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Development/Tools -# cni moved to https://github.com/containernetworking/cni/issues/667#issuecomment-491693752 -URL: https://github.com/containernetworking/plugins -#Source0: https://github.com/containernetworking/plugins/archive/v%{version}.tar.gz -Source0: %{name}-%{version}.tar.gz -Patch0: CVE-2024-45338.patch -Patch1: CVE-2025-22872.patch - -%define _default_cni_plugins_dir /opt/cni/bin -BuildRequires: golang >= 1.5 -Provides: kubernetes-cni - -%description -The CNI (Container Network Interface) project consists of a specification and libraries for writing plugins to configure network interfaces in Linux containers, along with a number of supported plugins. - -%prep -%autosetup -p1 -n plugins-%{version} - -%build -./build_linux.sh -ldflags "-X github.com/containernetworking/plugins/pkg/utils/buildversion.BuildVersion=v%{version}" - -%install -install -vdm 755 %{buildroot}%{_default_cni_plugins_dir} -install -vpm 0755 -t %{buildroot}%{_default_cni_plugins_dir} bin/* - -%check -make -k check |& tee %{_specdir}/%{name}-check-log || %{nocheck} - -%post -%postun - -%files -%defattr(-,root,root) -%license LICENSE -%{_default_cni_plugins_dir}/* - -%changelog -* Fri May 30 2025 Ranjan Dutta - 1.4.0-4 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 - -* Fri Mar 21 2025 Anuj Mittal - 1.4.0-3 -- Bump Release to rebuild - -* Thu Jan 23 2024 Kavya Sree Kaitepalli - 1.4.0-2 -- Patch CVE-2024-45338 - -* Mon Feb 12 2024 Betty Lakes - 1.4.0-1 -- Upgrade to version 1.4.0 - -* Wed Oct 18 2023 Mateusz Gozdek - 1.3.0-1 -- Make plugin binaries correctly print version -- Upgrade to version 1.3.0 - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 0.9.1-16 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 0.9.1-15 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 0.9.1-14 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 0.9.1-13 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 0.9.1-12 -- Bump release to rebuild with go 1.19.10 - -* Mon May 22 2023 Betty Lakes - 0.9.1-11 -- Added Provides for kubernetes-cni - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 0.9.1-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 0.9.1-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 0.9.1-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 0.9.1-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 0.9.1-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 0.9.1-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 0.9.1-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 0.9.1-3 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jun 14 2022 Muhammad Falak - 0.9.1-2 -- Bump release to rebuild with golang 1.18.3 - -* Tue Aug 17 2021 Henry Li - 0.8.1-1 -- Rename package name from cni to cni-plugins -- Upgrade to version 0.9.1 - -* Thu Dec 10 2020 Andrew Phelps 0.7.5-5 -- Increment release to force republishing using golang 1.15. - -* Sat May 09 2020 Nick Samson 0.7.5-4 -- Added %%license line automatically - -* Thu Apr 30 2020 Emre Girgin 0.7.5-3 -- Renaming go to golang - -* Tue Mar 07 2020 Paul Monson 0.7.5-3 -- Fix Source0. License verified. - -* Tue Sep 03 2019 Mateusz Malisz 0.7.5-2 -- Initial CBL-Mariner import from Photon (license: Apache2). - -* Tue Apr 02 2019 Ashwin H 0.7.5-1 -- Update cni to v0.7.5 - -* Tue Dec 05 2017 Vinay Kulkarni 0.6.0-1 -- cni v0.6.0. - -* Fri Apr 7 2017 Alexey Makhalov 0.5.1-1 -- Version update - -* Thu Feb 16 2017 Vinay Kulkarni 0.4.0-1 -- Add CNI plugins package to PhotonOS. diff --git a/SPECS/cni/99-loopback.conf b/SPECS/cni/99-loopback.conf deleted file mode 100644 index 9e0b1aba98..0000000000 --- a/SPECS/cni/99-loopback.conf +++ /dev/null @@ -1,4 +0,0 @@ -{ - "cniVersion": "0.4.0", - "type": "loopback" -} diff --git a/SPECS/cni/CVE-2021-38561.patch b/SPECS/cni/CVE-2021-38561.patch deleted file mode 100644 index 135acb405a..0000000000 --- a/SPECS/cni/CVE-2021-38561.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 383b2e75a7a4198c42f8f87833eefb772868a56f Mon Sep 17 00:00:00 2001 -From: Russ Cox -Date: Mon, 9 Aug 2021 15:09:12 -0400 -Subject: [PATCH] language: turn parsing panics into ErrSyntax - -We keep finding new panics in the language parser. -Limit the damage by reporting those inputs as syntax errors. - -Change-Id: I786fe127c3df7e4c8e042d15095d3acf3c4e4a50 -Reviewed-on: https://go-review.googlesource.com/c/text/+/340830 -Trust: Russ Cox -Run-TryBot: Russ Cox -TryBot-Result: Go Bot -Reviewed-by: Roland Shoemaker ---- - internal/language/language.go | 43 +++++++++++++++++++++++++++++++---- - internal/language/parse.go | 7 ++++++ - language/parse.go | 22 ++++++++++++++++++ - 3 files changed, 68 insertions(+), 4 deletions(-) - -diff --git a/vendor/golang.org/x/text/internal/language/language.go b/vendor/golang.org/x/text/internal/language/language.go -index f41aedc..6105bc7 100644 ---- a/vendor/golang.org/x/text/internal/language/language.go -+++ b/vendor/golang.org/x/text/internal/language/language.go -@@ -251,6 +251,13 @@ func (t Tag) Parent() Tag { - - // ParseExtension parses s as an extension and returns it on success. - func ParseExtension(s string) (ext string, err error) { -+ defer func() { -+ if recover() != nil { -+ ext = "" -+ err = ErrSyntax -+ } -+ }() -+ - scan := makeScannerString(s) - var end int - if n := len(scan.token); n != 1 { -@@ -461,7 +468,14 @@ func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) { - // ParseBase parses a 2- or 3-letter ISO 639 code. - // It returns a ValueError if s is a well-formed but unknown language identifier - // or another error if another error occurred. --func ParseBase(s string) (Language, error) { -+func ParseBase(s string) (l Language, err error) { -+ defer func() { -+ if recover() != nil { -+ l = 0 -+ err = ErrSyntax -+ } -+ }() -+ - if n := len(s); n < 2 || 3 < n { - return 0, ErrSyntax - } -@@ -472,7 +486,14 @@ func ParseBase(s string) (Language, error) { - // ParseScript parses a 4-letter ISO 15924 code. - // It returns a ValueError if s is a well-formed but unknown script identifier - // or another error if another error occurred. --func ParseScript(s string) (Script, error) { -+func ParseScript(s string) (scr Script, err error) { -+ defer func() { -+ if recover() != nil { -+ scr = 0 -+ err = ErrSyntax -+ } -+ }() -+ - if len(s) != 4 { - return 0, ErrSyntax - } -@@ -489,7 +510,14 @@ func EncodeM49(r int) (Region, error) { - // ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. - // It returns a ValueError if s is a well-formed but unknown region identifier - // or another error if another error occurred. --func ParseRegion(s string) (Region, error) { -+func ParseRegion(s string) (r Region, err error) { -+ defer func() { -+ if recover() != nil { -+ r = 0 -+ err = ErrSyntax -+ } -+ }() -+ - if n := len(s); n < 2 || 3 < n { - return 0, ErrSyntax - } -@@ -578,7 +606,14 @@ type Variant struct { - - // ParseVariant parses and returns a Variant. An error is returned if s is not - // a valid variant. --func ParseVariant(s string) (Variant, error) { -+func ParseVariant(s string) (v Variant, err error) { -+ defer func() { -+ if recover() != nil { -+ v = Variant{} -+ err = ErrSyntax -+ } -+ }() -+ - s = strings.ToLower(s) - if id, ok := variantIndex[s]; ok { - return Variant{id, s}, nil -diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go -index c696fd0..47ee0fe 100644 ---- a/vendor/golang.org/x/text/internal/language/parse.go -+++ b/vendor/golang.org/x/text/internal/language/parse.go -@@ -232,6 +232,13 @@ func Parse(s string) (t Tag, err error) { - if s == "" { - return Und, ErrSyntax - } -+ defer func() { -+ if recover() != nil { -+ t = Und -+ err = ErrSyntax -+ return -+ } -+ }() - if len(s) <= maxAltTaglen { - b := [maxAltTaglen]byte{} - for i, c := range s { -diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go -index 11acfd8..59b0410 100644 ---- a/vendor/golang.org/x/text/language/parse.go -+++ b/vendor/golang.org/x/text/language/parse.go -@@ -43,6 +43,13 @@ func Parse(s string) (t Tag, err error) { - // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. - // The resulting tag is canonicalized using the canonicalization type c. - func (c CanonType) Parse(s string) (t Tag, err error) { -+ defer func() { -+ if recover() != nil { -+ t = Tag{} -+ err = language.ErrSyntax -+ } -+ }() -+ - tt, err := language.Parse(s) - if err != nil { - return makeTag(tt), err -@@ -79,6 +86,13 @@ func Compose(part ...interface{}) (t Tag, err error) { - // tag is returned after canonicalizing using CanonType c. If one or more errors - // are encountered, one of the errors is returned. - func (c CanonType) Compose(part ...interface{}) (t Tag, err error) { -+ defer func() { -+ if recover() != nil { -+ t = Tag{} -+ err = language.ErrSyntax -+ } -+ }() -+ - var b language.Builder - if err = update(&b, part...); err != nil { - return und, err -@@ -142,6 +156,14 @@ var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") - // Tags with a weight of zero will be dropped. An error will be returned if the - // input could not be parsed. - func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { -+ defer func() { -+ if recover() != nil { -+ tag = nil -+ q = nil -+ err = language.ErrSyntax -+ } -+ }() -+ - var entry string - for s != "" { - if entry, s = split(s, ','); entry == "" { --- -2.34.1 - diff --git a/SPECS/cni/CVE-2022-29526.patch b/SPECS/cni/CVE-2022-29526.patch deleted file mode 100644 index dfba477696..0000000000 --- a/SPECS/cni/CVE-2022-29526.patch +++ /dev/null @@ -1,47 +0,0 @@ -From e13d51dae376f08ea381869af4880ca312111086 Mon Sep 17 00:00:00 2001 -From: Damien Neil -Date: Tue, 12 Apr 2022 13:38:17 -0700 -Subject: [PATCH] [release-branch.go1.17] syscall: check correct group in - Faccessat - -The Faccessat call checks the user, group, or other permission bits of a -file to see if the calling process can access it. The test to see if the -group permissions should be used was made with the wrong group id, using -the process's group id rather than the file's group id. Fix this to use -the correct group id. - -No test since we cannot easily change file permissions when not running -as root and the test is meaningless if running as root. - -For #52313 -Fixes #52439 - -Change-Id: I4e2c84754b0af7830b40fd15dedcbc58374d75ee -Reviewed-on: https://go-review.googlesource.com/c/go/+/399539 -Reviewed-by: Ian Lance Taylor -Run-TryBot: Ian Lance Taylor -TryBot-Result: Gopher Robot -(cherry picked from commit f66925e854e71e0c54b581885380a490d7afa30c) -Reviewed-on: https://go-review.googlesource.com/c/go/+/401078 -Auto-Submit: Tatiana Bradley -Run-TryBot: Tatiana Bradley -Run-TryBot: Damien Neil -Auto-Submit: Damien Neil -Reviewed-by: Tatiana Bradley ---- - vendor/golang.org/x/sys/unix/syscall_linux.go | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/syscall/syscall_linux.go b/src/syscall/syscall_linux.go -index 3041f6f8fceda7..b2cc53e5c0dbe3 100644 ---- a/vendor/golang.org/x/sys/unix/syscall_linux.go -+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go -@@ -106,7 +106,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { - gid = Getgid() - } - -- if uint32(gid) == st.Gid || isGroupMember(gid) { -+ if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { - fmode = (st.Mode >> 3) & 7 - } else { - fmode = st.Mode & 7 diff --git a/SPECS/cni/CVE-2022-32149.patch b/SPECS/cni/CVE-2022-32149.patch deleted file mode 100644 index 7938e0831b..0000000000 --- a/SPECS/cni/CVE-2022-32149.patch +++ /dev/null @@ -1,65 +0,0 @@ -From a47ab91255e04dda4ca0d734afef58216c7479a2 Mon Sep 17 00:00:00 2001 -From: Roland Shoemaker -Date: Fri, 2 Sep 2022 09:35:37 -0700 -Subject: [PATCH] language: reject excessively large Accept-Language strings - -Backported to apply on vendor direcotry by @mfrw - -The BCP 47 tag parser has quadratic time complexity due to inherent -aspects of its design. Since the parser is, by design, exposed to -untrusted user input, this can be leveraged to force a program to -consume significant time parsing Accept-Language headers. - -The parser cannot be easily rewritten to fix this behavior for -various reasons. Instead the solution implemented in this CL is to -limit the total complexity of tags passed into ParseAcceptLanguage -by limiting the number of dashes in the string to 1000. This should -be more than enough for the majority of real world use cases, where -the number of tags being sent is likely to be in the single digits. - -Thanks to the OSS-Fuzz project for discovering this issue and to Adam -Korczynski (ADA Logics) for writing the fuzz case and for reporting the -issue. - -Fixes CVE-2022-32149 -Fixes golang/go#56152 - -Change-Id: I7bda1d84cee2b945039c203f26869d58ee9374ae -Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1565112 -Reviewed-by: Damien Neil -Reviewed-by: Tatiana Bradley -Reviewed-on: https://go-review.googlesource.com/c/text/+/442235 -TryBot-Result: Gopher Robot -Auto-Submit: Roland Shoemaker -Run-TryBot: Roland Shoemaker -Signed-off-by: Muhammad Falak R Wani ---- - vendor/golang.org/x/text/language/parse.go | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go -index 59b0410..b982d9e 100644 ---- a/vendor/golang.org/x/text/language/parse.go -+++ b/vendor/golang.org/x/text/language/parse.go -@@ -147,6 +147,7 @@ func update(b *language.Builder, part ...interface{}) (err error) { - } - - var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") -+var errTagListTooLarge = errors.New("tag list exceeds max length") - - // ParseAcceptLanguage parses the contents of an Accept-Language header as - // defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and -@@ -164,6 +165,10 @@ func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { - } - }() - -+ if strings.Count(s, "-") > 1000 { -+ return nil, nil, errTagListTooLarge -+ } -+ - var entry string - for s != "" { - if entry, s = split(s, ','); entry == "" { --- -2.40.1 - diff --git a/SPECS/cni/CVE-2024-45338.patch b/SPECS/cni/CVE-2024-45338.patch deleted file mode 100644 index c2fb46031c..0000000000 --- a/SPECS/cni/CVE-2024-45338.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 8e66b04771e35c4e4125e8c60334b34e2423effb Mon Sep 17 00:00:00 2001 -From: Roland Shoemaker -Date: Wed, 04 Dec 2024 09:35:55 -0800 -Subject: [PATCH] html: use strings.EqualFold instead of lowering ourselves - -Instead of using strings.ToLower and == to check case insensitive -equality, just use strings.EqualFold, even when the strings are only -ASCII. This prevents us unnecessarily lowering extremely long strings, -which can be a somewhat expensive operation, even if we're only -attempting to compare equality with five characters. - -Thanks to Guido Vranken for reporting this issue. - -Fixes golang/go#70906 -Fixes CVE-2024-45338 - -Change-Id: I323b919f912d60dab6a87cadfdcac3e6b54cd128 -Reviewed-on: https://go-review.googlesource.com/c/net/+/637536 -LUCI-TryBot-Result: Go LUCI -Auto-Submit: Gopher Robot -Reviewed-by: Roland Shoemaker -Reviewed-by: Tatiana Bradley ---- - vendor/golang.org/x/net/html/doctype.go | 2 +- - vendor/golang.org/x/net/html/foreign.go | 3 +-- - vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/vendor/golang.org/x/net/html/doctype.go -+++ b/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/vendor/golang.org/x/net/html/foreign.go -+++ b/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 038941d..cb012d8 100644 ---- a/vendor/golang.org/x/net/html/parse.go -+++ b/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.25.1 - diff --git a/SPECS/cni/build.sh b/SPECS/cni/build.sh deleted file mode 100644 index 024b8d7603..0000000000 --- a/SPECS/cni/build.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash -set -e - -ORG_PATH="github.com/containernetworking" -REPO_PATH="${ORG_PATH}/cni" - -if [ ! -h gopath/src/${REPO_PATH} ]; then - mkdir -p gopath/src/${ORG_PATH} - ln -s ../../../.. gopath/src/${REPO_PATH} || exit 255 -fi - -export GO17VENDOREXPERIMENT=1 -export GOPATH=${PWD}/gopath - -echo "Building API" -go build -mod vendor -v -buildmode=pie "$@" ${REPO_PATH}/libcni - -echo "Building reference CLI" -go build -mod vendor -v -buildmode=pie -o ${PWD}/bin/cnitool "$@" ${REPO_PATH}/cnitool - -echo "Building plugins" -PLUGINS="plugins/test/*" -for d in $PLUGINS; do - if [ -d $d ]; then - plugin=$(basename $d) - echo " " $plugin - go build -mod vendor -v -buildmode=pie -o ${PWD}/bin/$plugin "$@" ${REPO_PATH}/$d - fi -done diff --git a/SPECS/cni/cni.signatures.json b/SPECS/cni/cni.signatures.json deleted file mode 100644 index 78df0b264e..0000000000 --- a/SPECS/cni/cni.signatures.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Signatures": { - "99-loopback.conf": "82e03a3292ca327bcc86af3664a0d7b110cb1c39bca16d3cc703abd49c3c9a1b", - "build.sh": "1fc4529fae5bdf52cf6b9e5eb603c7703046f35e76c6c3a525085c63ef55a7ff", - "cni-1.1.2-vendor.tar.gz": "7a103582845d2a3a8a803f830bb0badf41c2db860a982541aba179f4d5f9ba97", - "cni-1.1.2.tar.gz": "7d4bcaf83acdd54b3dc216f7aa5b5e1b32cb797d9c6af601a2c26b97470ed743" - } -} diff --git a/SPECS/cni/cni.spec b/SPECS/cni/cni.spec deleted file mode 100644 index efc2bf927a..0000000000 --- a/SPECS/cni/cni.spec +++ /dev/null @@ -1,399 +0,0 @@ -# -# spec file for package cni -# -# Copyright (c) 2021 SUSE LLC -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via https://bugs.opensuse.org/ -# - - -%define cni_etc_dir %{_sysconfdir}/cni -%define cni_bin_dir %{_libexecdir}/cni -%define cni_doc_dir %{_docdir}/cni -# Remove stripping of Go binaries. -%define __arch_install_post export NO_BRP_STRIP_DEBUG=true -Summary: Container Network Interface - networking for Linux containers -Name: cni -Version: 1.1.2 -Release: 5%{?dist} -License: Apache-2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: System/Management -URL: https://github.com/containernetworking/cni -#Source0: https://github.com/containernetworking/cni/archive/refs/tags/v%{version}.tar.gz -Source0: %{name}-%{version}.tar.gz -Source1: 99-loopback.conf -Source2: build.sh -# Below is a manually created tarball, no download link. -# We're using pre-populated Go modules from this tarball, since network is disabled during build time. -# How to re-build this file: -# 1. wget https://github.com/containernetworking/cni/archive/refs/tags/v1.0.1.tar.gz -o %%{name}-%%{version}.tar.gz -# 2. tar -xf %%{name}-%%{version}.tar.gz -# 3. cd %%{name}-%%{version} -# 4. go mod vendor -# 5. tar --sort=name \ -# --mtime="2021-04-26 00:00Z" \ -# --owner=0 --group=0 --numeric-owner \ -# --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ -# -cf %%{name}-%%{version}-vendor.tar.gz vendor -# -Source3: %{name}-%{version}-vendor.tar.gz -Patch0: CVE-2021-38561.patch -Patch1: CVE-2022-32149.patch -Patch2: CVE-2024-45338.patch -Patch3: CVE-2022-29526.patch -BuildRequires: golang -BuildRequires: systemd-rpm-macros -BuildRequires: xz -Requires: systemd -Requires(post): %fillup_prereq -Recommends: cni-plugins - -%description -The CNI (Container Network Interface) project consists of a -specification and libraries for writing plugins to configure -network interfaces in Linux containers, along with a number of -supported plugins. CNI concerns itself only with network -connectivity of containers and removing allocated resources when -the container is deleted. Because of this focus, CNI has a wide -range of support and the specification is simple to implement. - -%prep -%autosetup -N -cp %{SOURCE2} build.sh -# create vendor folder from the vendor tarball and set vendor mode -tar -xf %{SOURCE3} --no-same-owner -%autopatch -p1 - -%build -# go1.16+ default is GO111MODULE=on set to auto temporarily -# until using upstream release with go.mod -export GO111MODULE=auto -sh ./build.sh - -%install - -# install the plugins -install -m 755 -d "%{buildroot}%{cni_bin_dir}" -cp bin/noop "%{buildroot}%{cni_bin_dir}/" -cp bin/sleep "%{buildroot}%{cni_bin_dir}/" - -# undo a copy: cnitool must go to sbin/ -install -m 755 -d "%{buildroot}%{_sbindir}" -cp bin/cnitool "%{buildroot}%{_sbindir}/" - -# config -install -m 755 -d "%{buildroot}%{cni_etc_dir}" -install -m 755 -d "%{buildroot}%{cni_etc_dir}/net.d" -install -D -p -m 0644 %{SOURCE1} %{buildroot}%{cni_etc_dir}/net.d/99-loopback.conf.sample - -# documentation -install -m 755 -d "%{buildroot}%{cni_doc_dir}" - -%post -%{fillup_only -n %{name}} - -%files -%defattr(-,root,root) -%doc CONTRIBUTING.md README.md DCO -%license LICENSE -%dir %{cni_etc_dir} -%dir %{cni_etc_dir}/net.d -%config %{cni_etc_dir}/net.d/* -%dir %{cni_bin_dir} -%dir %{cni_doc_dir} -%{cni_bin_dir}/* -%{cni_etc_dir}/net.d/* -%{_sbindir}/cnitool - -%changelog -* Fri Mar 21 2025 Anuj Mittal - 1.1.2-5 -- Bump Release to rebuild - -* Thu Jan 23 2025 Kavya Sree Kaitepalli - 1.1.2-4 -- Patch CVE-2024-45338 and CVE-2022-29526 - -* Fri Sep 06 2024 Muhammad Falak R Wani - 1.1.2-3 -- Patch CVE-2022-32149 - -* Tue Jul 02 2024 Osama Esmail - 1.1.2-2 -- Patching CVE-2021-38561 - -* Fri Oct 27 2023 CBL-Mariner Servicing Account - 1.1.2-1 -- Auto-upgrade to 1.1.2 - Azure Linux 3.0 - package upgrades - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.0.1-15 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.0.1-14 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.0.1-13 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.0.1-12 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.0.1-11 -- Bump release to rebuild with go 1.19.10 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.0.1-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.0.1-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.0.1-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.0.1-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.0.1-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.0.1-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.0.1-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 1.0.1-3 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jun 14 2022 Muhammad Falak - 1.0.1-2 -- Bump release to rebuild with golang 1.18.3 - -* Wed Feb 09 2022 Henry Li - 1.0.1-1 -- Upgrade to version 1.0.1 -- Add vendor source, which is required to build -- Modify build.sh to build using vendor source - -* Tue Aug 17 2021 Henry Li - 0.8.1-2 -- Initial CBL-Mariner import from openSUSE Tumbleweed (license: same as "License" tag). -- License Verified -- Remove shadow from BR -- Use systemd and fillup from runtime requirements -- Manually define fillup-related macros -- Remove buildroot definition - -* Mon May 31 2021 John Paul Adrian Glaubitz -- Update to version 0.8.1: - * This is a security release that fixes a single bug: - - Tighten up plugin-finding logic (#811). - -* Sat Apr 24 2021 Dirk Müller -- use buildmode=pie (cnitool is installed into sbindir) - -* Tue Mar 16 2021 Jeff Kowalczyk -- Set GO111MODULE=auto to build with go1.16+ - * Default changed to GO111MODULE=on in go1.16 - * Set temporarily until using upstream release with go.mod - * Drop BuildRequires: golang-packaging not currently using macros - * Add BuildRequires: golang(API) >= 1.13 recommended dependency expression - -* Thu Oct 1 2020 John Paul Adrian Glaubitz -- Update to version 0.8.0: - * Specification and Conventions changes - + docs: add ips and mac to well-known capabilities - + add interface name validation - + Add GUID to well known Capabilities - + Add DeviceID attribute to RuntimeConfig - + Typo fixes for infiniband GUID - + Fix linting issues in docs, add headers to json example, update errors into table - * Documentation changes - + Update cnitool docs - + Remove extra ',' chars which makes conflist examples invalid. - * libcni changes - + Remove Result.String method - + libcni: add config caching [v2] - + clean up : fix staticcheck warnings - + libcni: add InitCNIConfigWithCacheDir() and deprecate RuntimeConfig.CacheDir - + skel: clean up errors in skel and add some well-known error codes - + libcni: find plugin in exec - + validate containerID and networkName - + skel: remove needless functions and types - + libcni: also cache IfName - + libcni: fix cache file 'result' key name - + Bump Go version to 1.13 - + When CNI version isn't supplied in config, use default. - + intercept netplugin std error - + invoke: capture and return stderr if plugin exits unexpectedly - + Retry exec commands on text file busy - -* Mon Jan 13 2020 Sascha Grunert -- Set correct CNI version for 99-loopback.conf - -* Tue Jul 16 2019 John Paul Adrian Glaubitz -- Update to version 0.7.1 (bsc#1160460): - * Library changes: - + invoke : ensure custom envs of CNIArgs are prepended to process envs - + add GetNetworkListCachedResult to CNI interface - + delegate : allow delegation funcs override CNI_COMMAND env automatically in heritance - * Documentation & Convention changes: - + Update cnitool documentation for spec v0.4.0 - + Add cni-route-override to CNI plugin list - * Build and test changes: - + Release: 5%{?dist} - -* Fri May 17 2019 John Paul Adrian Glaubitz -- Update to version 0.7.0: - * Spec changes: - + Use more RFC2119 style language in specification (must, should...) - + add notes about ADD/DEL ordering - + Make the container ID required and unique. - + remove the version parameter from ADD and DEL commands. - + Network interface name matters - + be explicit about optional and required structure members - + add CHECK method - + Add a well-known error for "try again" - + SPEC.md: clarify meaning of 'routes' - * Library changes: - + pkg/types: Makes IPAM concrete type - + libcni: return error if Type is empty - + skel: VERSION shouldn't block on stdin - + non-pointer instances of types.Route now correctly marshal to JSON - + libcni: add ValidateNetwork and ValidateNetworkList functions - + pkg/skel: return error if JSON config has no network name - + skel: add support for plugin version string - + libcni: make exec handling an interface for better downstream testing - + libcni: api now takes a Context to allow operations to be timed out or cancelled - + types/version: add helper to parse PrevResult - + skel: only print about message, not errors - + skel,invoke,libcni: implementation of CHECK method - + cnitool: Honor interface name supplied via CNI_IFNAME environment variable. - + cnitool: validate correct number of args - + Don't copy gw from IP4.Gateway to Route.GW When converting from 0.2.0 - + add PrintTo method to Result interface - + Return a better error when the plugin returns none -- Install sleep binary into CNI plugin directory -- Restore build.sh script which was removed upstream - -* Tue Jun 5 2018 dcassany@suse.com -- Refactor %%license usage to a simpler form - -* Mon Jun 4 2018 dcassany@suse.com -- Make use of %%license macro - -* Wed Apr 4 2018 jmassaguerpla@suse.com -- Remove creating subvolumes. This should be in another package (kubernetes-kubelet) - -* Mon Jan 29 2018 kmacinnes@suse.com -- Use full/absolute path for mksubvolume -- Change snapper Requires to a Requires(post) - -* Thu Jan 18 2018 kmacinnes@suse.com -- Add snapper as a requirement, to provide mksubvolume - -* Mon Jan 15 2018 alvaro.saurin@suse.com -- Make /var/lib/cni writable - -* Tue Dec 19 2017 alvaro.saurin@suse.com -- Remove the dependency with the cni-plugins -- Recommend the cni-plugins - -* Mon Aug 28 2017 opensuse-packaging@opensuse.org -- Update to version 0.6.0: - * Conventions: add convention around chaining interfaces - * pkg/types: safer typecasting for TextUnmarshaler when loading args - * pkg/types: modify LoadArgs to return a named error when an unmarshalable condition is detected - * Update note about next Community Sync, 2017-06-21 - * types: fix marshalling of omitted "interfaces" key in IPConfig JSON - * Update and document release process - * scripts/release.sh: Add in s390x architecture - * cnitool: add support for CNI_ARGS - * README plugins list: add Linen CNI plugin - -* Mon Apr 10 2017 opensuse-packaging@opensuse.org -- Update to version 0.5.2: - * Rename build script to avoid conflict with bazel - * Enable s390x build - * Update community sync detail - * Added entry for CNI-Genie - * travis: shift forward to Go 1.8 and 1.7 - * spec/plugins: fix 'ip'->'ips' in the spec, bump to 0.3.1 - * libcni: Improved error messages. - * libcni: Fixed tests that were checking error strings. - * Documentation: Added documentation for `cnitool`. - -* Thu Mar 23 2017 opensuse-packaging@opensuse.org -- Update to version 0.5.1: - * readme.md: Add link to community sync - * pkg/ip: do not leak types from vendored netlink package - * pkg/ip: SetupVeth returns net.Interface - * pkg/ip: improve docstring for SetupVeth - * Added Romana to list of CNI providers... - * plugins/meta/flannel: If net config is missing do not return err on DEL - * plugins/*: Don't error if the device doesn't exist - -* Wed Mar 22 2017 alvaro.saurin@suse.com -- Update to version 0.5.0: - * Documentation: Add conventions doc - * noop: allow specifying debug file in config JSON - * Spec/Conventions: Update to include plugin config - * spec: add network configuration list specification - * api,libcni: add network config list-based plugin chaining - * Update CONVENTIONS.md - * skel: adds PluginMainWithError which returns a *types.Error - * testutils: pass netConf in for version operations; pass raw result out for tests - * types: make Result an interface and move existing Result to separate package - * macvlan/ipvlan: use common RenameLink method - * plugins/flannel: organize test JSON alphabetically - * pkg/ipam: add testcases - * spec/plugins: return interface details and multiple IP addresses to runtime - * spec, libcni, pkg/invoke: Use OS-agnostic separator when parsing CNI_PATH - * pkg/utils/sysctl/sysctl_linux.go: fix build tag. - * pkg/utils/sysctl/sysctl_linux.go: fix typo. - * invoke: Enable plugin file names with extensions - * CONVENTIONS.md: Update details on port-mappings - * Update with feedback - * More markups - * spec: Remove `routes` from Network Configuration - * docs: consolidate host-local documentation - * pkg/ns: refactored so that builds succeed on non-linux platforms - * Fix grammar - * plugins/main/ptp: set the Sandbox property on the response - * README: List multus as 3rd party plugin - * Replace Michael Bridgen with Bryan Boreham - * pkg/ns, pkg/types: refactored non linux build fix code to - * pkg/ip: refactored so that builds succeed on non-linux platforms - * vendor: Update vishvanana/netlink dependency - * libcni: up-convert a Config to a ConfigList when no other configs are found. - * docs: CNI versioning for 0.3.0 upgrade - * docs: Edits to v0.3.0 upgrade guidance - * docs: minor improvements to 0.3.0 upgrade guidance - * docs: add small upgrade instructions - * docs: minor improvements to spec-upgrades - * docs: fill-out and correct version conversion table - * docs: table formatting is hard - * pkg/testutils: return errors after restoring stdout - * pkg/types: misc current types testcase cleanups - * Minor rewording about default config version - * spec,libcni: add support for injecting runtimeConfig into plugin stdin data - * Check n.IPAM before use it in LoadIPAMConfig function - * do not error if last_reserved_ip is missing for host local ipam - * add test for ensuring initial subnet creation does not contain an error - * fix unrelated failing tests - -* Wed Mar 1 2017 opensuse-packaging@opensuse.org -- Update to version 0.4.0: - * plugins/noop: return a helpful message for test authors - * host-local: trim whitespace from container IDs and disk file contents - * travis: roll forward the versions of Go that we test - * MAINTAINERS: hi CaseyC! - * ipam/host-local: Move allocator and config to backend - * ipam/host-local: add ResolvConf argument for DNS configuration - * spec: notice of version - -* Thu Feb 23 2017 alvaro.saurin@suse.com -- Initial version diff --git a/SPECS/containerd2/CVE-2024-25621.patch b/SPECS/containerd2/CVE-2024-25621.patch new file mode 100644 index 0000000000..d07a78a129 --- /dev/null +++ b/SPECS/containerd2/CVE-2024-25621.patch @@ -0,0 +1,111 @@ +From 46223b256bfb3f42e193d947d1b1ef551260749f Mon Sep 17 00:00:00 2001 +From: Akihiro Suda +Date: Mon, 27 Oct 2025 16:42:59 +0900 +Subject: [PATCH] Fix directory permissions + +- Create /var/lib/containerd with 0o700 (was: 0o711). +- Create config.TempDir with 0o700 (was: 0o711). +- Create /run/containerd/io.containerd.grpc.v1.cri with 0o700 (was: 0o755). +- Create /run/containerd/io.containerd.sandbox.controller.v1.shim with 0o700 (was: 0o711). +- Leave /run/containerd and /run/containerd/io.containerd.runtime.v2.task created with 0o711, + as required by userns-remapped containers. + /run/containerd/io.containerd.runtime.v2.task// is created with: + - 0o700 for non-userns-remapped containers + - 0o710 for userns-remapped containers with the remapped root group as the owner group. + +Signed-off-by: Akihiro Suda +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/containerd/containerd/commit/7c59e8e9e970d38061a77b586b23655c352bfec5.patch +--- + cmd/containerd/server/server.go | 14 ++++++++++++-- + core/runtime/v2/task_manager.go | 2 ++ + plugins/cri/runtime/plugin.go | 7 +++++++ + plugins/sandbox/controller.go | 6 +++++- + 4 files changed, 26 insertions(+), 3 deletions(-) + +diff --git a/cmd/containerd/server/server.go b/cmd/containerd/server/server.go +index 9f38cb3..c9e3698 100644 +--- a/cmd/containerd/server/server.go ++++ b/cmd/containerd/server/server.go +@@ -81,10 +81,16 @@ func CreateTopLevelDirectories(config *srvconfig.Config) error { + return errors.New("root and state must be different paths") + } + +- if err := sys.MkdirAllWithACL(config.Root, 0o711); err != nil { ++ if err := sys.MkdirAllWithACL(config.Root, 0o700); err != nil { ++ return err ++ } ++ // chmod is needed for upgrading from an older release that created the dir with 0o711 ++ if err := os.Chmod(config.Root, 0o700); err != nil { + return err + } + ++ // For supporting userns-remapped containers, the state dir cannot be just mkdired with 0o700. ++ // Each of plugins creates a dedicated directory beneath the state dir with appropriate permission bits. + if err := sys.MkdirAllWithACL(config.State, 0o711); err != nil { + return err + } +@@ -99,7 +105,11 @@ func CreateTopLevelDirectories(config *srvconfig.Config) error { + } + + if config.TempDir != "" { +- if err := sys.MkdirAllWithACL(config.TempDir, 0o711); err != nil { ++ if err := sys.MkdirAllWithACL(config.TempDir, 0o700); err != nil { ++ return err ++ } ++ // chmod is needed for upgrading from an older release that created the dir with 0o711 ++ if err := os.Chmod(config.Root, 0o700); err != nil { + return err + } + if runtime.GOOS == "windows" { +diff --git a/core/runtime/v2/task_manager.go b/core/runtime/v2/task_manager.go +index f396ced..024763a 100644 +--- a/core/runtime/v2/task_manager.go ++++ b/core/runtime/v2/task_manager.go +@@ -74,6 +74,8 @@ func init() { + shimManager := shimManagerI.(*ShimManager) + root, state := ic.Properties[plugins.PropertyRootDir], ic.Properties[plugins.PropertyStateDir] + for _, d := range []string{root, state} { ++ // root: the parent of this directory is created as 0o700, not 0o711. ++ // state: the parent of this directory is created as 0o711 too, so as to support userns-remapped containers. + if err := os.MkdirAll(d, 0711); err != nil { + return nil, err + } +diff --git a/plugins/cri/runtime/plugin.go b/plugins/cri/runtime/plugin.go +index adc64d9..07f64a1 100644 +--- a/plugins/cri/runtime/plugin.go ++++ b/plugins/cri/runtime/plugin.go +@@ -91,6 +91,13 @@ func initCRIRuntime(ic *plugin.InitContext) (interface{}, error) { + rootDir := filepath.Join(containerdRootDir, "io.containerd.grpc.v1.cri") + containerdStateDir := filepath.Dir(ic.Properties[plugins.PropertyStateDir]) + stateDir := filepath.Join(containerdStateDir, "io.containerd.grpc.v1.cri") ++ if err := os.MkdirAll(stateDir, 0o700); err != nil { ++ return nil, err ++ } ++ // chmod is needed for upgrading from an older release that created the dir with 0o755 ++ if err := os.Chmod(stateDir, 0o700); err != nil { ++ return nil, err ++ } + c := criconfig.Config{ + RuntimeConfig: *pluginConfig, + ContainerdRootDir: containerdRootDir, +diff --git a/plugins/sandbox/controller.go b/plugins/sandbox/controller.go +index aec9cc3..165f2e8 100644 +--- a/plugins/sandbox/controller.go ++++ b/plugins/sandbox/controller.go +@@ -68,7 +68,11 @@ func init() { + state := ic.Properties[plugins.PropertyStateDir] + root := ic.Properties[plugins.PropertyRootDir] + for _, d := range []string{root, state} { +- if err := os.MkdirAll(d, 0711); err != nil { ++ if err := os.MkdirAll(d, 0700); err != nil { ++ return nil, err ++ } ++ // chmod is needed for upgrading from an older release that created the dir with 0o711 ++ if err := os.Chmod(d, 0o700); err != nil { + return nil, err + } + } +-- +2.45.4 + diff --git a/SPECS/containerd2/CVE-2025-47911.patch b/SPECS/containerd2/CVE-2025-47911.patch new file mode 100644 index 0000000000..2df8cafa55 --- /dev/null +++ b/SPECS/containerd2/CVE-2025-47911.patch @@ -0,0 +1,100 @@ +From 532532d877df8bbee095441886578acaf619132c Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit + +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go +index 04c6bec..12f2273 100644 +--- a/vendor/golang.org/x/net/html/escape.go ++++ b/vendor/golang.org/x/net/html/escape.go +@@ -299,7 +299,7 @@ func escape(w writer, s string) error { + case '\r': + esc = " " + default: +- panic("unrecognized escape character") ++ panic("html: unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 979ef17..4d12a1c 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { + } + + if n.Type == ElementNode { +- p.oe = append(p.oe, n) ++ p.insertOpenElement(n) ++ } ++} ++ ++func (p *parser) insertOpenElement(n *Node) { ++ p.oe = append(p.oe, n) ++ if len(p.oe) > 512 { ++ panic("html: open stack of elements exceeds 512 nodes") + } + } + +@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: +- p.oe = append(p.oe, p.head) ++ p.insertOpenElement(p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: +@@ -2320,9 +2327,13 @@ func (p *parser) parseCurrentToken() { + } + } + +-func (p *parser) parse() error { ++func (p *parser) parse() (err error) { ++ defer func() { ++ if panicErr := recover(); panicErr != nil { ++ err = fmt.Errorf("%s", panicErr) ++ } ++ }() + // Iterate until EOF. Any other error will cause an early return. +- var err error + for err != io.EOF { + // CDATA sections are allowed only in foreign content. + n := p.oe.top() +@@ -2351,6 +2362,8 @@ func (p *parser) parse() error { + // s. Conversely, explicit s in r's data can be silently dropped, + // with no corresponding node in the resulting tree. + // ++// Parse will reject HTML that is nested deeper than 512 elements. ++// + // The input is assumed to be UTF-8 encoded. + func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/containerd2/CVE-2025-58190.patch b/SPECS/containerd2/CVE-2025-58190.patch new file mode 100644 index 0000000000..89b2b84a02 --- /dev/null +++ b/SPECS/containerd2/CVE-2025-58190.patch @@ -0,0 +1,126 @@ +From 582919df8cf0643cd434da7421238628ad5b4cb6 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec + +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 5b8374b..979ef17 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + return -1 + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) + } + } + switch s { +@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { + return + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) + } + } + } +@@ -1674,7 +1674,7 @@ func inTableBodyIM(p *parser) bool { + return inTableIM(p) + } + +-// Section 12.2.6.4.14. ++// Section 13.2.6.4.14. + func inRowIM(p *parser) bool { + switch p.tok.Type { + case StartTagToken: +@@ -1686,7 +1686,9 @@ func inRowIM(p *parser) bool { + p.im = inCellIM + return true + case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } +@@ -1696,22 +1698,28 @@ func inRowIM(p *parser) bool { + case EndTagToken: + switch p.tok.DataAtom { + case a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return true + } + // Ignore the token. + return true + case a.Table: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } + // Ignore the token. + return true + case a.Tbody, a.Tfoot, a.Thead: +- if p.elementInScope(tableScope, p.tok.DataAtom) { +- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) ++ if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() ++ p.im = inTableBodyIM + return false + } + // Ignore the token. +@@ -2218,16 +2226,20 @@ func parseForeignContent(p *parser) bool { + p.acknowledgeSelfClosingTag() + } + case EndTagToken: ++ if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { ++ p.oe = p.oe[:len(p.oe)-1] ++ return true ++ } + for i := len(p.oe) - 1; i >= 0; i-- { +- if p.oe[i].Namespace == "" { +- return p.im(p) +- } + if strings.EqualFold(p.oe[i].Data, p.tok.Data) { + p.oe = p.oe[:i] ++ return true ++ } ++ if i > 0 && p.oe[i-1].Namespace == "" { + break + } + } +- return true ++ return p.im(p) + default: + // Ignore the token. + } +-- +2.45.4 + diff --git a/SPECS/containerd2/CVE-2025-64329.patch b/SPECS/containerd2/CVE-2025-64329.patch new file mode 100644 index 0000000000..b742c82c32 --- /dev/null +++ b/SPECS/containerd2/CVE-2025-64329.patch @@ -0,0 +1,73 @@ +From b9beeef78a6fd90ece5801780c45f550caf71b3d Mon Sep 17 00:00:00 2001 +From: wheat2018 <1151937289@qq.com> +Date: Tue, 13 Aug 2024 15:56:31 +0800 +Subject: [PATCH] fix goroutine leak of container Attach + +The monitor goroutine (runs (*ContainerIO).Attach.func1) of Attach will +never finish if it attaches to a container without any stdout or stderr +output. Wait for http context cancel and break the pipe actively to +address the issue. + +Signed-off-by: wheat2018 <1151937289@qq.com> +Signed-off-by: Akihiro Suda +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/containerd/containerd/commit/083b53cd6f19b5de7717b0ce92c11bdf95e612df.patch +--- + internal/cri/io/container_io.go | 14 +++++++++++--- + internal/cri/server/container_attach.go | 2 +- + 2 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/internal/cri/io/container_io.go b/internal/cri/io/container_io.go +index 9fc5545..194634e 100644 +--- a/internal/cri/io/container_io.go ++++ b/internal/cri/io/container_io.go +@@ -17,6 +17,7 @@ + package io + + import ( ++ "context" + "errors" + "fmt" + "io" +@@ -160,7 +161,7 @@ func (c *ContainerIO) Pipe() { + + // Attach attaches container stdio. + // TODO(random-liu): Use pools.Copy in docker to reduce memory usage? +-func (c *ContainerIO) Attach(opts AttachOptions) { ++func (c *ContainerIO) Attach(ctx context.Context, opts AttachOptions) { + var wg sync.WaitGroup + key := util.GenerateID() + stdinKey := streamKey(c.id, "attach-"+key, Stdin) +@@ -201,8 +202,15 @@ func (c *ContainerIO) Attach(opts AttachOptions) { + } + + attachStream := func(key string, close <-chan struct{}) { +- <-close +- log.L.Infof("Attach stream %q closed", key) ++ select { ++ case <-close: ++ log.L.Infof("Attach stream %q closed", key) ++ case <-ctx.Done(): ++ log.L.Infof("Attach client of %q cancelled", key) ++ // Avoid writeGroup heap up ++ c.stdoutGroup.Remove(key) ++ c.stderrGroup.Remove(key) ++ } + // Make sure stdin gets closed. + if stdinStreamRC != nil { + stdinStreamRC.Close() +diff --git a/internal/cri/server/container_attach.go b/internal/cri/server/container_attach.go +index 0147859..f4c3322 100644 +--- a/internal/cri/server/container_attach.go ++++ b/internal/cri/server/container_attach.go +@@ -82,6 +82,6 @@ func (c *criService) attachContainer(ctx context.Context, id string, stdin io.Re + }, + } + // TODO(random-liu): Figure out whether we need to support historical output. +- cntr.IO.Attach(opts) ++ cntr.IO.Attach(ctx, opts) + return nil + } +-- +2.45.4 + diff --git a/SPECS/containerd2/containerd2.spec b/SPECS/containerd2/containerd2.spec index 6fe25c1a33..c67bff5732 100644 --- a/SPECS/containerd2/containerd2.spec +++ b/SPECS/containerd2/containerd2.spec @@ -5,7 +5,7 @@ Summary: Industry-standard container runtime Name: %{upstream_name}2 Version: 2.0.0 -Release: 14%{?dist} +Release: 18%{?dist} License: ASL 2.0 Group: Tools/Container URL: https://www.containerd.io @@ -23,6 +23,11 @@ Patch3: CVE-2025-22872.patch Patch4: CVE-2025-47291.patch Patch5: multi-snapshotters-support.patch Patch6: tardev-support.patch +Patch7: CVE-2024-25621.patch +Patch8: CVE-2025-64329.patch +Patch9: fix-credential-leak-in-cri-errors.patch +Patch10:CVE-2025-47911.patch +Patch11:CVE-2025-58190.patch %{?systemd_requires} BuildRequires: golang < 1.25 @@ -132,6 +137,13 @@ fi %{_bindir}/containerd-stress %changelog +* Thu Mar 12 2026 Lee Chee Yang - 2.0.0-18 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-64329 +- Patch for CVE-2024-25621 +- Backport fix for credential leak in CRI error logs +- Patch for CVE-2025-58190, CVE-2025-47911 + * Fri Oct 3 2025 Lee Chee Yang - 2.0.0-14 - merge from Azure Linux 3.0.20250910-3.0 - Set BR for golang to < 1.25 diff --git a/SPECS/containerd2/fix-credential-leak-in-cri-errors.patch b/SPECS/containerd2/fix-credential-leak-in-cri-errors.patch new file mode 100644 index 0000000000..909c179c25 --- /dev/null +++ b/SPECS/containerd2/fix-credential-leak-in-cri-errors.patch @@ -0,0 +1,401 @@ +From a34e45d0fa2a7ddefff1a0871c9bf9e3c62bda17 Mon Sep 17 00:00:00 2001 +From: Andrey Noskov +Date: Thu, 6 Nov 2025 13:34:38 +0100 +Subject: [PATCH 1/2] fix: redact all query parameters in CRI error logs + +Signed-off-by: Andrey Noskov +--- + .../cri/instrument/instrumented_service.go | 8 ++ + internal/cri/util/sanitize.go | 93 +++++++++++++ + internal/cri/util/sanitize_test.go | 128 ++++++++++++++++++ + 3 files changed, 229 insertions(+) + create mode 100644 internal/cri/util/sanitize.go + create mode 100644 internal/cri/util/sanitize_test.go + +diff --git a/internal/cri/instrument/instrumented_service.go b/internal/cri/instrument/instrumented_service.go +index c2f5c8de99..f06315a6bd 100644 +--- a/internal/cri/instrument/instrumented_service.go ++++ b/internal/cri/instrument/instrumented_service.go +@@ -351,6 +351,8 @@ func (in *instrumentedService) PullImage(ctx context.Context, r *runtime.PullIma + log.G(ctx).Infof("PullImage %q", r.GetImage().GetImage()) + defer func() { + if err != nil { ++ // Sanitize error to remove sensitive information ++ err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("PullImage %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Infof("PullImage %q returns image reference %q", +@@ -369,6 +371,8 @@ func (in *instrumentedService) ListImages(ctx context.Context, r *runtime.ListIm + log.G(ctx).Tracef("ListImages with filter %+v", r.GetFilter()) + defer func() { + if err != nil { ++ // Sanitize error to remove sensitive information ++ err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("ListImages with filter %+v failed", r.GetFilter()) + } else { + log.G(ctx).Tracef("ListImages with filter %+v returns image list %+v", +@@ -386,6 +390,8 @@ func (in *instrumentedService) ImageStatus(ctx context.Context, r *runtime.Image + log.G(ctx).Tracef("ImageStatus for %q", r.GetImage().GetImage()) + defer func() { + if err != nil { ++ // Sanitize error to remove sensitive information ++ err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("ImageStatus for %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Tracef("ImageStatus for %q returns image status %+v", +@@ -404,6 +410,8 @@ func (in *instrumentedService) RemoveImage(ctx context.Context, r *runtime.Remov + log.G(ctx).Infof("RemoveImage %q", r.GetImage().GetImage()) + defer func() { + if err != nil { ++ // Sanitize error to remove sensitive information ++ err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("RemoveImage %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Infof("RemoveImage %q returns successfully", r.GetImage().GetImage()) +diff --git a/internal/cri/util/sanitize.go b/internal/cri/util/sanitize.go +new file mode 100644 +index 0000000000..d50a15ebf6 +--- /dev/null ++++ b/internal/cri/util/sanitize.go +@@ -0,0 +1,93 @@ ++/* ++ Copyright The containerd Authors. ++ ++ Licensed under the Apache License, Version 2.0 (the "License"); ++ you may not use this file except in compliance with the License. ++ You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++ Unless required by applicable law or agreed to in writing, software ++ distributed under the License is distributed on an "AS IS" BASIS, ++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ See the License for the specific language governing permissions and ++ limitations under the License. ++*/ ++ ++package util ++ ++import ( ++ "errors" ++ "net/url" ++ "strings" ++) ++ ++// SanitizeError sanitizes an error by redacting sensitive information in URLs. ++// If the error contains a *url.Error, it parses and sanitizes the URL. ++// Otherwise, it returns the error unchanged. ++func SanitizeError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ // Check if the error is or contains a *url.Error ++ var urlErr *url.Error ++ if errors.As(err, &urlErr) { ++ // Parse and sanitize the URL ++ sanitizedURL := sanitizeURL(urlErr.URL) ++ if sanitizedURL != urlErr.URL { ++ // Wrap with sanitized url.Error ++ return &sanitizedError{ ++ original: err, ++ sanitizedURL: sanitizedURL, ++ urlError: urlErr, ++ } ++ } ++ return err ++ } ++ ++ // No sanitization needed for non-URL errors ++ return err ++} ++ ++// sanitizeURL properly parses a URL and redacts all query parameters. ++func sanitizeURL(rawURL string) string { ++ parsed, err := url.Parse(rawURL) ++ if err != nil { ++ // If URL parsing fails, return original (malformed URLs shouldn't leak tokens) ++ return rawURL ++ } ++ ++ // Check if URL has query parameters ++ query := parsed.Query() ++ if len(query) == 0 { ++ return rawURL ++ } ++ ++ // Redact all query parameters ++ for param := range query { ++ query.Set(param, "[REDACTED]") ++ } ++ ++ // Reconstruct URL with sanitized query ++ parsed.RawQuery = query.Encode() ++ return parsed.String() ++} ++ ++// sanitizedError wraps an error containing a *url.Error with a sanitized URL. ++type sanitizedError struct { ++ original error ++ sanitizedURL string ++ urlError *url.Error ++} ++ ++// Error returns the error message with the sanitized URL. ++func (e *sanitizedError) Error() string { ++ // Replace all occurrences of the original URL with the sanitized version ++ return strings.ReplaceAll(e.original.Error(), e.urlError.URL, e.sanitizedURL) ++} ++ ++// Unwrap returns the original error for error chain traversal. ++func (e *sanitizedError) Unwrap() error { ++ return e.original ++} +diff --git a/internal/cri/util/sanitize_test.go b/internal/cri/util/sanitize_test.go +new file mode 100644 +index 0000000000..03e4fb2694 +--- /dev/null ++++ b/internal/cri/util/sanitize_test.go +@@ -0,0 +1,128 @@ ++/* ++ Copyright The containerd Authors. ++ ++ Licensed under the Apache License, Version 2.0 (the "License"); ++ you may not use this file except in compliance with the License. ++ You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++ Unless required by applicable law or agreed to in writing, software ++ distributed under the License is distributed on an "AS IS" BASIS, ++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ See the License for the specific language governing permissions and ++ limitations under the License. ++*/ ++ ++package util ++ ++import ( ++ "errors" ++ "fmt" ++ "net/url" ++ "testing" ++ ++ "github.com/stretchr/testify/assert" ++ "github.com/stretchr/testify/require" ++) ++ ++func TestSanitizeError_SimpleURLError(t *testing.T) { ++ // Create a url.Error with sensitive info ++ originalURL := "https://storage.blob.core.windows.net/container/blob?sig=SECRET&sv=2020" ++ urlErr := &url.Error{ ++ Op: "Get", ++ URL: originalURL, ++ Err: fmt.Errorf("connection timeout"), ++ } ++ ++ // Sanitize ++ sanitized := SanitizeError(urlErr) ++ require.NotNil(t, sanitized) ++ ++ // Check it's a sanitizedError with correct properties ++ sanitizedErr, ok := sanitized.(*sanitizedError) ++ require.True(t, ok, "Should return *sanitizedError type") ++ assert.Equal(t, urlErr, sanitizedErr.original) ++ assert.Equal(t, urlErr, sanitizedErr.urlError) ++ assert.Equal(t, "https://storage.blob.core.windows.net/container/blob?sig=%5BREDACTED%5D&sv=%5BREDACTED%5D", sanitizedErr.sanitizedURL) ++ ++ // Test Error() method - verifies ReplaceAll functionality ++ expected := "Get \"https://storage.blob.core.windows.net/container/blob?sig=%5BREDACTED%5D&sv=%5BREDACTED%5D\": connection timeout" ++ assert.Equal(t, expected, sanitized.Error()) ++} ++ ++func TestSanitizeError_WrappedError(t *testing.T) { ++ originalURL := "https://storage.blob.core.windows.net/blob?sig=SECRET&sv=2020" ++ urlErr := &url.Error{ ++ Op: "Get", ++ URL: originalURL, ++ Err: fmt.Errorf("timeout"), ++ } ++ ++ wrappedErr := fmt.Errorf("image pull failed: %w", urlErr) ++ ++ // Sanitize ++ sanitized := SanitizeError(wrappedErr) ++ ++ // Test Error() method with wrapped error - verifies ReplaceAll works in wrapped context ++ sanitizedMsg := sanitized.Error() ++ assert.NotContains(t, sanitizedMsg, "SECRET", "Secret should be sanitized") ++ assert.Contains(t, sanitizedMsg, "image pull failed", "Wrapper message should be preserved") ++ assert.Contains(t, sanitizedMsg, "%5BREDACTED%5D", "Should contain sanitized marker") ++ ++ // Should still be able to unwrap to url.Error ++ var targetURLErr *url.Error ++ assert.True(t, errors.As(sanitized, &targetURLErr), ++ "Should be able to find *url.Error in sanitized error chain") ++ ++ // Verify url.Error properties are preserved ++ assert.Equal(t, "Get", targetURLErr.Op) ++ assert.Contains(t, targetURLErr.Err.Error(), "timeout") ++} ++ ++func TestSanitizeError_NonURLError(t *testing.T) { ++ // Regular error without url.Error ++ regularErr := fmt.Errorf("some error occurred") ++ ++ sanitized := SanitizeError(regularErr) ++ ++ // Should return the exact same error object ++ assert.Equal(t, regularErr, sanitized, ++ "Non-URL errors should pass through unchanged") ++} ++ ++func TestSanitizeError_NilError(t *testing.T) { ++ sanitized := SanitizeError(nil) ++ assert.Nil(t, sanitized, "nil error should return nil") ++} ++ ++func TestSanitizeError_NoQueryParams(t *testing.T) { ++ // URL without any query parameters ++ urlErr := &url.Error{ ++ Op: "Get", ++ URL: "https://registry.example.com/v2/image/manifests/latest", ++ Err: fmt.Errorf("not found"), ++ } ++ ++ sanitized := SanitizeError(urlErr) ++ ++ // Should return the same error object (no sanitization needed) ++ assert.Equal(t, urlErr, sanitized, ++ "Errors without query params should pass through unchanged") ++} ++ ++func TestSanitizedError_Unwrap(t *testing.T) { ++ originalURL := "https://storage.blob.core.windows.net/blob?sig=SECRET" ++ urlErr := &url.Error{ ++ Op: "Get", ++ URL: originalURL, ++ Err: fmt.Errorf("timeout"), ++ } ++ ++ sanitized := SanitizeError(urlErr) ++ ++ // Should be able to unwrap ++ unwrapped := errors.Unwrap(sanitized) ++ assert.NotNil(t, unwrapped, "Should be able to unwrap sanitized error") ++ assert.Equal(t, urlErr, unwrapped, "Unwrapped should be the original error") ++} +-- +2.45.4 + + +From 50e383e3907d04aeaec85853edfaa9ab34be1006 Mon Sep 17 00:00:00 2001 +From: Aadhar Agarwal +Date: Tue, 20 Jan 2026 22:16:30 +0000 +Subject: [PATCH 2/2] fix: sanitize error before gRPC return to prevent + credential leak in pod events + +PR #12491 fixed credential leaks in containerd logs but the gRPC error +returned to kubelet still contained sensitive information. This was +visible in Kubernetes pod events via `kubectl describe pod`. + +The issue was that SanitizeError was called inside the defer block, +but errgrpc.ToGRPC(err) was evaluated before the defer ran, so the +gRPC message contained the original unsanitized error. + +Move SanitizeError before the return statement so both the logged +error and the gRPC error are sanitized. + +Ref: #5453 +Signed-off-by: Aadhar Agarwal +--- + .../cri/instrument/instrumented_service.go | 24 ++++++++++++------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +diff --git a/internal/cri/instrument/instrumented_service.go b/internal/cri/instrument/instrumented_service.go +index f06315a6bd..4379f95997 100644 +--- a/internal/cri/instrument/instrumented_service.go ++++ b/internal/cri/instrument/instrumented_service.go +@@ -351,8 +351,6 @@ func (in *instrumentedService) PullImage(ctx context.Context, r *runtime.PullIma + log.G(ctx).Infof("PullImage %q", r.GetImage().GetImage()) + defer func() { + if err != nil { +- // Sanitize error to remove sensitive information +- err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("PullImage %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Infof("PullImage %q returns image reference %q", +@@ -361,6 +359,10 @@ func (in *instrumentedService) PullImage(ctx context.Context, r *runtime.PullIma + span.RecordError(err) + }() + res, err = in.c.PullImage(ctrdutil.WithNamespace(ctx), r) ++ // Sanitize error to remove sensitive information from both logs and returned gRPC error ++ if err != nil { ++ err = ctrdutil.SanitizeError(err) ++ } + return res, errgrpc.ToGRPC(err) + } + +@@ -371,8 +373,6 @@ func (in *instrumentedService) ListImages(ctx context.Context, r *runtime.ListIm + log.G(ctx).Tracef("ListImages with filter %+v", r.GetFilter()) + defer func() { + if err != nil { +- // Sanitize error to remove sensitive information +- err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("ListImages with filter %+v failed", r.GetFilter()) + } else { + log.G(ctx).Tracef("ListImages with filter %+v returns image list %+v", +@@ -380,6 +380,10 @@ func (in *instrumentedService) ListImages(ctx context.Context, r *runtime.ListIm + } + }() + res, err = in.c.ListImages(ctrdutil.WithNamespace(ctx), r) ++ // Sanitize error to remove sensitive information from both logs and returned gRPC error ++ if err != nil { ++ err = ctrdutil.SanitizeError(err) ++ } + return res, errgrpc.ToGRPC(err) + } + +@@ -390,8 +394,6 @@ func (in *instrumentedService) ImageStatus(ctx context.Context, r *runtime.Image + log.G(ctx).Tracef("ImageStatus for %q", r.GetImage().GetImage()) + defer func() { + if err != nil { +- // Sanitize error to remove sensitive information +- err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("ImageStatus for %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Tracef("ImageStatus for %q returns image status %+v", +@@ -399,6 +401,10 @@ func (in *instrumentedService) ImageStatus(ctx context.Context, r *runtime.Image + } + }() + res, err = in.c.ImageStatus(ctrdutil.WithNamespace(ctx), r) ++ // Sanitize error to remove sensitive information from both logs and returned gRPC error ++ if err != nil { ++ err = ctrdutil.SanitizeError(err) ++ } + return res, errgrpc.ToGRPC(err) + } + +@@ -410,8 +416,6 @@ func (in *instrumentedService) RemoveImage(ctx context.Context, r *runtime.Remov + log.G(ctx).Infof("RemoveImage %q", r.GetImage().GetImage()) + defer func() { + if err != nil { +- // Sanitize error to remove sensitive information +- err = ctrdutil.SanitizeError(err) + log.G(ctx).WithError(err).Errorf("RemoveImage %q failed", r.GetImage().GetImage()) + } else { + log.G(ctx).Infof("RemoveImage %q returns successfully", r.GetImage().GetImage()) +@@ -419,6 +423,10 @@ func (in *instrumentedService) RemoveImage(ctx context.Context, r *runtime.Remov + span.RecordError(err) + }() + res, err := in.c.RemoveImage(ctrdutil.WithNamespace(ctx), r) ++ // Sanitize error to remove sensitive information from both logs and returned gRPC error ++ if err != nil { ++ err = ctrdutil.SanitizeError(err) ++ } + return res, errgrpc.ToGRPC(err) + } + +-- +2.45.4 + diff --git a/SPECS/containerized-data-importer/CVE-2022-2879.patch b/SPECS/containerized-data-importer/CVE-2022-2879.patch deleted file mode 100644 index c24bd58e3a..0000000000 --- a/SPECS/containerized-data-importer/CVE-2022-2879.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 042465900fcbb246c602c856ccd924ddf093947e Mon Sep 17 00:00:00 2001 -From: Muhammad Falak R Wani -Date: Tue, 9 Jul 2024 19:27:30 +0530 -Subject: [PATCH] archive/tar: limit size of headers - -Set a 1MiB limit on special file blocks (PAX headers, GNU long names, -GNU link names), to avoid reading arbitrarily large amounts of data -into memory. - -Thanks to Adam Korczynski (ADA Logics) and OSS-Fuzz for reporting -this issue. - -Fixes CVE-2022-2879 -Updates #54853 -Fixes #55925 - -Signed-off-by: Muhammad Falak R Wani -Signed-off-by: Thien Trung Vuong ---- - .../vbatts/tar-split/archive/tar/format.go | 4 ++++ - .../vbatts/tar-split/archive/tar/reader.go | 14 ++++++++++++-- - .../vbatts/tar-split/archive/tar/writer.go | 3 +++ - 3 files changed, 19 insertions(+), 2 deletions(-) - -diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/format.go b/vendor/github.com/vbatts/tar-split/archive/tar/format.go -index 1f89d0c..6097798 100644 ---- a/vendor/github.com/vbatts/tar-split/archive/tar/format.go -+++ b/vendor/github.com/vbatts/tar-split/archive/tar/format.go -@@ -143,6 +143,10 @@ const ( - blockSize = 512 // Size of each block in a tar stream - nameSize = 100 // Max length of the name field in USTAR format - prefixSize = 155 // Max length of the prefix field in USTAR format -+ -+ // Max length of a special file (PAX header, GNU long name or link). -+ // This matches the limit used by libarchive. -+ maxSpecialFileSize = 1 << 20 - ) - - // blockPadding computes the number of bytes needed to pad offset up to the -diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go b/vendor/github.com/vbatts/tar-split/archive/tar/reader.go -index af006fc..2baa0d5 100644 ---- a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go -+++ b/vendor/github.com/vbatts/tar-split/archive/tar/reader.go -@@ -139,7 +139,7 @@ func (tr *Reader) next() (*Header, error) { - continue // This is a meta header affecting the next header - case TypeGNULongName, TypeGNULongLink: - format.mayOnlyBe(FormatGNU) -- realname, err := ioutil.ReadAll(tr) -+ realname, err := readSpecialFile(tr) - if err != nil { - return nil, err - } -@@ -333,7 +333,7 @@ func mergePAX(hdr *Header, paxHdrs map[string]string) (err error) { - // parsePAX parses PAX headers. - // If an extended header (type 'x') is invalid, ErrHeader is returned - func parsePAX(r io.Reader) (map[string]string, error) { -- buf, err := ioutil.ReadAll(r) -+ buf, err := readSpecialFile(r) - if err != nil { - return nil, err - } -@@ -884,6 +884,16 @@ func tryReadFull(r io.Reader, b []byte) (n int, err error) { - return n, err - } - -+// readSpecialFile is like io.ReadAll except it returns -+// ErrFieldTooLong if more than maxSpecialFileSize is read. -+func readSpecialFile(r io.Reader) ([]byte, error) { -+ buf, err := io.ReadAll(io.LimitReader(r, maxSpecialFileSize+1)) -+ if len(buf) > maxSpecialFileSize { -+ return nil, ErrFieldTooLong -+ } -+ return buf, err -+} -+ - // discard skips n bytes in r, reporting an error if unable to do so. - func discard(tr *Reader, n int64) error { - var seekSkipped, copySkipped int64 -diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go b/vendor/github.com/vbatts/tar-split/archive/tar/writer.go -index e80498d..893eac0 100644 ---- a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go -+++ b/vendor/github.com/vbatts/tar-split/archive/tar/writer.go -@@ -199,6 +199,9 @@ func (tw *Writer) writePAXHeader(hdr *Header, paxHdrs map[string]string) error { - flag = TypeXHeader - } - data := buf.String() -+ if len(data) > maxSpecialFileSize { -+ return ErrFieldTooLong -+ } - if err := tw.writeRawFile(name, data, flag, FormatPAX); err != nil || isGlobal { - return err // Global headers return here - } --- -2.40.1 - diff --git a/SPECS/containerized-data-importer/CVE-2023-39325.patch b/SPECS/containerized-data-importer/CVE-2023-39325.patch deleted file mode 100644 index e0085e416d..0000000000 --- a/SPECS/containerized-data-importer/CVE-2023-39325.patch +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go -index 8cb14f3..6000140 100644 ---- a/vendor/golang.org/x/net/http2/server.go -+++ b/vendor/golang.org/x/net/http2/server.go -@@ -581,9 +581,11 @@ type serverConn struct { - advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client - curClientStreams uint32 // number of open streams initiated by the client - curPushedStreams uint32 // number of open streams initiated by server push -+ curHandlers uint32 // number of running handler goroutines - maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests - maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes - streams map[uint32]*stream -+ unstartedHandlers []unstartedHandler - initialStreamSendWindowSize int32 - maxFrameSize int32 - peerMaxHeaderListSize uint32 // zero means unknown (default) -@@ -981,6 +983,8 @@ func (sc *serverConn) serve() { - return - case gracefulShutdownMsg: - sc.startGracefulShutdownInternal() -+ case handlerDoneMsg: -+ sc.handlerDone() - default: - panic("unknown timer") - } -@@ -1028,6 +1032,7 @@ var ( - idleTimerMsg = new(serverMessage) - shutdownTimerMsg = new(serverMessage) - gracefulShutdownMsg = new(serverMessage) -+ handlerDoneMsg = new(serverMessage) - ) - - func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) } -@@ -2022,8 +2027,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { - } - } - -- go sc.runHandler(rw, req, handler) -- return nil -+ return sc.scheduleHandler(id, rw, req, handler) - } - - func (sc *serverConn) upgradeRequest(req *http.Request) { -@@ -2043,6 +2047,10 @@ func (sc *serverConn) upgradeRequest(req *http.Request) { - sc.conn.SetReadDeadline(time.Time{}) - } - -+ // This is the first request on the connection, -+ // so start the handler directly rather than going -+ // through scheduleHandler. -+ sc.curHandlers++ - go sc.runHandler(rw, req, sc.handler.ServeHTTP) - } - -@@ -2283,8 +2291,62 @@ func (sc *serverConn) newResponseWriter(st *stream, req *http.Request) *response - return &responseWriter{rws: rws} - } - -+type unstartedHandler struct { -+ streamID uint32 -+ rw *responseWriter -+ req *http.Request -+ handler func(http.ResponseWriter, *http.Request) -+} -+ -+// scheduleHandler starts a handler goroutine, -+// or schedules one to start as soon as an existing handler finishes. -+func (sc *serverConn) scheduleHandler(streamID uint32, rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) error { -+ sc.serveG.check() -+ maxHandlers := sc.advMaxStreams -+ if sc.curHandlers < maxHandlers { -+ sc.curHandlers++ -+ go sc.runHandler(rw, req, handler) -+ return nil -+ } -+ if len(sc.unstartedHandlers) > int(4*sc.advMaxStreams) { -+ return sc.countError("too_many_early_resets", ConnectionError(ErrCodeEnhanceYourCalm)) -+ } -+ sc.unstartedHandlers = append(sc.unstartedHandlers, unstartedHandler{ -+ streamID: streamID, -+ rw: rw, -+ req: req, -+ handler: handler, -+ }) -+ return nil -+} -+ -+func (sc *serverConn) handlerDone() { -+ sc.serveG.check() -+ sc.curHandlers-- -+ i := 0 -+ maxHandlers := sc.advMaxStreams -+ for ; i < len(sc.unstartedHandlers); i++ { -+ u := sc.unstartedHandlers[i] -+ if sc.streams[u.streamID] == nil { -+ // This stream was reset before its goroutine had a chance to start. -+ continue -+ } -+ if sc.curHandlers >= maxHandlers { -+ break -+ } -+ sc.curHandlers++ -+ go sc.runHandler(u.rw, u.req, u.handler) -+ sc.unstartedHandlers[i] = unstartedHandler{} // don't retain references -+ } -+ sc.unstartedHandlers = sc.unstartedHandlers[i:] -+ if len(sc.unstartedHandlers) == 0 { -+ sc.unstartedHandlers = nil -+ } -+} -+ - // Run on its own goroutine. - func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) { -+ defer sc.sendServeMsg(handlerDoneMsg) - didPanic := true - defer func() { - rw.rws.stream.cancelCtx() diff --git a/SPECS/containerized-data-importer/CVE-2023-3978.patch b/SPECS/containerized-data-importer/CVE-2023-3978.patch deleted file mode 100644 index 6a3c1192b1..0000000000 --- a/SPECS/containerized-data-importer/CVE-2023-3978.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 5abbff46d6a70d0e31b41ce98cddaa08cc911e3f Mon Sep 17 00:00:00 2001 -From: Sudipta Pandit -Date: Wed, 5 Feb 2025 20:58:22 +0530 -Subject: [PATCH] Backport fix for CVE-2023-3978 - -Reference: https://go-review.googlesource.com/c/net/+/514896 ---- - vendor/golang.org/x/net/html/render.go | 28 ++++++++++++++++++++++---- - 1 file changed, 24 insertions(+), 4 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/render.go b/vendor/golang.org/x/net/html/render.go -index 497e132..1da09c8 100644 ---- a/vendor/golang.org/x/net/html/render.go -+++ b/vendor/golang.org/x/net/html/render.go -@@ -194,9 +194,8 @@ func render1(w writer, n *Node) error { - } - } - -- // Render any child nodes. -- switch n.Data { -- case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": -+ // Render any child nodes -+ if childTextNodesAreLiteral(n) { - for c := n.FirstChild; c != nil; c = c.NextSibling { - if c.Type == TextNode { - if _, err := w.WriteString(c.Data); err != nil { -@@ -213,7 +212,7 @@ func render1(w writer, n *Node) error { - // last element in the file, with no closing tag. - return plaintextAbort - } -- default: -+ } else { - for c := n.FirstChild; c != nil; c = c.NextSibling { - if err := render1(w, c); err != nil { - return err -@@ -231,6 +230,27 @@ func render1(w writer, n *Node) error { - return w.WriteByte('>') - } - -+func childTextNodesAreLiteral(n *Node) bool { -+ // Per WHATWG HTML 13.3, if the parent of the current node is a style, -+ // script, xmp, iframe, noembed, noframes, or plaintext element, and the -+ // current node is a text node, append the value of the node's data -+ // literally. The specification is not explicit about it, but we only -+ // enforce this if we are in the HTML namespace (i.e. when the namespace is -+ // ""). -+ // NOTE: we also always include noscript elements, although the -+ // specification states that they should only be rendered as such if -+ // scripting is enabled for the node (which is not something we track). -+ if n.Namespace != "" { -+ return false -+ } -+ switch n.Data { -+ case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp": -+ return true -+ default: -+ return false -+ } -+} -+ - // writeQuoted writes s to w surrounded by quotes. Normally it will use double - // quotes, but if s contains a double quote, it will use single quotes. - // It is used for writing the identifiers in a doctype declaration. --- -2.34.1 - diff --git a/SPECS/containerized-data-importer/CVE-2023-44487.patch b/SPECS/containerized-data-importer/CVE-2023-44487.patch deleted file mode 100644 index ee2a818f28..0000000000 --- a/SPECS/containerized-data-importer/CVE-2023-44487.patch +++ /dev/null @@ -1,258 +0,0 @@ -diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go -index 3dd1564..9d9a3fd 100644 ---- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go -+++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go -@@ -165,15 +165,10 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, - ID: http2.SettingMaxFrameSize, - Val: http2MaxFrameLen, - }} -- // TODO(zhaoq): Have a better way to signal "no limit" because 0 is -- // permitted in the HTTP2 spec. -- maxStreams := config.MaxStreams -- if maxStreams == 0 { -- maxStreams = math.MaxUint32 -- } else { -+ if config.MaxStreams != math.MaxUint32 { - isettings = append(isettings, http2.Setting{ - ID: http2.SettingMaxConcurrentStreams, -- Val: maxStreams, -+ Val: config.MaxStreams, - }) - } - dynamicWindow := true -@@ -252,7 +247,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, - framer: framer, - readerDone: make(chan struct{}), - writerDone: make(chan struct{}), -- maxStreams: maxStreams, -+ maxStreams: config.MaxStreams, - inTapHandle: config.InTapHandle, - fc: &trInFlow{limit: uint32(icwz)}, - state: reachable, -diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go -index f4dde72..98839ad 100644 ---- a/vendor/google.golang.org/grpc/server.go -+++ b/vendor/google.golang.org/grpc/server.go -@@ -43,7 +43,6 @@ import ( - "google.golang.org/grpc/internal" - "google.golang.org/grpc/internal/binarylog" - "google.golang.org/grpc/internal/channelz" -- "google.golang.org/grpc/internal/grpcrand" - "google.golang.org/grpc/internal/grpcsync" - "google.golang.org/grpc/internal/transport" - "google.golang.org/grpc/keepalive" -@@ -74,10 +73,10 @@ func init() { - srv.drainServerTransports(addr) - } - internal.AddGlobalServerOptions = func(opt ...ServerOption) { -- extraServerOptions = append(extraServerOptions, opt...) -+ globalServerOptions = append(globalServerOptions, opt...) - } - internal.ClearGlobalServerOptions = func() { -- extraServerOptions = nil -+ globalServerOptions = nil - } - internal.BinaryLogger = binaryLogger - internal.JoinServerOptions = newJoinServerOption -@@ -115,12 +114,6 @@ type serviceInfo struct { - mdata interface{} - } - --type serverWorkerData struct { -- st transport.ServerTransport -- wg *sync.WaitGroup -- stream *transport.Stream --} -- - // Server is a gRPC server to serve RPC requests. - type Server struct { - opts serverOptions -@@ -145,7 +138,7 @@ type Server struct { - channelzID *channelz.Identifier - czData *channelzData - -- serverWorkerChannels []chan *serverWorkerData -+ serverWorkerChannel chan func() - } - - type serverOptions struct { -@@ -177,13 +170,14 @@ type serverOptions struct { - } - - var defaultServerOptions = serverOptions{ -+ maxConcurrentStreams: math.MaxUint32, - maxReceiveMessageSize: defaultServerMaxReceiveMessageSize, - maxSendMessageSize: defaultServerMaxSendMessageSize, - connectionTimeout: 120 * time.Second, - writeBufferSize: defaultWriteBufSize, - readBufferSize: defaultReadBufSize, - } --var extraServerOptions []ServerOption -+var globalServerOptions []ServerOption - - // A ServerOption sets options such as credentials, codec and keepalive parameters, etc. - type ServerOption interface { -@@ -387,6 +381,9 @@ func MaxSendMsgSize(m int) ServerOption { - // MaxConcurrentStreams returns a ServerOption that will apply a limit on the number - // of concurrent streams to each ServerTransport. - func MaxConcurrentStreams(n uint32) ServerOption { -+ if n == 0 { -+ n = math.MaxUint32 -+ } - return newFuncServerOption(func(o *serverOptions) { - o.maxConcurrentStreams = n - }) -@@ -565,42 +562,35 @@ const serverWorkerResetThreshold = 1 << 16 - // re-allocations (see the runtime.morestack problem [1]). - // - // [1] https://github.com/golang/go/issues/18138 --func (s *Server) serverWorker(ch chan *serverWorkerData) { -- // To make sure all server workers don't reset at the same time, choose a -- // random number of iterations before resetting. -- threshold := serverWorkerResetThreshold + grpcrand.Intn(serverWorkerResetThreshold) -- for completed := 0; completed < threshold; completed++ { -- data, ok := <-ch -+func (s *Server) serverWorker() { -+ for completed := 0; completed < serverWorkerResetThreshold; completed++ { -+ f, ok := <-s.serverWorkerChannel - if !ok { - return - } -- s.handleStream(data.st, data.stream, s.traceInfo(data.st, data.stream)) -- data.wg.Done() -+ f() - } -- go s.serverWorker(ch) -+ go s.serverWorker() - } - - // initServerWorkers creates worker goroutines and channels to process incoming - // connections to reduce the time spent overall on runtime.morestack. - func (s *Server) initServerWorkers() { -- s.serverWorkerChannels = make([]chan *serverWorkerData, s.opts.numServerWorkers) -+ s.serverWorkerChannel = make(chan func()) - for i := uint32(0); i < s.opts.numServerWorkers; i++ { -- s.serverWorkerChannels[i] = make(chan *serverWorkerData) -- go s.serverWorker(s.serverWorkerChannels[i]) -+ go s.serverWorker() - } - } - - func (s *Server) stopServerWorkers() { -- for i := uint32(0); i < s.opts.numServerWorkers; i++ { -- close(s.serverWorkerChannels[i]) -- } -+ close(s.serverWorkerChannel) - } - - // NewServer creates a gRPC server which has no service registered and has not - // started to accept requests yet. - func NewServer(opt ...ServerOption) *Server { - opts := defaultServerOptions -- for _, o := range extraServerOptions { -+ for _, o := range globalServerOptions { - o.apply(&opts) - } - for _, o := range opt { -@@ -945,25 +935,26 @@ func (s *Server) serveStreams(st transport.ServerTransport) { - defer st.Close() - var wg sync.WaitGroup - -- var roundRobinCounter uint32 -+ streamQuota := newHandlerQuota(s.opts.maxConcurrentStreams) - st.HandleStreams(func(stream *transport.Stream) { - wg.Add(1) -+ -+ streamQuota.acquire() -+ f := func() { -+ defer streamQuota.release() -+ defer wg.Done() -+ s.handleStream(st, stream, s.traceInfo(st, stream)) -+ } -+ - if s.opts.numServerWorkers > 0 { -- data := &serverWorkerData{st: st, wg: &wg, stream: stream} - select { -- case s.serverWorkerChannels[atomic.AddUint32(&roundRobinCounter, 1)%s.opts.numServerWorkers] <- data: -+ case s.serverWorkerChannel <- f: -+ return - default: - // If all stream workers are busy, fallback to the default code path. -- go func() { -- s.handleStream(st, stream, s.traceInfo(st, stream)) -- wg.Done() -- }() - } - } else { -- go func() { -- defer wg.Done() -- s.handleStream(st, stream, s.traceInfo(st, stream)) -- }() -+ go f() - } - }, func(ctx context.Context, method string) context.Context { - if !EnableTracing { -@@ -1978,3 +1969,34 @@ type channelzServer struct { - func (c *channelzServer) ChannelzMetric() *channelz.ServerInternalMetric { - return c.s.channelzMetric() - } -+ -+// atomicSemaphore implements a blocking, counting semaphore. acquire should be -+// called synchronously; release may be called asynchronously. -+type atomicSemaphore struct { -+ n atomic.Int64 -+ wait chan struct{} -+} -+ -+func (q *atomicSemaphore) acquire() { -+ if q.n.Add(-1) < 0 { -+ // We ran out of quota. Block until a release happens. -+ <-q.wait -+ } -+} -+ -+func (q *atomicSemaphore) release() { -+ // N.B. the "<= 0" check below should allow for this to work with multiple -+ // concurrent calls to acquire, but also note that with synchronous calls to -+ // acquire, as our system does, n will never be less than -1. There are -+ // fairness issues (queuing) to consider if this was to be generalized. -+ if q.n.Add(1) <= 0 { -+ // An acquire was waiting on us. Unblock it. -+ q.wait <- struct{}{} -+ } -+} -+ -+func newHandlerQuota(n uint32) *atomicSemaphore { -+ a := &atomicSemaphore{wait: make(chan struct{}, 1)} -+ a.n.Store(int64(n)) -+ return a -+} -\ No newline at end of file -diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go -index d738725..3674914 100644 ---- a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go -+++ b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go -@@ -126,14 +126,17 @@ type rudimentaryErrorBackoff struct { - // OnError will block if it is called more often than the embedded period time. - // This will prevent overly tight hot error loops. - func (r *rudimentaryErrorBackoff) OnError(error) { -+ now := time.Now() // start the timer before acquiring the lock - r.lastErrorTimeLock.Lock() -- defer r.lastErrorTimeLock.Unlock() -- d := time.Since(r.lastErrorTime) -- if d < r.minPeriod { -- // If the time moves backwards for any reason, do nothing -- time.Sleep(r.minPeriod - d) -- } -+ d := now.Sub(r.lastErrorTime) - r.lastErrorTime = time.Now() -+ r.lastErrorTimeLock.Unlock() -+ -+ // Do not sleep with the lock held because that causes all callers of HandleError to block. -+ // We only want the current goroutine to block. -+ // A negative or zero duration causes time.Sleep to return immediately. -+ // If the time moves backwards for any reason, do nothing. -+ time.Sleep(r.minPeriod - d) - } - - // GetCaller returns the caller of the function that calls it. diff --git a/SPECS/containerized-data-importer/CVE-2023-45288.patch b/SPECS/containerized-data-importer/CVE-2023-45288.patch deleted file mode 100644 index 80eaa40216..0000000000 --- a/SPECS/containerized-data-importer/CVE-2023-45288.patch +++ /dev/null @@ -1,83 +0,0 @@ -Author: Damien Neil -AuthorDate: 2024-01-10 13:41:39 -0800 -Commit: Gopher Robot -CommitDate: 2024-04-03 17:06:00 +0000 - -[internal-branch.go1.21-vendor] http2: close connections when receiving too many headers - -Maintaining HPACK state requires that we parse and process -all HEADERS and CONTINUATION frames on a connection. -When a request's headers exceed MaxHeaderBytes, we don't -allocate memory to store the excess headers but we do -parse them. This permits an attacker to cause an HTTP/2 -endpoint to read arbitrary amounts of data, all associated -with a request which is going to be rejected. - -Set a limit on the amount of excess header frames we -will process before closing a connection. - -Thanks to Bartek Nowotarski for reporting this issue. - -Fixes CVE-2023-45288 -For golang/go#65051 - -Change-Id: I15df097268df13bb5a9e9d3a5c04a8a141d850f6 -Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2130527 -Reviewed-by: Roland Shoemaker -Reviewed-by: Tatiana Bradley -Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2197243 -Run-TryBot: Damien Neil -Reviewed-by: Dmitri Shuralyov -Reviewed-on: https://go-review.googlesource.com/c/net/+/576057 -LUCI-TryBot-Result: Go LUCI -Auto-Submit: Dmitri Shuralyov - -diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go -index c1f6b90..175c154 100644 ---- a/vendor/golang.org/x/net/http2/frame.go -+++ b/vendor/golang.org/x/net/http2/frame.go -@@ -1565,6 +1565,7 @@ - if size > remainSize { - hdec.SetEmitEnabled(false) - mh.Truncated = true -+ remainSize = 0 - return - } - remainSize -= size -@@ -1577,6 +1578,36 @@ - var hc headersOrContinuation = hf - for { - frag := hc.HeaderBlockFragment() -+ -+ // Avoid parsing large amounts of headers that we will then discard. -+ // If the sender exceeds the max header list size by too much, -+ // skip parsing the fragment and close the connection. -+ // -+ // "Too much" is either any CONTINUATION frame after we've already -+ // exceeded the max header list size (in which case remainSize is 0), -+ // or a frame whose encoded size is more than twice the remaining -+ // header list bytes we're willing to accept. -+ if int64(len(frag)) > int64(2*remainSize) { -+ if VerboseLogs { -+ log.Printf("http2: header list too large") -+ } -+ // It would be nice to send a RST_STREAM before sending the GOAWAY, -+ // but the struture of the server's frame writer makes this difficult. -+ return nil, ConnectionError(ErrCodeProtocol) -+ } -+ -+ // Also close the connection after any CONTINUATION frame following an -+ // invalid header, since we stop tracking the size of the headers after -+ // an invalid one. -+ if invalid != nil { -+ if VerboseLogs { -+ log.Printf("http2: invalid header: %v", invalid) -+ } -+ // It would be nice to send a RST_STREAM before sending the GOAWAY, -+ // but the struture of the server's frame writer makes this difficult. -+ return nil, ConnectionError(ErrCodeProtocol) -+ } -+ - if _, err := hdec.Write(frag); err != nil { - return nil, ConnectionError(ErrCodeCompression) - } diff --git a/SPECS/containerized-data-importer/CVE-2024-24786.patch b/SPECS/containerized-data-importer/CVE-2024-24786.patch deleted file mode 100644 index 6c80204f5b..0000000000 --- a/SPECS/containerized-data-importer/CVE-2024-24786.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 1576982839ab9771784526720ed0a2f4a2aa2280 Mon Sep 17 00:00:00 2001 -From: bala -Date: Mon, 25 Nov 2024 16:47:53 +0000 -Subject: [PATCH] Vendor patch applied - ---- - .../protobuf/encoding/protojson/decode.go | 12 ++++ - .../encoding/protojson/well_known_types.go | 59 +++++++------------ - .../protobuf/internal/encoding/json/decode.go | 2 +- - 3 files changed, 33 insertions(+), 40 deletions(-) - -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go -index 5f28148..67fe4e7 100644 ---- a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go -@@ -11,6 +11,7 @@ import ( - "strconv" - "strings" - -+ "google.golang.org/protobuf/encoding/protowire" - "google.golang.org/protobuf/internal/encoding/json" - "google.golang.org/protobuf/internal/encoding/messageset" - "google.golang.org/protobuf/internal/errors" -@@ -47,6 +48,10 @@ type UnmarshalOptions struct { - protoregistry.MessageTypeResolver - protoregistry.ExtensionTypeResolver - } -+ -+ // RecursionLimit limits how deeply messages may be nested. -+ // If zero, a default limit is applied. -+ RecursionLimit int - } - - // Unmarshal reads the given []byte and populates the given proto.Message -@@ -67,6 +72,9 @@ func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error { - if o.Resolver == nil { - o.Resolver = protoregistry.GlobalTypes - } -+ if o.RecursionLimit == 0 { -+ o.RecursionLimit = protowire.DefaultRecursionLimit -+ } - - dec := decoder{json.NewDecoder(b), o} - if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil { -@@ -114,6 +122,10 @@ func (d decoder) syntaxError(pos int, f string, x ...interface{}) error { - - // unmarshalMessage unmarshals a message into the given protoreflect.Message. - func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error { -+ d.opts.RecursionLimit-- -+ if d.opts.RecursionLimit < 0 { -+ return errors.New("exceeded max recursion depth") -+ } - if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil { - return unmarshal(d, m) - } -diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go -index 6c37d41..4b177c8 100644 ---- a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go -+++ b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go -@@ -176,7 +176,7 @@ func (d decoder) unmarshalAny(m protoreflect.Message) error { - // Use another decoder to parse the unread bytes for @type field. This - // avoids advancing a read from current decoder because the current JSON - // object may contain the fields of the embedded type. -- dec := decoder{d.Clone(), UnmarshalOptions{}} -+ dec := decoder{d.Clone(), UnmarshalOptions{RecursionLimit: d.opts.RecursionLimit}} - tok, err := findTypeURL(dec) - switch err { - case errEmptyObject: -@@ -308,48 +308,29 @@ Loop: - // array) in order to advance the read to the next JSON value. It relies on - // the decoder returning an error if the types are not in valid sequence. - func (d decoder) skipJSONValue() error { -- tok, err := d.Read() -- if err != nil { -- return err -- } -- // Only need to continue reading for objects and arrays. -- switch tok.Kind() { -- case json.ObjectOpen: -- for { -- tok, err := d.Read() -- if err != nil { -- return err -- } -- switch tok.Kind() { -- case json.ObjectClose: -- return nil -- case json.Name: -- // Skip object field value. -- if err := d.skipJSONValue(); err != nil { -- return err -- } -- } -+ var open int -+ for { -+ tok, err := d.Read() -+ if err != nil { -+ return err - } -- -- case json.ArrayOpen: -- for { -- tok, err := d.Peek() -- if err != nil { -- return err -- } -- switch tok.Kind() { -- case json.ArrayClose: -- d.Read() -- return nil -- default: -- // Skip array item. -- if err := d.skipJSONValue(); err != nil { -- return err -- } -+ switch tok.Kind() { -+ case json.ObjectClose, json.ArrayClose: -+ open-- -+ case json.ObjectOpen, json.ArrayOpen: -+ open++ -+ if open > d.opts.RecursionLimit { -+ return errors.New("exceeded max recursion depth") - } -+ case json.EOF: -+ // This can only happen if there's a bug in Decoder.Read. -+ // Avoid an infinite loop if this does happen. -+ return errors.New("unexpected EOF") -+ } -+ if open == 0 { -+ return nil - } - } -- return nil - } - - // unmarshalAnyValue unmarshals the given custom-type message from the JSON -diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go -index d043a6e..d2b3ac0 100644 ---- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go -+++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go -@@ -121,7 +121,7 @@ func (d *Decoder) Read() (Token, error) { - - case ObjectClose: - if len(d.openStack) == 0 || -- d.lastToken.kind == comma || -+ d.lastToken.kind&(Name|comma) != 0 || - d.openStack[len(d.openStack)-1] != ObjectOpen { - return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) - } --- -2.39.4 - diff --git a/SPECS/containerized-data-importer/CVE-2024-28180.patch b/SPECS/containerized-data-importer/CVE-2024-28180.patch deleted file mode 100644 index 45d7246373..0000000000 --- a/SPECS/containerized-data-importer/CVE-2024-28180.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 886860405f81160c23e8e9e8c80694f094f0e104 Mon Sep 17 00:00:00 2001 -From: Kanishk Bansal -Date: Wed, 29 Jan 2025 14:11:18 +0000 -Subject: [PATCH] Address CVE-2024-28180 - ---- - vendor/gopkg.in/square/go-jose.v2/crypter.go | 6 ++++++ - vendor/gopkg.in/square/go-jose.v2/encoding.go | 20 +++++++++++++++---- - 2 files changed, 22 insertions(+), 4 deletions(-) - -diff --git a/vendor/gopkg.in/square/go-jose.v2/crypter.go b/vendor/gopkg.in/square/go-jose.v2/crypter.go -index d24cabf..a628386 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/crypter.go -+++ b/vendor/gopkg.in/square/go-jose.v2/crypter.go -@@ -405,6 +405,9 @@ func (ctx *genericEncrypter) Options() EncrypterOptions { - // Decrypt and validate the object and return the plaintext. Note that this - // function does not support multi-recipient, if you desire multi-recipient - // decryption use DecryptMulti instead. -+// -+// Automatically decompresses plaintext, but returns an error if the decompressed -+// data would be >250kB or >10x the size of the compressed data, whichever is larger. - func (obj JSONWebEncryption) Decrypt(decryptionKey interface{}) ([]byte, error) { - headers := obj.mergedHeaders(nil) - -@@ -469,6 +472,9 @@ func (obj JSONWebEncryption) Decrypt(decryptionKey interface{}) ([]byte, error) - // with support for multiple recipients. It returns the index of the recipient - // for which the decryption was successful, the merged headers for that recipient, - // and the plaintext. -+// -+// Automatically decompresses plaintext, but returns an error if the decompressed -+// data would be >250kB or >3x the size of the compressed data, whichever is larger. - func (obj JSONWebEncryption) DecryptMulti(decryptionKey interface{}) (int, Header, []byte, error) { - globalHeaders := obj.mergedHeaders(nil) - -diff --git a/vendor/gopkg.in/square/go-jose.v2/encoding.go b/vendor/gopkg.in/square/go-jose.v2/encoding.go -index 70f7385..2b92116 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/encoding.go -+++ b/vendor/gopkg.in/square/go-jose.v2/encoding.go -@@ -21,6 +21,7 @@ import ( - "compress/flate" - "encoding/base64" - "encoding/binary" -+ "fmt" - "io" - "math/big" - "strings" -@@ -85,7 +86,7 @@ func decompress(algorithm CompressionAlgorithm, input []byte) ([]byte, error) { - } - } - --// Compress with DEFLATE -+// deflate compresses the input. - func deflate(input []byte) ([]byte, error) { - output := new(bytes.Buffer) - -@@ -97,15 +98,26 @@ func deflate(input []byte) ([]byte, error) { - return output.Bytes(), err - } - --// Decompress with DEFLATE -+// inflate decompresses the input. -+// -+// Errors if the decompressed data would be >250kB or >10x the size of the -+// compressed data, whichever is larger. - func inflate(input []byte) ([]byte, error) { - output := new(bytes.Buffer) - reader := flate.NewReader(bytes.NewBuffer(input)) - -- _, err := io.Copy(output, reader) -- if err != nil { -+ maxCompressedSize := 10 * int64(len(input)) -+ if maxCompressedSize < 250000 { -+ maxCompressedSize = 250000 -+ } -+ limit := maxCompressedSize + 1 -+ n, err := io.CopyN(output, reader, limit) -+ if err != nil && err != io.EOF { - return nil, err - } -+ if n == limit { -+ return nil, fmt.Errorf("uncompressed data would be too large (>%d bytes)", maxCompressedSize) -+ } - - err = reader.Close() - return output.Bytes(), err --- -2.43.0 - diff --git a/SPECS/containerized-data-importer/CVE-2024-3727.patch b/SPECS/containerized-data-importer/CVE-2024-3727.patch deleted file mode 100644 index 92f882851e..0000000000 --- a/SPECS/containerized-data-importer/CVE-2024-3727.patch +++ /dev/null @@ -1,165 +0,0 @@ -From ea14d57b98cc37decad0c39ccbafb27994274b47 Mon Sep 17 00:00:00 2001 -From: Brian Fjeldstad -Date: Thu, 6 Jun 2024 21:13:36 +0000 -Subject: [PATCH] apply CVE-2024-3727 fix to v5.19.1 - ---- - vendor/github.com/containers/image/v5/docker/docker_client.go | 3 +++ - vendor/github.com/containers/image/v5/docker/docker_image.go | 8 ++++++-- - vendor/github.com/containers/image/v5/docker/docker_image_dest.go | 15 ++++++++++++--- - vendor/github.com/containers/image/v5/docker/docker_image_src.go | 19 +++++++++++++++++-- - vendor/github.com/containers/image/v5/docker/lookaside.go | 7 +++++-- - 5 files changed, 43 insertions(+), 9 deletions(-) - -diff --git a/vendor/github.com/containers/image/v5/docker/docker_client.go b/vendor/github.com/containers/image/v5/docker/docker_client.go -index 833323b4..99bde923 100644 ---- a/vendor/github.com/containers/image/v5/docker/docker_client.go -+++ b/vendor/github.com/containers/image/v5/docker/docker_client.go -@@ -796,6 +796,9 @@ func (c *dockerClient) detectProperties(ctx context.Context) error { - // getExtensionsSignatures returns signatures from the X-Registry-Supports-Signatures API extension, - // using the original data structures. - func (c *dockerClient) getExtensionsSignatures(ctx context.Context, ref dockerReference, manifestDigest digest.Digest) (*extensionSignatureList, error) { -+ if err := manifestDigest.Validate(); err != nil { // Make sure manifestDigest.String() does not contain any unexpected characters -+ return nil, err -+ } - path := fmt.Sprintf(extensionsSignaturePath, reference.Path(ref.ref), manifestDigest) - res, err := c.makeRequest(ctx, http.MethodGet, path, nil, nil, v2Auth, nil) - if err != nil { -diff --git a/vendor/github.com/containers/image/v5/docker/docker_image.go b/vendor/github.com/containers/image/v5/docker/docker_image.go -index c84bb37d..0076d229 100644 ---- a/vendor/github.com/containers/image/v5/docker/docker_image.go -+++ b/vendor/github.com/containers/image/v5/docker/docker_image.go -@@ -83,8 +83,12 @@ func GetRepositoryTags(ctx context.Context, sys *types.SystemContext, ref types. - if err = json.NewDecoder(res.Body).Decode(&tagsHolder); err != nil { - return nil, err - } -- tags = append(tags, tagsHolder.Tags...) -- -+ for _, tag := range tagsHolder.Tags { -+ if _, err := reference.WithTag(dr.ref, tag); err != nil { // Ensure the tag does not contain unexpected values -+ return nil, fmt.Errorf("registry returned invalid tag %q: %w", tag, err) -+ } -+ tags = append(tags, tag) -+ } - link := res.Header.Get("Link") - if link == "" { - break -diff --git a/vendor/github.com/containers/image/v5/docker/docker_image_dest.go b/vendor/github.com/containers/image/v5/docker/docker_image_dest.go -index e7af8f93..1096c56f 100644 ---- a/vendor/github.com/containers/image/v5/docker/docker_image_dest.go -+++ b/vendor/github.com/containers/image/v5/docker/docker_image_dest.go -@@ -226,6 +226,9 @@ func (d *dockerImageDestination) PutBlob(ctx context.Context, stream io.Reader, - // If the destination does not contain the blob, or it is unknown, blobExists ordinarily returns (false, -1, nil); - // it returns a non-nil error only on an unexpected failure. - func (d *dockerImageDestination) blobExists(ctx context.Context, repo reference.Named, digest digest.Digest, extraScope *authScope) (bool, int64, error) { -+ if err := digest.Validate(); err != nil { // Make sure digest.String() does not contain any unexpected characters -+ return false, -1, err -+ } - checkPath := fmt.Sprintf(blobsPath, reference.Path(repo), digest.String()) - logrus.Debugf("Checking %s", checkPath) - res, err := d.c.makeRequest(ctx, http.MethodHead, checkPath, nil, nil, v2Auth, extraScope) -@@ -558,8 +561,11 @@ func (d *dockerImageDestination) putSignaturesToLookaside(signatures [][]byte, m - - // NOTE: Keep this in sync with docs/signature-protocols.md! - for i, signature := range signatures { -- url := signatureStorageURL(d.c.signatureBase, manifestDigest, i) -- err := d.putOneSignature(url, signature) -+ url, err := signatureStorageURL(d.c.signatureBase, manifestDigest, i) -+ if err != nil { -+ return err -+ } -+ err = d.putOneSignature(url, signature) - if err != nil { - return err - } -@@ -570,7 +576,10 @@ func (d *dockerImageDestination) putSignaturesToLookaside(signatures [][]byte, m - // is enough for dockerImageSource to stop looking for other signatures, so that - // is sufficient. - for i := len(signatures); ; i++ { -- url := signatureStorageURL(d.c.signatureBase, manifestDigest, i) -+ url, err := signatureStorageURL(d.c.signatureBase, manifestDigest, i) -+ if err != nil { -+ return err -+ } - missing, err := d.c.deleteOneSignature(url) - if err != nil { - return err -diff --git a/vendor/github.com/containers/image/v5/docker/docker_image_src.go b/vendor/github.com/containers/image/v5/docker/docker_image_src.go -index 314e9b39..43ca0c4f 100644 ---- a/vendor/github.com/containers/image/v5/docker/docker_image_src.go -+++ b/vendor/github.com/containers/image/v5/docker/docker_image_src.go -@@ -178,6 +178,9 @@ func simplifyContentType(contentType string) string { - // this never happens if the primary manifest is not a manifest list (e.g. if the source never returns manifest lists). - func (s *dockerImageSource) GetManifest(ctx context.Context, instanceDigest *digest.Digest) ([]byte, string, error) { - if instanceDigest != nil { -+ if err := instanceDigest.Validate(); err != nil { // Make sure instanceDigest.String() does not contain any unexpected characters -+ return nil, "", err -+ } - return s.fetchManifest(ctx, instanceDigest.String()) - } - err := s.ensureManifestIsLoaded(ctx) -@@ -373,6 +376,9 @@ func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo, - return nil, nil, fmt.Errorf("external URLs not supported with GetBlobAt") - } - -+ if err := info.Digest.Validate(); err != nil { // Make sure info.Digest.String() does not contain any unexpected characters -+ return nil, nil, err -+ } - path := fmt.Sprintf(blobsPath, reference.Path(s.physicalRef.ref), info.Digest.String()) - logrus.Debugf("Downloading %s", path) - res, err := s.c.makeRequest(ctx, http.MethodGet, path, headers, nil, v2Auth, nil) -@@ -425,6 +431,9 @@ func (s *dockerImageSource) GetBlob(ctx context.Context, info types.BlobInfo, ca - } - } - -+ if err := info.Digest.Validate(); err != nil { // Make sure info.Digest.String() does not contain any unexpected characters -+ return nil, 0, err -+ } - path := fmt.Sprintf(blobsPath, reference.Path(s.physicalRef.ref), info.Digest.String()) - logrus.Debugf("Downloading %s", path) - res, err := s.c.makeRequest(ctx, http.MethodGet, path, nil, nil, v2Auth, nil) -@@ -486,7 +495,10 @@ func (s *dockerImageSource) getSignaturesFromLookaside(ctx context.Context, inst - // NOTE: Keep this in sync with docs/signature-protocols.md! - signatures := [][]byte{} - for i := 0; ; i++ { -- url := signatureStorageURL(s.c.signatureBase, manifestDigest, i) -+ url, err := signatureStorageURL(s.c.signatureBase, manifestDigest, i) -+ if err != nil { -+ return nil, err -+ } - signature, missing, err := s.getOneSignature(ctx, url) - if err != nil { - return nil, err -@@ -627,7 +639,10 @@ func deleteImage(ctx context.Context, sys *types.SystemContext, ref dockerRefere - } - - for i := 0; ; i++ { -- url := signatureStorageURL(c.signatureBase, manifestDigest, i) -+ url, err := signatureStorageURL(c.signatureBase, manifestDigest, i) -+ if err != nil { -+ return err -+ } - missing, err := c.deleteOneSignature(url) - if err != nil { - return err -diff --git a/vendor/github.com/containers/image/v5/docker/lookaside.go b/vendor/github.com/containers/image/v5/docker/lookaside.go -index 515e5932..2e400c09 100644 ---- a/vendor/github.com/containers/image/v5/docker/lookaside.go -+++ b/vendor/github.com/containers/image/v5/docker/lookaside.go -@@ -229,8 +229,11 @@ func (ns registryNamespace) signatureTopLevel(write bool) string { - // signatureStorageURL returns an URL usable for accessing signature index in base with known manifestDigest. - // base is not nil from the caller - // NOTE: Keep this in sync with docs/signature-protocols.md! --func signatureStorageURL(base signatureStorageBase, manifestDigest digest.Digest, index int) *url.URL { -+func signatureStorageURL(base signatureStorageBase, manifestDigest digest.Digest, index int) (*url.URL, error) { -+ if err := manifestDigest.Validate(); err != nil { // digest.Digest.Hex() panics on failure, and could possibly result in a path with ../, so validate explicitly. -+ return nil, err -+ } - url := *base - url.Path = fmt.Sprintf("%s@%s=%s/signature-%d", url.Path, manifestDigest.Algorithm(), manifestDigest.Hex(), index+1) -- return &url -+ return &url, nil - } --- -2.34.1 - diff --git a/SPECS/containerized-data-importer/CVE-2024-45338.patch b/SPECS/containerized-data-importer/CVE-2024-45338.patch deleted file mode 100644 index b1a7b33304..0000000000 --- a/SPECS/containerized-data-importer/CVE-2024-45338.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 0c0cb82a7671b2aa12c5136ab9368245e3803985 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Thu, 2 Jan 2025 10:22:13 +0000 -Subject: [PATCH] Fix CVE CVE-2024-45338 in containerized-data-importer - ---- - .../vendor/golang.org/x/net/html/doctype.go | 2 +- - .../vendor/golang.org/x/net/html/foreign.go | 3 +-- - .../vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/vendor/golang.org/x/net/html/doctype.go -+++ b/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/vendor/golang.org/x/net/html/foreign.go -+++ b/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 46a89ed..5b8374b 100644 ---- a/vendor/golang.org/x/net/html/parse.go -+++ b/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.39.4 - diff --git a/SPECS/containerized-data-importer/CVE-2025-22868.patch b/SPECS/containerized-data-importer/CVE-2025-22868.patch deleted file mode 100644 index c4f136f3ca..0000000000 --- a/SPECS/containerized-data-importer/CVE-2025-22868.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 681b4d8edca1bcfea5bce685d77ea7b82ed3e7b3 Mon Sep 17 00:00:00 2001 -From: Neal Patel -Date: Thu, 30 Jan 2025 14:10:09 -0500 -Subject: [PATCH] jws: split token into fixed number of parts - -Thanks to 'jub0bs' for reporting this issue. - -Fixes #71490 -Fixes CVE-2025-22868 - -Change-Id: I2552731f46d4907f29aafe7863c558387b6bd6e2 -Reviewed-on: https://go-review.googlesource.com/c/oauth2/+/652155 -Auto-Submit: Gopher Robot -Reviewed-by: Damien Neil -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI ---- - vendor/golang.org/x/oauth2/jws/jws.go | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/oauth2/jws/jws.go b/vendor/golang.org/x/oauth2/jws/jws.go -index 95015648b..6f03a49d3 100644 ---- a/vendor/golang.org/x/oauth2/jws/jws.go -+++ b/vendor/golang.org/x/oauth2/jws/jws.go -@@ -165,11 +165,11 @@ func Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error) { - // Verify tests whether the provided JWT token's signature was produced by the private key - // associated with the supplied public key. - func Verify(token string, key *rsa.PublicKey) error { -- parts := strings.Split(token, ".") -- if len(parts) != 3 { -+ if strings.Count(token, ".") != 2 { - return errors.New("jws: invalid token received, token must have 3 parts") - } - -+ parts := strings.SplitN(token, ".", 3) - signedContent := parts[0] + "." + parts[1] - signatureString, err := base64.RawURLEncoding.DecodeString(parts[2]) - if err != nil { diff --git a/SPECS/containerized-data-importer/CVE-2025-22872.patch b/SPECS/containerized-data-importer/CVE-2025-22872.patch deleted file mode 100644 index c86baa1694..0000000000 --- a/SPECS/containerized-data-importer/CVE-2025-22872.patch +++ /dev/null @@ -1,42 +0,0 @@ -From c87c77a12e5554d376945bd488e56d4fc5b9e5ac Mon Sep 17 00:00:00 2001 -From: archana25-ms -Date: Tue, 22 Apr 2025 06:32:35 +0000 -Subject: [PATCH] Address CVE-2025-22872 -Upstream Patch Reference: https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9 - ---- - vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go -index 3c57880..6598c1f 100644 ---- a/vendor/golang.org/x/net/html/token.go -+++ b/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.3 - diff --git a/SPECS/containerized-data-importer/CVE-2025-27144.patch b/SPECS/containerized-data-importer/CVE-2025-27144.patch deleted file mode 100644 index 6015ed48ca..0000000000 --- a/SPECS/containerized-data-importer/CVE-2025-27144.patch +++ /dev/null @@ -1,50 +0,0 @@ -From fa324fa38481f9d2da9109cb5983326f62ff7507 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 07:45:53 +0000 -Subject: [PATCH] CVE-2025-27144 -Upstream Ref: https://github.com/go-jose/go-jose/commit/c9ed84d8f0cfadcfad817150158caca6fcbc518b - ---- - vendor/gopkg.in/square/go-jose.v2/jwe.go | 5 +++-- - vendor/gopkg.in/square/go-jose.v2/jws.go | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/vendor/gopkg.in/square/go-jose.v2/jwe.go b/vendor/gopkg.in/square/go-jose.v2/jwe.go -index b5a6dcd..cd1de9e 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/jwe.go -+++ b/vendor/gopkg.in/square/go-jose.v2/jwe.go -@@ -201,10 +201,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { - - // parseEncryptedCompact parses a message in compact format. - func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("square/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) - if err != nil { -diff --git a/vendor/gopkg.in/square/go-jose.v2/jws.go b/vendor/gopkg.in/square/go-jose.v2/jws.go -index 7e261f9..a8d55fb 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/jws.go -+++ b/vendor/gopkg.in/square/go-jose.v2/jws.go -@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { - - // parseSignedCompact parses a message in compact format. - func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("square/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("square/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/containerized-data-importer/containerized-data-importer.signatures.json b/SPECS/containerized-data-importer/containerized-data-importer.signatures.json deleted file mode 100644 index d5ded8e703..0000000000 --- a/SPECS/containerized-data-importer/containerized-data-importer.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "containerized-data-importer-1.57.0.tar.gz": "71191e9e98df6d73490ae2bb74fa069bd2967a439f9a76d6bba1822fccc134ce" - } -} diff --git a/SPECS/containerized-data-importer/containerized-data-importer.spec b/SPECS/containerized-data-importer/containerized-data-importer.spec deleted file mode 100644 index 397a471710..0000000000 --- a/SPECS/containerized-data-importer/containerized-data-importer.spec +++ /dev/null @@ -1,581 +0,0 @@ -# -# spec file for package containerized-data-importer -# -# Copyright (c) 2022 SUSE LLC -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via https://bugs.opensuse.org/ -# - -Summary: Container native virtualization -Name: containerized-data-importer -Version: 1.57.0 -Release: 16%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: System/Packages -URL: https://github.com/kubevirt/containerized-data-importer -Source0: https://github.com/kubevirt/containerized-data-importer/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch0: CVE-2024-3727.patch -Patch1: CVE-2022-2879.patch -Patch2: CVE-2024-24786.patch -Patch3: CVE-2024-45338.patch -Patch4: CVE-2023-39325.patch -Patch5: CVE-2023-44487.patch -Patch6: CVE-2024-28180.patch -Patch7: CVE-2023-45288.patch -Patch8: CVE-2023-3978.patch -Patch9: CVE-2025-27144.patch -Patch10: CVE-2025-22868.patch -Patch11: CVE-2025-22872.patch -BuildRequires: golang < 1.25 -BuildRequires: golang-packaging -BuildRequires: libnbd-devel -BuildRequires: pkgconfig -BuildRequires: rsync -BuildRequires: sed -Provides: cdi = %{version}-%{release} -ExclusiveArch: x86_64 aarch64 - -%description -Containerized-Data-Importer (CDI) is a persistent storage management add-on for Kubernetes - -%package api -Summary: CDI API server -Group: System/Packages -Provides: cdi-apiserver = %{version}-%{release} - -%description api -The containerized-data-importer-api package provides the kubernetes API extension for CDI - -%package cloner -Summary: Cloner for host assisted cloning -Group: System/Packages - -%description cloner -Source and Target cloner image for host assisted cloning - -%package controller -Summary: Controller for the data fetching service -Group: System/Packages - -%description controller -Controller for the data fetching service for VM container images - -%package importer -Summary: Data fetching service -Group: System/Packages -Requires: nbdkit - -%description importer -Data fetching service for VM container imagess - -%package operator -Summary: Operator for the data fetching service -Group: System/Packages - -%description operator -Operator for the data fetching service for VM container images - -%package uploadproxy -Summary: Upload proxy for the data fetching service -Group: System/Packages - -%description uploadproxy -Upload proxy for the data fetching service for VM container images - -%package uploadserver -Summary: Upload server for the data fetching service -Group: System/Packages - -%description uploadserver -Upload server for the data fetching service for VM container images - -%package manifests -Summary: YAML manifests used to install CDI -Group: System/Packages - -%description manifests -This contains the built YAML manifests used to install CDI into a -kubernetes installation with kubectl apply. - -%prep -# Unpack the sources respecting the GOPATH directory structure expected by the -# go imports resolver. I.e. if DIR is in GOPATH then DIR/src/foo/bar can be -# imported as "foo/bar". The same 'visibility' rules apply to the local copies -# of external dependencies placed in 'vendor' directory when imported from the -# 'parent' package. -# -# Note: having bar symlink'ed to DIR/src/foo/bar does not seem to work. Looks -# like symlinks in go path are not resolved correctly. Hence the sources need -# to be 'physically' placed into the proper location. -%setup -q -n go/src/kubevirt.io/%{name} -c -T -tar --strip-components=1 -xf %{SOURCE0} -%autopatch -p1 - -%build - -export GOPATH=%{_builddir}/go -export GOFLAGS="-mod=vendor" -export CDI_SOURCE_DATE_EPOCH="$(date -r LICENSE +%s)" -export CDI_GIT_COMMIT='v%{version}' -export CDI_GIT_VERSION='v%{version}' -export CDI_GIT_TREE_STATE="clean" - -GOFLAGS="-buildmode=pie ${GOFLAGS}" ./hack/build/build-go.sh build \ - cmd/cdi-apiserver \ - cmd/cdi-cloner \ - cmd/cdi-controller \ - cmd/cdi-importer \ - cmd/cdi-uploadproxy \ - cmd/cdi-uploadserver \ - cmd/cdi-operator \ - tools/cdi-image-size-detection \ - tools/cdi-source-update-poller \ - tools/csv-generator \ - %{nil} - -# Disable cgo to build static binaries, so they can run on scratch images -CGO_ENABLED=0 ./hack/build/build-go.sh build \ - tools/cdi-containerimage-server \ - %{nil} - -./hack/build/build-manifests.sh - -%install -mkdir -p %{buildroot}%{_bindir} - -install -p -m 0755 _out/cmd/cdi-apiserver/cdi-apiserver %{buildroot}%{_bindir}/cdi-apiserver - -install -p -m 0755 cmd/cdi-cloner/cloner_startup.sh %{buildroot}%{_bindir}/ -install -p -m 0755 _out/cmd/cdi-cloner/cdi-cloner %{buildroot}%{_bindir}/ - -install -p -m 0755 _out/cmd/cdi-controller/cdi-controller %{buildroot}%{_bindir}/cdi-controller - -install -p -m 0755 _out/cmd/cdi-importer/cdi-importer %{buildroot}%{_bindir}/cdi-importer - -install -p -m 0755 _out/cmd/cdi-operator/cdi-operator %{buildroot}%{_bindir}/cdi-operator - -install -p -m 0755 _out/cmd/cdi-uploadproxy/cdi-uploadproxy %{buildroot}%{_bindir}/cdi-uploadproxy - -install -p -m 0755 _out/cmd/cdi-uploadserver/cdi-uploadserver %{buildroot}%{_bindir}/cdi-uploadserver - -install -p -m 0755 _out/tools/cdi-containerimage-server/cdi-containerimage-server %{buildroot}%{_bindir}/cdi-containerimage-server - -install -p -m 0755 _out/tools/cdi-image-size-detection/cdi-image-size-detection %{buildroot}%{_bindir}/cdi-image-size-detection - -install -p -m 0755 _out/tools/cdi-source-update-poller/cdi-source-update-poller %{buildroot}%{_bindir}/cdi-source-update-poller - -install -p -m 0755 _out/tools/csv-generator/csv-generator %{buildroot}%{_bindir}/csv-generator - -# Install release manifests -mkdir -p %{buildroot}%{_datadir}/cdi/manifests/release -install -m 0644 _out/manifests/release/cdi-operator.yaml %{buildroot}%{_datadir}/cdi/manifests/release/ -install -m 0644 _out/manifests/release/cdi-cr.yaml %{buildroot}%{_datadir}/cdi/manifests/release/ - -%files api -%license LICENSE -%doc README.md -%{_bindir}/cdi-apiserver - -%files cloner -%license LICENSE -%doc README.md -%{_bindir}/cloner_startup.sh -%{_bindir}/cdi-cloner - -%files controller -%license LICENSE -%doc README.md -%{_bindir}/cdi-controller - -%files importer -%license LICENSE -%doc README.md -%{_bindir}/cdi-importer -%{_bindir}/cdi-containerimage-server -%{_bindir}/cdi-image-size-detection -%{_bindir}/cdi-source-update-poller - -%files operator -%license LICENSE -%doc README.md -%{_bindir}/cdi-operator -%{_bindir}/csv-generator - -%files uploadproxy -%license LICENSE -%doc README.md -%{_bindir}/cdi-uploadproxy - -%files uploadserver -%license LICENSE -%doc README.md -%{_bindir}/cdi-uploadserver - -%files manifests -%license LICENSE -%doc README.md -%dir %{_datadir}/cdi -%dir %{_datadir}/cdi/manifests -%dir %{_datadir}/cdi/manifests/release -%{_datadir}/cdi/manifests - -%changelog -* Fri Oct 3 2025 Lee Chee Yang - 1.57.0-16 -- merge from Azure Linux 3.0.20250910-3.0 -- Set BR for golang to < 1.25 - -* Fri May 30 2025 Ranjan Dutta - 1.57.0-15 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 - -* Fri Mar 21 2025 Anuj Mittal - 1.57.0-14 -- Bump Release to rebuild - -* Mon Mar 03 2025 Kanishk Bansal - 1.57.0-13 -- Fix CVE-2025-27144, CVE-2025-22868 - -* Sun Feb 23 2025 Sudipta Pandit - 1.57.0-12 -- Fix CVE-2023-3978 with a backported patch - -* Fri Feb 14 2025 Kanishk Bansal - 1.57.0-11 -- Address CVE-2023-45288 - -* Mon Feb 03 2025 Sharath Srikanth Chellappa - 1.57.0-10 -- Rename cdi binaries to be inline with upstream. - -* Wed Jan 29 2025 Kanishk Bansal - 1.57.0-9 -- Fix CVE-2024-28180 with an upstream patch - -* Fri Jan 24 2025 Henry Li - 1.57.0-8 -- Add patch for CVE-2023-39325 and CVE-2023-44487 - -* Tue Dec 31 2024 Rohit Rawat - 1.57.0-7 -- Add patch for CVE-2024-45338 - -* Mon Nov 25 2024 Bala - 1.57.0-6 -- Fix CVE-2024-24786 - -* Fri Sep 06 2024 Aditya Dubey - 1.57.0-5 -- Statically building binaries - -* Fri Jul 19 2024 Aditya Dubey - 1.57.0-4 -- Building cdi tool binaries within package build - -* Wed Jul 10 2024 Thien Trung Vuong - 1.57.0-3 -- Address CVE-2022-2879 by patching vendored github.com/vbatss/tar-split - -* Thu Jun 06 2024 Brian Fjeldstad - 1.57.0-2 -- Address CVE-2024-3727 by patching vendored github.com/containers/image - -* Fri Oct 27 2023 CBL-Mariner Servicing Account - 1.57.0-1 -- Auto-upgrade to 1.57.0 - Azure Linux 3.0 - package upgrades - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.55.0-16 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.55.0-15 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.55.0-14 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.55.0-13 -- Bump release to rebuild with go 1.19.11 - -* Tue Jun 27 2023 Vince Perri - 1.55.0-12 -- Add nbkdit as a dependency for the importer - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.55.0-11 -- Bump release to rebuild with go 1.19.10 - -* Fri May 26 2023 Aditya Dubey - 1.55.0-0 -- Update to verion 1.55.0 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.51.0-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.51.0-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.51.0-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.51.0-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.51.0-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.51.0-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.51.0-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Ameya Usgaonkar - 1.51.0-3 -- Shorthand nomenclature for containerized-data-importer (cdi) -- Provide api as apiserver - -* Mon Aug 22 2022 Olivia Crain - 1.51.0-2 -- Bump release to rebuild against Go 1.18.5 - -* Wed Aug 3 2022 Ameya Usgaonkar - 1.51.0-1 -- Initial changes to build for Mariner -- License verified -- Initial CBL-Mariner import from openSUSE Tumbleweed (license: same as "License" tag) - -* Fri Jul 15 2022 Vasily Ulyanov -- Update to version 1.51.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.51.0 - -* Tue Jun 21 2022 Vasily Ulyanov -- Update to version 1.50.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.50.0 - -* Tue May 31 2022 Caleb Crane -- Update to version 1.49.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.49.0 - -* Mon Apr 25 2022 Caleb Crane -- Update to version 1.48.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.48.0 - -* Mon Apr 11 2022 Vasily Ulyanov -- Update to version 1.47.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.47.0 - -* Fri Apr 1 2022 Vasily Ulyanov -- Update to version 1.46.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.46.0 - -* Thu Mar 10 2022 Vasily Ulyanov -- Update to version 1.45.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.45.0 - -* Fri Feb 4 2022 Vasily Ulyanov -- Pack only cdi-{cr,operator}.yaml into the manifests RPM - -* Tue Feb 1 2022 Vasily Ulyanov -- Update to version 1.44.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.44.0 - -* Thu Jan 13 2022 Guillaume GARDET -- Enable build on aarch64 - -* Mon Jan 10 2022 Vasily Ulyanov -- Update to version 1.43.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.43.0 - -* Sun Dec 19 2021 Vasily Ulyanov -- Update to version 1.42.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.42.0 - -* Fri Nov 26 2021 Vasily Ulyanov -- Detect SLE15 SP4 build environment - -* Fri Nov 12 2021 Vasily Ulyanov -- Update to version 1.41.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.41.0 - -* Mon Oct 11 2021 Vasily Ulyanov -- Update to version 1.40.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.40.0 - -* Tue Aug 10 2021 Vasily Ulyanov -- Update to version 1.37.1 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.37.1 - -* Mon Jul 12 2021 Vasily Ulyanov -- Update to version 1.36.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.36.0 - -* Wed Jun 30 2021 Vasily Ulyanov -- Generate meta info for containers during rpm build - -* Mon Jun 14 2021 Vasily Ulyanov -- Use registry.suse.com as the default fallback for sle -- Rename macro registry_path to kubevirt_registry_path -- Update to version 1.35.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.35.0 - -* Fri Jun 4 2021 Fabian Vogt -- Add REGISTRY variable - -* Thu May 20 2021 Vasily Ulyanov -- Update to version 1.34.0 - Release notes https://github.com/kubevirt/containerized-data-importer/releases/tag/v1.34.0 - -* Thu May 20 2021 Vasily Ulyanov -- Disable changelog generation via tar_scm service (too verbose) - -* Thu Apr 29 2021 Vasily Ulyanov -- Include release number into docker tag -- Add cdi_containers_meta build service - -* Thu Apr 29 2021 Vasily Ulyanov -- Set default reg_path='registry.opensuse.org/kubevirt' -- Add _constraints file with disk requirements -- Drop CDI_VERSION env var since its not used during the build - -* Wed Apr 21 2021 Vasily Ulyanov -- Preparation for submission to SLE15 SP2 - jsc#SLE-11089 jsc#ECO-3633 - -* Thu Apr 15 2021 Vasily Ulyanov -- Drop csv-generator - -* Wed Apr 7 2021 Vasily Ulyanov -- Update registry path - -* Fri Mar 5 2021 Vasily Ulyanov -- Fix import of vendor dependencies - * Arrange the directory layout in buildroot - * Drop manifest-build-fix.patch - * Switch to Go 1.14 (used for upstream builds) - -* Fri Feb 26 2021 James Fehlig -- Add a manifests package containing YAML manifests used to - install CDI - manifest-build-fix.patch - -* Wed Feb 24 2021 jfehlig@suse.com -- Update to version 1.30.0: - * Release to quay.io instead of docker (#1635) - * Preallocation test did not run all scenarios (#1625) - * Add diagnostic to flake test (#1626) - * VDDK: avoid crash when specified disk isn't in VM. (#1639) - * rename importController to uploadController in the upload-controller.go file (#1632) - * Simplify shouldReconcile function arguments. (#1602) - * Increase polling interval for upload annotation test (#1630) - * Remove note about VDDK 7 restriction. (#1631) - * Remove OLM integration code not removed in #982 (#1624) - * Fix typos in doc/datavolumes.md (#1621) - * Support cloning from Filesystem to Block and vice-versa (#1597) - * Add error to DV when VDDK configmap is missing. (#1627) - * Add focus for destructive tests. (#1614) - * Wait for clone to succeed before checking MD5. (#1601) - * doc: update url in doc/datavolumes.md. (#1609) - * Enable tests for featuregates (#1600) - * Make string we are checking for less specific to allow it pass for other platforms. (#1580) - * Validate image fits in filesystem in a lot more cases. take filesystem overhead into account when resizing. (#1466) - * Try to use the CDIConfig proxy URL if it is set, if not use port-forward (#1598) - * Update kubevirtci (#1579) - * Replaced file copying code with an existing utility function. (#1585) - * Global preallocation setting is not taken into account correctly. (#1565) - * Retry finding the pods for looking up the annotations. (#1583) - * Make DeletePodByName always wait for the pod to stop existing. (#1584) - * When cleaning up NFS disks, recursively delete their contents. (#1576) - * Typedef for preallocation status (#1568) - * Add Data Volume annotations documentation (#1582) - * core: Preallocate blank block volumes (#1559) - * Skip test 2555 if running on openshift (#1572) - -* Tue Jan 26 2021 jfehlig@suse.com -- Update to version 1.29.0: - * Document smartclone disable feature in markdown (#1571) - * update cdi config docs (#1556) - * Run bazelisk run //plugins/cmd/uploader:uploader -- -workspace /home/prow/go/src/github.com/kubevirt/project-infra/../containerized-data-importer/WORKSPACE -dry-run=false (#1569) - * Reduce the noise from the filesystem overhead functionality (#1558) - * VDDK: work with block devices better (BZ 1913756). (#1564) - * Add a DV/PVC annotation "storage.bind.immediate.requested" (#1560) - * Use nbdkit for direct stream for the http importer (#1508) - * Text-only changes missed in removing the Process phase (#1446) (#1562) - * Compare logs while ignoring differences in spaces. (#1557) - * update api for cert configuration (#1542) - * core: Preallocate blank image disks as well (#1555) - * Preallocation check all paths (#1535) - * Remove temporary approver status. - * Change verbosity for preallocation messages, avoid possible infinite loop (#1551) - * Add test ids to strict reconciliation tests (#1546) - * VDDK: more reliable transfers of full disks. (#1547) - * Stop Using Deprecated Packages (#1548) - * Run bazelisk run //plugins/cmd/uploader:uploader -- -workspace /home/prow/go/src/github.com/kubevirt/project-infra/../containerized-data-importer/WORKSPACE -dry-run=false (#1543) - * Preallocation support (#1498) - * VDDK: incremental copy with changed block tracking (#1517) - * Run bazelisk run //plugins/cmd/uploader:uploader -- -workspace /home/prow/go/src/github.com/kubevirt/project-infra/../containerized-data-importer/WORKSPACE -dry-run=false (#1536) - * Add maya-r to approver list. - * Simplify file host, now a new image only has to be added to bazel. (#1534) - * Update fedora 33 (#1486) - * Allow passing default multus network annotation to transfer pods (#1532) - * Try updating the node taint in a loop (#1510) - * Add an API for disabling smart-cloning. (#1461) - * Read-only clone source pods (#1524) - * Clone source program calls tar instead of getting piped input. This ensures we trap tar errors. (#1521) - * Add strict reconciliation tests (#1505) - * Allow specifying of the CONTAINER_DISK_IMAGE with a default of the current value. (#1515) - * Designate CDI as CDIConfig authority (#1516) - * Update builder to fedora 33 (#1511) - * In the operator test there is a critical addons test that removes and (#1513) - * Create a Datavolume if a coliding PVC with same name exists but is marked to delete (#1477) - * Fix make target cluster-sync-cdi, add cluster-clean-cdi & cluster-clean-test-infra (#1503) - * increase code coverage by moving utility functions from api packages (#1479) - * Pass specific PVC annotations to the transfer pods (#1480) - * Move configure_storage to test setup. (#1484) - * Make sure the DV is the main resource and single source of truth for WaitForFirstConsumer. (#1499) - * Controller support for Multistage Imports (#1450) - * Pull less from dockerhub when running testsuite (#1478) - * apiserver should serve up openapi spec (#1485) - * VDDK: Add more debug logging around nbdkit. (#1465) - * k8s-reporter: Add Endpoints logging (#1481) - * Add CDIConfig to CDI (#1475) - * Run bazelisk run //plugins/cmd/uploader:uploader -- -workspace /home/prow/go/src/github.com/fgimenez/project-infra/../../kubevirt/containerized-data-importer/WORKSPACE -dry-run=false - * Wait for stray pods to terminate, destroy/re-create at AfterEach. (#1459) - * Remove the "Process" data processor phase, simplify state machine. (#1446) - * Scratch import bug (#1424) - * Dump service resources after failed tests (#1463) - * VDDK: replace qemu-img with libnbd (#1448) - * update kubevirtci (#1457) - * Update WORKSPACE packages to non-404 ones, and add a second mirror. (#1444) - * Don't wait for NS to deleted in test before starting next test (#1439) - -* Tue Oct 27 2020 James Fehlig -- spec: Fix binary names for several CDI components - -* Mon Oct 26 2020 jfehlig@suse.com -- Update to version 1.25.0: - * Update builder image to add libnbd (#1452) - * Add make targets cluster-sync-cdi & cluster-sync-test-infra (#1451) - * Add library function to determine if a PVC is waiting for first consu… (#1442) - * Add test_ids for the tests (#1441) - * Retry upload in case upload pod wasn't 100%% ready when attempting upload (#1440) - * add finalizer to target PVC before creating clone source pod (#1429) - * Make CDI infra deployments as critical addons. (#1361) - * Fix cloning checking fsGroup test in case of use with OCS. (#1435) - * Fix types.go vs code schema verification to actually fail if they are different. (#1428) - * Add files used in OpenShift CI. (#1416) - * Retry upload in case upload pod wasn't 100%% ready when attempting upload (#1437) - * Check for expected changes after CDI upgrade (#1417) - * Files in tar archives can have paths relative to ./ (#1432) - * Attempt to schedula clone sourc/target pods on same node (#1426) - * Touch ups for filesystem overhead test cases (#1427) - * Fix imports for images with no info about MediaType. (#1413) - * Fix size mismatch between source and target in smart clone tests. Ceph no longer (#1421) - * use snappy compression for cloning instead of gzip (#1419) - * Update to k8s.io/klog/v2, used by kubernetes 1.19 (#1409) - -* Fri Oct 23 2020 jfehlig@suse.com -- Update to version 1.24.0: - * add system:authorized to groups checked for clone auth (#1415) - * Fixing CDIStatus generate-verify issues (#1412) - * Reserve overhead when validating that a Filesystem has enough space (#1319) - * Test behavior after client-side upload failure. (#1404) - * Removed hard coded registry:5000 for vddk datasource test. (#1402) - * Add library function to determine if a PVC has been populated fully. (#1400) - * Remove dependency update when building the OR CI build image (#1386) - * Add test_id for the test cases (#1398) - * Fix incorrect region parsing from aws s3 endpoint (#1395) - * Add functional test for cloning if source NS has enought quota and (#1387) - -* Fri Oct 23 2020 James Fehlig -- Initial attempt at packaging CDI diff --git a/SPECS/docker-cli/CVE-2025-11065.patch b/SPECS/docker-cli/CVE-2025-11065.patch new file mode 100644 index 0000000000..70f84de337 --- /dev/null +++ b/SPECS/docker-cli/CVE-2025-11065.patch @@ -0,0 +1,285 @@ +From 87323f38f4073be7ab9dcc66603598d0c7d827fe Mon Sep 17 00:00:00 2001 +From: Mark Sagi-Kazar +Date: Sat, 12 Jul 2025 07:25:50 +0200 +Subject: [PATCH] fix: error message leaks + +Signed-off-by: Mark Sagi-Kazar + +Upstream Patch reference: https://github.com/go-viper/mapstructure/commit/742921c9ba2854d27baa64272487fc5075d2c39c.patch + +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/go-viper/mapstructure/commit/742921c9ba2854d27baa64272487fc5075d2c39c.patch +--- + .../mitchellh/mapstructure/decode_hooks.go | 12 +- + .../mitchellh/mapstructure/error.go | 156 ++++++++++++++++++ + .../mitchellh/mapstructure/mapstructure.go | 10 +- + 3 files changed, 169 insertions(+), 9 deletions(-) + +diff --git a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +index 3a754ca..4dfab7d 100644 +--- a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go ++++ b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +@@ -134,7 +134,9 @@ func StringToTimeDurationHookFunc() DecodeHookFunc { + } + + // Convert it by parsing +- return time.ParseDuration(data.(string)) ++ d, err := time.ParseDuration(data.(string)) ++ ++ return d, wrapTimeParseDurationError(err) + } + } + +@@ -155,7 +157,7 @@ func StringToIPHookFunc() DecodeHookFunc { + // Convert it by parsing + ip := net.ParseIP(data.(string)) + if ip == nil { +- return net.IP{}, fmt.Errorf("failed parsing ip %v", data) ++ return net.IP{}, fmt.Errorf("failed parsing ip") + } + + return ip, nil +@@ -178,7 +180,7 @@ func StringToIPNetHookFunc() DecodeHookFunc { + + // Convert it by parsing + _, net, err := net.ParseCIDR(data.(string)) +- return net, err ++ return net, wrapNetParseError(err) + } + } + +@@ -197,7 +199,9 @@ func StringToTimeHookFunc(layout string) DecodeHookFunc { + } + + // Convert it by parsing +- return time.Parse(layout, data.(string)) ++ ti, err := time.Parse(layout, data.(string)) ++ ++ return ti, wrapTimeParseError(err) + } + } + +diff --git a/vendor/github.com/mitchellh/mapstructure/error.go b/vendor/github.com/mitchellh/mapstructure/error.go +index 47a99e5..8c3b078 100644 +--- a/vendor/github.com/mitchellh/mapstructure/error.go ++++ b/vendor/github.com/mitchellh/mapstructure/error.go +@@ -3,8 +3,12 @@ package mapstructure + import ( + "errors" + "fmt" ++ "net" ++ "net/url" + "sort" ++ "strconv" + "strings" ++ "time" + ) + + // Error implements the error interface and can represents multiple +@@ -48,3 +52,155 @@ func appendErrors(errors []string, err error) []string { + return append(errors, e.Error()) + } + } ++ ++func wrapStrconvNumError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*strconv.NumError); ok { ++ return &strconvNumError{Err: err} ++ } ++ ++ return err ++} ++ ++type strconvNumError struct { ++ Err *strconv.NumError ++} ++ ++func (e *strconvNumError) Error() string { ++ return "strconv." + e.Err.Func + ": " + e.Err.Err.Error() ++} ++ ++func (e *strconvNumError) Unwrap() error { return e.Err } ++ ++func wrapUrlError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*url.Error); ok { ++ return &urlError{Err: err} ++ } ++ ++ return err ++} ++ ++type urlError struct { ++ Err *url.Error ++} ++ ++func (e *urlError) Error() string { ++ return fmt.Sprintf("%s", e.Err.Err) ++} ++ ++func (e *urlError) Unwrap() error { return e.Err } ++ ++func wrapNetParseError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*net.ParseError); ok { ++ return &netParseError{Err: err} ++ } ++ ++ return err ++} ++ ++type netParseError struct { ++ Err *net.ParseError ++} ++ ++func (e *netParseError) Error() string { ++ return "invalid " + e.Err.Type ++} ++ ++func (e *netParseError) Unwrap() error { return e.Err } ++ ++func wrapTimeParseError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*time.ParseError); ok { ++ return &timeParseError{Err: err} ++ } ++ ++ return err ++} ++ ++type timeParseError struct { ++ Err *time.ParseError ++} ++ ++func (e *timeParseError) Error() string { ++ if e.Err.Message == "" { ++ return fmt.Sprintf("parsing time as %q: cannot parse as %q", e.Err.Layout, e.Err.LayoutElem) ++ } ++ ++ return "parsing time " + e.Err.Message ++} ++ ++func (e *timeParseError) Unwrap() error { return e.Err } ++ ++func wrapNetIPParseAddrError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if errMsg := err.Error(); strings.HasPrefix(errMsg, "ParseAddr") { ++ errPieces := strings.Split(errMsg, ": ") ++ ++ return fmt.Errorf("ParseAddr: %s", errPieces[len(errPieces)-1]) ++ } ++ ++ return err ++} ++ ++func wrapNetIPParseAddrPortError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ errMsg := err.Error() ++ if strings.HasPrefix(errMsg, "invalid port ") { ++ return errors.New("invalid port") ++ } else if strings.HasPrefix(errMsg, "invalid ip:port ") { ++ return errors.New("invalid ip:port") ++ } ++ ++ return err ++} ++ ++func wrapNetIPParsePrefixError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if errMsg := err.Error(); strings.HasPrefix(errMsg, "netip.ParsePrefix") { ++ errPieces := strings.Split(errMsg, ": ") ++ ++ return fmt.Errorf("netip.ParsePrefix: %s", errPieces[len(errPieces)-1]) ++ } ++ ++ return err ++} ++ ++func wrapTimeParseDurationError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ errMsg := err.Error() ++ if strings.HasPrefix(errMsg, "time: unknown unit ") { ++ return errors.New("time: unknown unit") ++ } else if strings.HasPrefix(errMsg, "time: ") { ++ idx := strings.LastIndex(errMsg, " ") ++ ++ return errors.New(errMsg[:idx]) ++ } ++ ++ return err ++} +diff --git a/vendor/github.com/mitchellh/mapstructure/mapstructure.go b/vendor/github.com/mitchellh/mapstructure/mapstructure.go +index 1efb22a..f771761 100644 +--- a/vendor/github.com/mitchellh/mapstructure/mapstructure.go ++++ b/vendor/github.com/mitchellh/mapstructure/mapstructure.go +@@ -642,7 +642,7 @@ func (d *Decoder) decodeInt(name string, data interface{}, val reflect.Value) er + if err == nil { + val.SetInt(i) + } else { +- return fmt.Errorf("cannot parse '%s' as int: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as int: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) +@@ -699,14 +699,14 @@ func (d *Decoder) decodeUint(name string, data interface{}, val reflect.Value) e + if err == nil { + val.SetUint(i) + } else { +- return fmt.Errorf("cannot parse '%s' as uint: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as uint: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) + i, err := strconv.ParseUint(string(jn), 0, 64) + if err != nil { + return fmt.Errorf( +- "error decoding json.Number into %s: %s", name, err) ++ "error decoding json.Number into %s: %s", name, wrapStrconvNumError(err)) + } + val.SetUint(i) + default: +@@ -738,7 +738,7 @@ func (d *Decoder) decodeBool(name string, data interface{}, val reflect.Value) e + } else if dataVal.String() == "" { + val.SetBool(false) + } else { +- return fmt.Errorf("cannot parse '%s' as bool: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as bool: %s", name, wrapStrconvNumError(err)) + } + default: + return fmt.Errorf( +@@ -777,7 +777,7 @@ func (d *Decoder) decodeFloat(name string, data interface{}, val reflect.Value) + if err == nil { + val.SetFloat(f) + } else { +- return fmt.Errorf("cannot parse '%s' as float: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as float: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) +-- +2.45.4 + diff --git a/SPECS/docker-cli/docker-cli.spec b/SPECS/docker-cli/docker-cli.spec index beecfb814f..48455b5f63 100644 --- a/SPECS/docker-cli/docker-cli.spec +++ b/SPECS/docker-cli/docker-cli.spec @@ -3,7 +3,7 @@ Summary: The open-source application container engine client. Name: docker-cli Version: 25.0.7 -Release: 2%{?dist} +Release: 3%{?dist} License: ASL 2.0 Vendor: Microsoft Corporation Distribution: Azure Linux @@ -13,6 +13,7 @@ Source0: https://github.com/docker/cli/archive/v%{version}.tar.gz#/%{name Source1: %{name}-%{version}-govendor-v1.tar.gz Patch0: disable_manpage_vendor.patch Patch1: CVE-2024-24786.patch +Patch2: CVE-2025-11065.patch BuildRequires: git BuildRequires: go-md2man BuildRequires: golang @@ -28,8 +29,7 @@ Obsoletes: moby-cli < %{version}-%{release} %{summary} %prep -%autosetup -p1 -n cli-%{version} -%setup -q -n cli-%{version} -T -D -a 1 +%autosetup -n cli-%{version} -a 1 -p1 mkdir -p %{OUR_GOPATH}/src/github.com/docker ln -sfT %{_builddir}/cli-%{version} %{OUR_GOPATH}/src/github.com/docker/cli @@ -81,6 +81,10 @@ install -p -m 644 contrib/completion/fish/docker.fish %{buildroot}%{_datadir}/fi %{_datadir}/fish/vendor_completions.d/docker.fish %changelog +* Mon Mar 16 2026 Lee Chee Yang - 25.0.7-3 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-11065 + * Fri Mar 21 2025 Anuj Mittal - 25.0.7-2 - Bump Release to rebuild diff --git a/SPECS/docker-compose/CVE-2024-10846.patch b/SPECS/docker-compose/CVE-2024-10846.patch deleted file mode 100644 index bf7868e735..0000000000 --- a/SPECS/docker-compose/CVE-2024-10846.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 217663fd8fd2b7b789c9f877bbd9781d887a6b07 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Mon, 3 Mar 2025 04:54:06 +0000 -Subject: [PATCH] CVE-2024-10846 -Upstream Reference: https://github.com/compose-spec/compose-go/pull/703 ---- - .../compose-go/v2/loader/reset.go | 28 ++++++++++++++++--- - 1 file changed, 24 insertions(+), 4 deletions(-) - -diff --git a/vendor/github.com/compose-spec/compose-go/v2/loader/reset.go b/vendor/github.com/compose-spec/compose-go/v2/loader/reset.go -index 2b7f04c..213d0e8 100644 ---- a/vendor/github.com/compose-spec/compose-go/v2/loader/reset.go -+++ b/vendor/github.com/compose-spec/compose-go/v2/loader/reset.go -@@ -26,13 +26,15 @@ import ( - ) - - type ResetProcessor struct { -- target interface{} -- paths []tree.Path -+ target interface{} -+ paths []tree.Path -+ visitedNodes map[*yaml.Node]string - } - - // UnmarshalYAML implement yaml.Unmarshaler - func (p *ResetProcessor) UnmarshalYAML(value *yaml.Node) error { - resolved, err := p.resolveReset(value, tree.NewPath()) -+ p.visitedNodes = nil - if err != nil { - return err - } -@@ -41,10 +43,28 @@ func (p *ResetProcessor) UnmarshalYAML(value *yaml.Node) error { - - // resolveReset detects `!reset` tag being set on yaml nodes and record position in the yaml tree - func (p *ResetProcessor) resolveReset(node *yaml.Node, path tree.Path) (*yaml.Node, error) { -+ pathStr := path.String() - // If the path contains "<<", removing the "<<" element and merging the path -- if strings.Contains(path.String(), ".<<") { -- path = tree.NewPath(strings.Replace(path.String(), ".<<", "", 1)) -+ if strings.Contains(pathStr, ".<<") { -+ path = tree.NewPath(strings.Replace(pathStr, ".<<", "", 1)) - } -+ -+ // Check for cycle -+ if p.visitedNodes == nil { -+ p.visitedNodes = make(map[*yaml.Node]string) -+ } -+ -+ // Check for cycle by seeing if the node has already been visited at this path -+ if previousPath, found := p.visitedNodes[node]; found { -+ // If the current node has been visited, we have a cycle if the previous path is a prefix -+ if strings.HasPrefix(pathStr, previousPath) { -+ return nil, fmt.Errorf("cycle detected at path: %s", pathStr) -+ } -+ } -+ -+ // Mark the current node as visited -+ p.visitedNodes[node] = pathStr -+ - // If the node is an alias, We need to process the alias field in order to consider the !override and !reset tags - if node.Kind == yaml.AliasNode { - return p.resolveReset(node.Alias, path) --- -2.45.2 - diff --git a/SPECS/docker-compose/CVE-2024-45337.patch b/SPECS/docker-compose/CVE-2024-45337.patch deleted file mode 100644 index 868ef502b5..0000000000 --- a/SPECS/docker-compose/CVE-2024-45337.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 66fd5d19c5ea8c7f4f7ff69bcc93a7c8231ce4cf Mon Sep 17 00:00:00 2001 -From: Roland Shoemaker -Date: Tue, 3 Dec 2024 09:03:03 -0800 -Subject: [PATCH] ssh: make the public key cache a 1-entry FIFO cache - -Users of the the ssh package seem to extremely commonly misuse the -PublicKeyCallback API, assuming that the key passed in the last call -before a connection is established is the key used for authentication. -Some users then make authorization decisions based on this key. This -property is not documented, and may not be correct, due to the caching -behavior of the package, resulting in users making incorrect -authorization decisions about the connection. - -This change makes the cache a one entry FIFO cache, making the assumed -property, that the last call to PublicKeyCallback represents the key -actually used for authentication, actually hold. - -Thanks to Damien Tournoud, Patrick Dawkins, Vince Parker, and -Jules Duvivier from the Platform.sh / Upsun engineering team -for reporting this issue. - -Fixes golang/go#70779 -Fixes CVE-2024-45337 - -Change-Id: Ife7c7b4045d8b6bcd7e3a417bdfae370c709797f -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/635315 -Reviewed-by: Roland Shoemaker -Auto-Submit: Gopher Robot -Reviewed-by: Damien Neil -Reviewed-by: Nicola Murino -LUCI-TryBot-Result: Go LUCI -Signed-off-by: Muhammad Falak R Wani ---- - vendor/golang.org/x/crypto/ssh/server.go | 15 +++++++++++---- - 1 file changed, 11 insertions(+), 4 deletions(-) - -diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go -index c2dfe32..39dcc09 100644 ---- a/vendor/golang.org/x/crypto/ssh/server.go -+++ b/vendor/golang.org/x/crypto/ssh/server.go -@@ -149,7 +149,7 @@ func (s *ServerConfig) AddHostKey(key Signer) { - } - - // cachedPubKey contains the results of querying whether a public key is --// acceptable for a user. -+// acceptable for a user. This is a FIFO cache. - type cachedPubKey struct { - user string - pubKeyData []byte -@@ -157,7 +157,13 @@ type cachedPubKey struct { - perms *Permissions - } - --const maxCachedPubKeys = 16 -+// maxCachedPubKeys is the number of cache entries we store. -+// -+// Due to consistent misuse of the PublicKeyCallback API, we have reduced this -+// to 1, such that the only key in the cache is the most recently seen one. This -+// forces the behavior that the last call to PublicKeyCallback will always be -+// with the key that is used for authentication. -+const maxCachedPubKeys = 1 - - // pubKeyCache caches tests for public keys. Since SSH clients - // will query whether a public key is acceptable before attempting to -@@ -179,9 +185,10 @@ func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) { - - // add adds the given tuple to the cache. - func (c *pubKeyCache) add(candidate cachedPubKey) { -- if len(c.keys) < maxCachedPubKeys { -- c.keys = append(c.keys, candidate) -+ if len(c.keys) >= maxCachedPubKeys { -+ c.keys = c.keys[1:] - } -+ c.keys = append(c.keys, candidate) - } - - // ServerConn is an authenticated SSH connection, as seen from the --- -2.34.1 - diff --git a/SPECS/docker-compose/CVE-2024-45338.patch b/SPECS/docker-compose/CVE-2024-45338.patch deleted file mode 100644 index fd085545da..0000000000 --- a/SPECS/docker-compose/CVE-2024-45338.patch +++ /dev/null @@ -1,63 +0,0 @@ -From c21b7e1c46951fdca284e42ec86d34342183fc94 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Thu, 2 Jan 2025 10:22:13 +0000 -Subject: [PATCH] Fix CVE CVE-2024-45338 in docker-compose - ---- - vendor/golang.org/x/net/html/doctype.go | 2 +- - vendor/golang.org/x/net/html/foreign.go | 3 +-- - vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/vendor/golang.org/x/net/html/doctype.go -+++ b/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/vendor/golang.org/x/net/html/foreign.go -+++ b/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 46a89ed..5b8374b 100644 ---- a/vendor/golang.org/x/net/html/parse.go -+++ b/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.39.4 - diff --git a/SPECS/docker-compose/CVE-2025-22869.patch b/SPECS/docker-compose/CVE-2025-22869.patch deleted file mode 100644 index c0415fddb0..0000000000 --- a/SPECS/docker-compose/CVE-2025-22869.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 041b89a18f81265899e42e6801f830c101a96120 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Sun, 2 Mar 2025 13:46:00 +0000 -Subject: [PATCH] CVE-2025-22869 - -Upstream Reference : https://github.com/golang/crypto/commit/7292932d45d55c7199324ab0027cc86e8198aa22 - -ssh: limit the size of the internal packet queue while waiting for KEX - -In the SSH protocol, clients and servers execute the key exchange to -generate one-time session keys used for encryption and authentication. -The key exchange is performed initially after the connection is -established and then periodically after a configurable amount of data. -While a key exchange is in progress, we add the received packets to an -internal queue until we receive SSH_MSG_KEXINIT from the other side. -This can result in high memory usage if the other party is slow to -respond to the SSH_MSG_KEXINIT packet, or memory exhaustion if a -malicious client never responds to an SSH_MSG_KEXINIT packet during a -large file transfer. -We now limit the internal queue to 64 packets: this means 2MB with the -typical 32KB packet size. -When the internal queue is full we block further writes until the -pending key exchange is completed or there is a read or write error. - -Thanks to Yuichi Watanabe for reporting this issue. - -Change-Id: I1ce2214cc16e08b838d4bc346c74c72addafaeec -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/652135 -Reviewed-by: Neal Patel -Auto-Submit: Gopher Robot -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI - ---- - vendor/golang.org/x/crypto/ssh/handshake.go | 47 ++++++++++++++++----- - 1 file changed, 37 insertions(+), 10 deletions(-) - -diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go -index 70a7369..e14eb6c 100644 ---- a/vendor/golang.org/x/crypto/ssh/handshake.go -+++ b/vendor/golang.org/x/crypto/ssh/handshake.go -@@ -24,6 +24,11 @@ const debugHandshake = false - // quickly. - const chanSize = 16 - -+// maxPendingPackets sets the maximum number of packets to queue while waiting -+// for KEX to complete. This limits the total pending data to maxPendingPackets -+// * maxPacket bytes, which is ~16.8MB. -+const maxPendingPackets = 64 -+ - // keyingTransport is a packet based transport that supports key - // changes. It need not be thread-safe. It should pass through - // msgNewKeys in both directions. -@@ -58,11 +63,19 @@ type handshakeTransport struct { - incoming chan []byte - readError error - -- mu sync.Mutex -- writeError error -- sentInitPacket []byte -- sentInitMsg *kexInitMsg -- pendingPackets [][]byte // Used when a key exchange is in progress. -+ mu sync.Mutex -+ // Condition for the above mutex. It is used to notify a completed key -+ // exchange or a write failure. Writes can wait for this condition while a -+ // key exchange is in progress. -+ writeCond *sync.Cond -+ writeError error -+ sentInitPacket []byte -+ sentInitMsg *kexInitMsg -+ // Used to queue writes when a key exchange is in progress. The length is -+ // limited by pendingPacketsSize. Once full, writes will block until the key -+ // exchange is completed or an error occurs. If not empty, it is emptied -+ // all at once when the key exchange is completed in kexLoop. -+ pendingPackets [][]byte - writePacketsLeft uint32 - writeBytesLeft int64 - -@@ -114,6 +127,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, - - config: config, - } -+ t.writeCond = sync.NewCond(&t.mu) - t.resetReadThresholds() - t.resetWriteThresholds() - -@@ -236,6 +250,7 @@ func (t *handshakeTransport) recordWriteError(err error) { - defer t.mu.Unlock() - if t.writeError == nil && err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - } - -@@ -339,6 +354,8 @@ write: - } - } - t.pendingPackets = t.pendingPackets[:0] -+ // Unblock writePacket if waiting for KEX. -+ t.writeCond.Broadcast() - t.mu.Unlock() - } - -@@ -526,11 +543,20 @@ func (t *handshakeTransport) writePacket(p []byte) error { - } - - if t.sentInitMsg != nil { -- // Copy the packet so the writer can reuse the buffer. -- cp := make([]byte, len(p)) -- copy(cp, p) -- t.pendingPackets = append(t.pendingPackets, cp) -- return nil -+ if len(t.pendingPackets) < maxPendingPackets { -+ // Copy the packet so the writer can reuse the buffer. -+ cp := make([]byte, len(p)) -+ copy(cp, p) -+ t.pendingPackets = append(t.pendingPackets, cp) -+ return nil -+ } -+ for t.sentInitMsg != nil { -+ // Block and wait for KEX to complete or an error. -+ t.writeCond.Wait() -+ if t.writeError != nil { -+ return t.writeError -+ } -+ } - } - - if t.writeBytesLeft > 0 { -@@ -547,6 +573,7 @@ func (t *handshakeTransport) writePacket(p []byte) error { - - if err := t.pushPacket(p); err != nil { - t.writeError = err -+ t.writeCond.Broadcast() - } - - return nil --- -2.45.2 - diff --git a/SPECS/docker-compose/CVE-2025-22872.patch b/SPECS/docker-compose/CVE-2025-22872.patch deleted file mode 100644 index a9203f2a9a..0000000000 --- a/SPECS/docker-compose/CVE-2025-22872.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 01035da6c5be2080f75765d9ebbb462614d7e81a Mon Sep 17 00:00:00 2001 -From: jykanase -Date: Tue, 22 Apr 2025 08:15:38 +0000 -Subject: [PATCH] CVE-2025-22872 - -Upstream patch reference: https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9 ---- - vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go -index 3c57880..6598c1f 100644 ---- a/vendor/golang.org/x/net/html/token.go -+++ b/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.2 - diff --git a/SPECS/docker-compose/docker-compose.signatures.json b/SPECS/docker-compose/docker-compose.signatures.json deleted file mode 100644 index 556ee15405..0000000000 --- a/SPECS/docker-compose/docker-compose.signatures.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Signatures": { - "docker-compose-2.27.0.tar.gz": "29b2232d1609dff03db74188a7944c85ba8b612f47a7e39938a43db8fb7d7067", - "docker-compose-2.27.0-govendor-v1.tar.gz": "c134fd4acc74f4f5f8b6cbfa7044ebcd12f558db193f92577323c284fca70a04" - } -} diff --git a/SPECS/docker-compose/docker-compose.spec b/SPECS/docker-compose/docker-compose.spec deleted file mode 100644 index c6c0e53490..0000000000 --- a/SPECS/docker-compose/docker-compose.spec +++ /dev/null @@ -1,95 +0,0 @@ -Summary: Define and run multi-container applications with Docker -Name: docker-compose -Version: 2.27.0 -Release: 6%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Tools/Container -URL: https://github.com/docker/compose -Source0: https://github.com/docker/compose/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -# Leverage the `generate_source_tarball.sh` to create the vendor sources -# NOTE: govendor-v1 format is for inplace CVE updates so that we do not have to overwrite in the blob-store. -# After fixing any possible CVE for the vendored source, we must bump v1 -> v2 -Source1: %{name}-%{version}-govendor-v1.tar.gz -Patch0: CVE-2024-45337.patch -Patch1: CVE-2024-45338.patch -Patch2: CVE-2025-22869.patch -Patch3: CVE-2024-10846.patch -Patch4: CVE-2025-22872.patch -BuildRequires: golang -Requires: docker-cli -Obsoletes: moby-compose < %{version}-%{release} -Provides: moby-compose = %{version}-%{release} - - -%description -Compose is a tool for defining and running multi-container Docker applications. -With Compose, you use a YAML file to configure your application’s services. -Then, with a single command, you create and start all the services from your -configuration. - -%prep -%autosetup -p1 -n compose-%{version} -a 1 - -%build -go build \ - -mod=vendor \ - -trimpath \ - -tags e2e \ - -ldflags "-w -X github.com/docker/compose/v2/internal.Version=%{version}" \ - -o ./bin/build/docker-compose ./cmd - -%install -mkdir -p "%{buildroot}/%{_libexecdir}/docker/cli-plugins" -install -D -m0755 bin/build/docker-compose %{buildroot}/%{_libexecdir}/docker/cli-plugins - -%files -%license LICENSE -%{_libexecdir}/docker/cli-plugins/docker-compose - -%changelog -* Fri May 30 2025 Ranjan Dutta - 2.27.0-6 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 - -* Fri Mar 21 2025 Anuj Mittal - 2.27.0-5 -- Bump Release to rebuild - -* Mon Mar 03 2025 Kanishk Bansal - 2.27.0-4 -- Fix CVE-2025-22869, CVE-2024-10846 with an upstream patch - -* Tue Dec 31 2024 Rohit Rawat - 2.27.0-3 -- Add patch for CVE-2024-45338 - -* Wed Jan 08 2025 Muhammad Falak - 2.27.0-2 -- Patch CVE-2024-45337 - -* Thu May 02 2024 CBL-Mariner Servicing Account - 2.27.0-1 -- Auto-upgrade to 2.27.0 - address CVE-2024-23653 - -* Wed Mar 20 2024 Henry Beberman - 2.24.6-2 -- Correct license to ASL 2.0 - -* Mon Feb 26 2024 Henry Beberman - 2.24.6-1 -- Rename spec from moby-compose to docker-compose -- Bump version to 2.24.6 - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 2.17.2-6 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 2.17.2-5 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 2.17.2-4 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 2.17.2-3 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 2.17.2-2 -- Bump release to rebuild with go 1.19.10 - -* Tue Mar 14 2023 Muhammad Falak R Wani - 2.17.2-1 -- Original version for CBL-Mariner -- License Verified diff --git a/SPECS/docker-compose/generate_source_tarball.sh b/SPECS/docker-compose/generate_source_tarball.sh deleted file mode 100755 index 12e68805bb..0000000000 --- a/SPECS/docker-compose/generate_source_tarball.sh +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -# Quit on failure -set -e - -PKG_VERSION="" -SRC_TARBALL="" -VENDOR_VERSION="1" -OUT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# parameters: -# -# --srcTarball : src tarball file -# this file contains the 'initial' source code of the component -# and should be replaced with the new/modified src code -# --outFolder : folder where to copy the new tarball(s) -# --pkgVersion : package version -# --vendorVersion : vendor version -# -PARAMS="" -while (( "$#" )); do - case "$1" in - --srcTarball) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - SRC_TARBALL=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - --outFolder) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - OUT_FOLDER=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - --pkgVersion) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - PKG_VERSION=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - --vendorVersion) - if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then - VENDOR_VERSION=$2 - shift 2 - else - echo "Error: Argument for $1 is missing" >&2 - exit 1 - fi - ;; - -*|--*=) # unsupported flags - echo "Error: Unsupported flag $1" >&2 - exit 1 - ;; - *) # preserve positional arguments - PARAMS="$PARAMS $1" - shift - ;; - esac -done - -echo "--srcTarball -> $SRC_TARBALL" -echo "--outFolder -> $OUT_FOLDER" -echo "--pkgVersion -> $PKG_VERSION" -echo "--vendorVersion -> $VENDOR_VERSION" - -if [ -z "$PKG_VERSION" ]; then - echo "--pkgVersion parameter cannot be empty" - exit 1 -fi - -echo "-- create temp folder" -tmpdir=$(mktemp -d) -function cleanup { - echo "+++ cleanup -> remove $tmpdir" - rm -rf $tmpdir -} -trap cleanup EXIT - -TARBALL_FOLDER="$tmpdir/tarballFolder" -mkdir -p $TARBALL_FOLDER -cp $SRC_TARBALL $tmpdir - -pushd $tmpdir > /dev/null - -PKG_NAME="docker-compose" -NAME_VER="$PKG_NAME-$PKG_VERSION" -VENDOR_TARBALL="$OUT_FOLDER/$NAME_VER-govendor-v$VENDOR_VERSION.tar.gz" - -echo "Unpacking source tarball..." -tar -xf $SRC_TARBALL - -echo "Vendor go modules..." -cd compose-"$PKG_VERSION" -go mod vendor - -echo "" -echo "=========================" -echo "Tar vendored tarball" -tar --sort=name \ - --mtime="2021-04-26 00:00Z" \ - --owner=0 --group=0 --numeric-owner \ - --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ - -czf "$VENDOR_TARBALL" vendor - -popd > /dev/null -echo "$PKG_NAME vendored modules are available at $VENDOR_TARBALL" diff --git a/SPECS/dracut/0006-dracut.sh-validate-instmods-calls.patch b/SPECS/dracut/0006-dracut.sh-validate-instmods-calls.patch deleted file mode 100644 index 5f2273a143..0000000000 --- a/SPECS/dracut/0006-dracut.sh-validate-instmods-calls.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 6eca9468a981bd5188a04ff0dd4638e828b0bb65 Mon Sep 17 00:00:00 2001 -From: Shreenidhi Shedi -Date: Wed, 1 Mar 2023 01:29:02 +0530 -Subject: [PATCH] dracut.sh: validate instmods calls - -Signed-off-by: Shreenidhi Shedi ---- - dracut.sh | 15 ++++++++++++--- - modules.d/01fips/module-setup.sh | 8 +++++--- - 2 files changed, 17 insertions(+), 6 deletions(-) - -diff --git a/dracut.sh b/dracut.sh -index cc6d6f28..ff541e79 100755 ---- a/dracut.sh -+++ b/dracut.sh -@@ -1970,11 +1970,17 @@ if [[ $no_kernel != yes ]]; then - - if [[ -n ${add_drivers// /} ]]; then - # shellcheck disable=SC2086 -- hostonly='' instmods -c $add_drivers -+ if ! hostonly='' instmods -c $add_drivers; then -+ dfatal "instmods failed for add_drivers: $add_drivers" -+ exit 1 -+ fi - fi - if [[ $force_drivers ]]; then - # shellcheck disable=SC2086 -- hostonly='' instmods -c $force_drivers -+ if ! hostonly='' instmods -c $force_drivers; then -+ dfatal "instmods failed for force_drivers: $force_drivers" -+ exit 1 -+ fi - rm -f "$initdir"/etc/cmdline.d/20-force_driver.conf - for mod in $force_drivers; do - echo "rd.driver.pre=$mod" >> "$initdir"/etc/cmdline.d/20-force_drivers.conf -@@ -1982,7 +1988,10 @@ if [[ $no_kernel != yes ]]; then - fi - if [[ $filesystems ]]; then - # shellcheck disable=SC2086 -- hostonly='' instmods -c $filesystems -+ if ! hostonly='' instmods -c $filesystems; then -+ dfatal "instmods failed for filesystems: $filesystems" -+ exit 1 -+ fi - fi - - dinfo "*** Installing kernel module dependencies ***" -diff --git a/modules.d/01fips/module-setup.sh b/modules.d/01fips/module-setup.sh -index 83fcd564..3e3a7c88 100755 ---- a/modules.d/01fips/module-setup.sh -+++ b/modules.d/01fips/module-setup.sh -@@ -40,10 +40,12 @@ installkernel() { - fi - - for _mod in $_fipsmodules; do -- if hostonly='' instmods -c -s "$_mod"; then -- echo "$_mod" >> "${initdir}/etc/fipsmodules" -- echo "blacklist $_mod" >> "${initdir}/etc/fips.conf" -+ if ! hostonly='' instmods -c -s "$_mod"; then -+ dfatal "ERROR: instmods -c -s $_mod failed" -+ return 1 - fi -+ echo "$_mod" >> "${initdir}/etc/fipsmodules" -+ echo "blacklist $_mod" >> "${initdir}/etc/fips.conf" - done - - # with hostonly_default_device fs module for /boot is not installed by default --- -2.34.1 - diff --git a/SPECS/dracut/dracut.spec b/SPECS/dracut/dracut.spec index 264c8c2bc2..bbda1c133b 100644 --- a/SPECS/dracut/dracut.spec +++ b/SPECS/dracut/dracut.spec @@ -4,7 +4,7 @@ Summary: dracut to create initramfs Name: dracut Version: 102 -Release: 15%{?dist} +Release: 16%{?dist} # The entire source code is GPLv2+ # except install/* which is LGPLv2+ License: GPLv2+ AND LGPLv2+ @@ -50,7 +50,6 @@ Patch: allow-liveos-overlay-no-user-confirmation-prompt.patch # azl-liveos-artifacts-download.sh) - which are included as separate sources in # this package. Patch: add-livenet-download-service.patch -Patch: 0006-dracut.sh-validate-instmods-calls.patch Patch: 0011-Remove-reference-to-kernel-module-zlib-in-fips-module.patch Patch: 0012-fix-dracut-functions-avoid-awk-in-get_maj_min.patch Patch: 0013-revert-fix-crypt-unlock-encrypted-devices-by-default.patch @@ -345,6 +344,10 @@ ln -srv %{buildroot}%{_bindir}/%{name} %{buildroot}%{_sbindir}/%{name} %dir %{_sharedstatedir}/%{name}/overlay %changelog +* Mon Mar 16 2026 Lee Chee Yang - 102-16 +- merge from Azure Linux 3.0.20260304-3.0 +- Remove old dracut-validate-instmods-calls patch to support both 6.6 and 6.12 versions. + * Fri May 30 2025 Lishan Liu - 102-15 - Update tmpfs mount command in tmpfsroot-mount.sh diff --git a/SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch b/SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch deleted file mode 100644 index 604eec6b08..0000000000 --- a/SPECS/edk2/0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b1df949609eb0bf0df4e5958e8665433d856174d Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 4 Jun 2020 13:34:12 +0200 -Subject: [PATCH 01/17] BaseTools: do not build BrotliCompress (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- no change - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- New patch. - -BrotliCompress is not used for building ArmVirtPkg or OvmfPkg platforms. -It depends on one of the upstream Brotli git submodules that we removed -earlier in this rebase series. (See patch "remove upstream edk2's Brotli -submodules (RH only"). - -Do not attempt to build BrotliCompress. - -Signed-off-by: Laszlo Ersek -(cherry picked from commit db8ccca337e2c5722c1d408d2541cf653d3371a2) ---- - BaseTools/Source/C/GNUmakefile | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile -index 5275f657efe8..39d719975309 100644 ---- a/BaseTools/Source/C/GNUmakefile -+++ b/BaseTools/Source/C/GNUmakefile -@@ -51,7 +51,6 @@ all: makerootdir subdirs - LIBRARIES = Common - VFRAUTOGEN = VfrCompile/VfrLexer.h - APPLICATIONS = \ -- BrotliCompress \ - VfrCompile \ - EfiRom \ - GenFfs \ --- -2.45.0 - diff --git a/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch b/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch deleted file mode 100644 index 61b5608862..0000000000 --- a/SPECS/edk2/0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 9de592b920018344719eecd2eb1975c694e765d5 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 4 Jun 2020 13:39:08 +0200 -Subject: [PATCH 02/17] MdeModulePkg: remove package-private Brotli include - path (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- no change - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- New patch. - -Originating from upstream commit 58802e02c41b -("MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule", -2020-04-16), "MdeModulePkg/MdeModulePkg.dec" contains a package-internal -include path into a Brotli submodule. - -The edk2 build system requires such include paths to resolve successfully, -regardless of the firmware platform being built. Because -BrotliCustomDecompressLib is not consumed by any OvmfPkg or ArmVirtPkg -platforms, and we've removed the submodule earlier in this patch set, -remove the include path too. - -Signed-off-by: Laszlo Ersek -(cherry picked from commit e05e0de713c4a2b8adb6ff9809611f222bfe50ed) ---- - MdeModulePkg/MdeModulePkg.dec | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec -index f7339f0aec96..badb93238ff1 100644 ---- a/MdeModulePkg/MdeModulePkg.dec -+++ b/MdeModulePkg/MdeModulePkg.dec -@@ -26,9 +26,6 @@ [Includes] - Include - Test/Mock/Include - --[Includes.Common.Private] -- Library/BrotliCustomDecompressLib/brotli/c/include -- - [LibraryClasses] - ## @libraryclass Defines a set of methods to reset whole system. - ResetSystemLib|Include/Library/ResetSystemLib.h --- -2.45.0 - diff --git a/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch b/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch deleted file mode 100644 index d6731ac59e..0000000000 --- a/SPECS/edk2/0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch +++ /dev/null @@ -1,180 +0,0 @@ -From 83b44bcbad5cb3e8df5505ea0cdc6d5d319b3612 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 25 Feb 2014 22:40:01 +0100 -Subject: [PATCH 03/17] MdeModulePkg: TerminalDxe: set xterm resolution on mode - change (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Resolve harmless conflict in "MdeModulePkg/MdeModulePkg.dec", - originating from new upstream commits - - 45bc28172fbf ("MdeModulePkg.dec: Change PCDs for status code.", - 2020-06-18), - - 0785c619a58a ("MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe Resizable - BAR Capability", 2021-01-04), - - ef23012e5439 ("MdeModulePkg: Change default value of - PcdPcieResizableBarSupport to FALSE", 2021-01-14). - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- Resolve trivial conflict in "MdeModulePkg/MdeModulePkg.dec", arising - from upstream commit 166830d8f7ca ("MdeModulePkg/dec: add - PcdTcgPfpMeasurementRevision PCD", 2020-01-06). - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- Conflict in "MdeModulePkg/MdeModulePkg.dec" due to upstream commits - - 1103ba946aee ("MdeModulePkg: Add Capsule On Disk related definition.", - 2019-06-26), - - 1c7b3eb84631 ("MdeModulePkg/DxeIpl: Introduce PCD - PcdUse5LevelPageTable", 2019-08-09), - with easy manual resolution. - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- no change - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no change - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- Refresh downstream-only commit 2909e025db68 against "MdeModulePkg.dec" - context change from upstream commits e043f7895b83 ("MdeModulePkg: Add - PCD PcdPteMemoryEncryptionAddressOrMask", 2017-02-27) and 76081dfcc5b2 - ("MdeModulePkg: Add PROMPT&HELP string of pcd to UNI file", 2017-03-03). - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- refresh commit 519b9751573e against various context changes - -The - - CSI Ps ; Ps ; Ps t - -escape sequence serves for window manipulation. We can use the - - CSI 8 ; ; t - -sequence to adapt eg. the xterm window size to the selected console mode. - -Reference: -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 2909e025db6878723b49644a8a0cf160d07e6444) -(cherry picked from commit b9c5c901f25e48d68eef6e78a4abca00e153f574) -(cherry picked from commit b7f6115b745de8cbc5214b6ede33c9a8558beb90) -(cherry picked from commit 67415982afdc77922aa37496c981adeb4351acdb) -(cherry picked from commit cfccb98d13e955beb0b93b4a75a973f30c273ffc) -(cherry picked from commit a11602f5e2ef930be5b693ddfd0c789a1bd4c60c) -(cherry picked from commit bc2266f20de5db1636e09a07e4a72c8dbf505f5a) ---- - MdeModulePkg/MdeModulePkg.dec | 4 +++ - .../Console/TerminalDxe/TerminalDxe.inf | 2 ++ - .../Console/TerminalDxe/TerminalConOut.c | 29 +++++++++++++++++++ - 3 files changed, 35 insertions(+) - -diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec -index badb93238ff1..5ee6db534d41 100644 ---- a/MdeModulePkg/MdeModulePkg.dec -+++ b/MdeModulePkg/MdeModulePkg.dec -@@ -2222,6 +2222,10 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] - # @Prompt The value is use for Usb Network rate limiting supported. - gEfiMdeModulePkgTokenSpaceGuid.PcdUsbNetworkRateLimitingFactor|100|UINT32|0x10000028 - -+ ## Controls whether TerminalDxe outputs an XTerm resize sequence on terminal -+ # mode change. -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE|BOOLEAN|0x00010080 -+ - [PcdsPatchableInModule] - ## Specify memory size with page number for PEI code when - # Loading Module at Fixed Address feature is enabled. -diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -index b2a8aeba8510..eff625346539 100644 ---- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -@@ -55,6 +55,7 @@ [LibraryClasses] - DebugLib - PcdLib - BaseLib -+ PrintLib - - [Guids] - ## SOMETIMES_PRODUCES ## Variable:L"ConInDev" -@@ -87,6 +88,7 @@ [Protocols] - [Pcd] - gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType ## SOMETIMES_CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## CONSUMES - - # [Event] - # # Relative timer event set by UnicodeToEfiKey(), used to be one 2 seconds input timeout. -diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -index 7809869e7d49..496849458db4 100644 ---- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c -@@ -7,6 +7,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - - **/ - -+#include -+ - #include "Terminal.h" - - // -@@ -80,6 +82,15 @@ CHAR16 mSetCursorPositionString[] = { ESC, '[', '0', '0', ';', '0', '0', 'H', 0 - CHAR16 mCursorForwardString[] = { ESC, '[', '0', '0', 'C', 0 }; - CHAR16 mCursorBackwardString[] = { ESC, '[', '0', '0', 'D', 0 }; - -+// -+// Note that this is an ASCII format string, taking two INT32 arguments: -+// rows, columns. -+// -+// A %d (INT32) format specification can expand to at most 11 characters. -+// -+CHAR8 mResizeTextAreaFormatString[] = "\x1B[8;%d;%dt"; -+#define RESIZE_SEQ_SIZE (sizeof mResizeTextAreaFormatString + 2 * (11 - 2)) -+ - // - // Body of the ConOut functions - // -@@ -498,6 +509,24 @@ TerminalConOutSetMode ( - return EFI_DEVICE_ERROR; - } - -+ if (PcdGetBool (PcdResizeXterm)) { -+ CHAR16 ResizeSequence[RESIZE_SEQ_SIZE]; -+ -+ UnicodeSPrintAsciiFormat ( -+ ResizeSequence, -+ sizeof ResizeSequence, -+ mResizeTextAreaFormatString, -+ (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows, -+ (INT32)TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns -+ ); -+ TerminalDevice->OutputEscChar = TRUE; -+ Status = This->OutputString (This, ResizeSequence); -+ TerminalDevice->OutputEscChar = FALSE; -+ if (EFI_ERROR (Status)) { -+ return EFI_DEVICE_ERROR; -+ } -+ } -+ - This->Mode->Mode = (INT32)ModeNumber; - - Status = This->ClearScreen (This); --- -2.45.0 - diff --git a/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch b/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch deleted file mode 100644 index a079e958ad..0000000000 --- a/SPECS/edk2/0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 895195c00cc87545d751a6b063cdf7e19d2d8fe8 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 14 Oct 2015 15:59:06 +0200 -Subject: [PATCH 04/17] OvmfPkg: take PcdResizeXterm from the QEMU command line - (RH only) - -edk2-stable202205 rebase - -- re-add UPDATE_BOOLEAN_PCD_FROM_FW_CFG -- add microvm, cloudhw and inteltdx - -edk2-stable202108 rebase - -- resolve conflict in OvmfPkg/PlatformPei/PlatformPei.inf - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been - introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit - to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. - - We've always patched all those DSC/FDF files in OvmfPkg down-stream that - made sense at least in theory on QEMU. (For example, we've always - patched "OvmfPkgIa32.dsc" and "OvmfPkgIa32.fdf", even though we never - build or ship the pure IA32 firmware platform.) Follow suit with - "AmdSevX64.dsc". - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- Resolve contextual conflict in the DSC files, from upstream commit - b0ed7ebdebd1 ("OvmfPkg: set fixed FlashNvStorage base addresses with -D - SMM_REQUIRE", 2020-03-12). - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- no change - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- no change - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no change - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- refresh downstream-only commit 8abc2a6ddad2 against context differences - in the DSC files from upstream commit 5e167d7e784c - ("OvmfPkg/PlatformPei: don't allocate reserved mem varstore if - SMM_REQUIRE", 2017-03-12). - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- no changes - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit 6fa0c4d67c0bb8bde2ddd6db41c19eb0c40b2721) -(cherry picked from commit 8abc2a6ddad25af7e88dc0cf57d55dfb75fbf92d) -(cherry picked from commit b311932d3841c017a0f0fec553edcac365cc2038) -(cherry picked from commit 61914fb81cf624c9028d015533b400b2794e52d3) -(cherry picked from commit 2ebf3cc2ae99275d63bb6efd3c22dec76251a853) -(cherry picked from commit f9b73437b9b231773c1a20e0c516168817a930a2) -(cherry picked from commit 2cc462ee963d0be119bc97bfc9c70d292a40516f) -(cherry picked from commit 51e0de961029af84b5bdbfddcc9762b1819d500f) ---- - OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + - OvmfPkg/CloudHv/CloudHvX64.dsc | 1 + - OvmfPkg/IntelTdx/IntelTdxX64.dsc | 1 + - OvmfPkg/Microvm/MicrovmX64.dsc | 1 + - OvmfPkg/OvmfPkgIa32.dsc | 1 + - OvmfPkg/OvmfPkgIa32X64.dsc | 1 + - OvmfPkg/OvmfPkgX64.dsc | 1 + - OvmfPkg/PlatformPei/PlatformPei.inf | 1 + - OvmfPkg/PlatformPei/Platform.c | 13 +++++++++++++ - 9 files changed, 21 insertions(+) - -diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc -index 8eb6f4f24fa8..05076ff7f079 100644 ---- a/OvmfPkg/AmdSev/AmdSevX64.dsc -+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc -@@ -484,6 +484,7 @@ [PcdsFixedAtBuild] - [PcdsDynamicDefault] - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 -diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc -index 4996885301fa..243c6c6e49d8 100644 ---- a/OvmfPkg/CloudHv/CloudHvX64.dsc -+++ b/OvmfPkg/CloudHv/CloudHvX64.dsc -@@ -581,6 +581,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - !if $(SMM_REQUIRE) == FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 -diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc -index 0931ce061a1a..f55f821a42cc 100644 ---- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc -+++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc -@@ -477,6 +477,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 -diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc -index 69de4dd3f148..2025cd88a791 100644 ---- a/OvmfPkg/Microvm/MicrovmX64.dsc -+++ b/OvmfPkg/Microvm/MicrovmX64.dsc -@@ -591,6 +591,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0 -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 1be021be7140..4aa47ac79ba2 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -600,6 +600,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - !if $(SMM_REQUIRE) == FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index d27a4c7278c2..16f415821001 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -612,6 +612,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - !if $(SMM_REQUIRE) == FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 8f5cd23b2ec0..0b8cb74ce099 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -630,6 +630,7 @@ [PcdsDynamicDefault] - # ($(SMM_REQUIRE) == FALSE) - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE - !if $(SMM_REQUIRE) == FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0 -diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/PlatformPei.inf -index e036018eab39..7103e109b88e 100644 ---- a/OvmfPkg/PlatformPei/PlatformPei.inf -+++ b/OvmfPkg/PlatformPei/PlatformPei.inf -@@ -103,6 +103,7 @@ [Pcd] - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode - gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable - gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack -diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c -index df35726ff650..278135a66368 100644 ---- a/OvmfPkg/PlatformPei/Platform.c -+++ b/OvmfPkg/PlatformPei/Platform.c -@@ -41,6 +41,18 @@ - - #include "Platform.h" - -+#define UPDATE_BOOLEAN_PCD_FROM_FW_CFG(TokenName) \ -+ do { \ -+ BOOLEAN Setting; \ -+ RETURN_STATUS PcdStatus; \ -+ \ -+ if (!RETURN_ERROR (QemuFwCfgParseBool ( \ -+ "opt/ovmf/" #TokenName, &Setting))) { \ -+ PcdStatus = PcdSetBoolS (TokenName, Setting); \ -+ ASSERT_RETURN_ERROR (PcdStatus); \ -+ } \ -+ } while (0) -+ - EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, -@@ -355,6 +367,7 @@ InitializePlatform ( - MemTypeInfoInitialization (PlatformInfoHob); - MemMapInitialization (PlatformInfoHob); - NoexecDxeInitialization (PlatformInfoHob); -+ UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdResizeXterm); - } - - InstallClearCacheCallback (); --- -2.45.0 - diff --git a/SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch b/SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch deleted file mode 100644 index 4a47d8b51b..0000000000 --- a/SPECS/edk2/0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 97f1f3f002f2f16fd03d43c66937b408cc954feb Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Sun, 26 Jul 2015 08:02:50 +0000 -Subject: [PATCH 05/17] ArmVirtPkg: take PcdResizeXterm from the QEMU command - line (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- no change - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- Resolve leading context divergence in "ArmVirtPkg/ArmVirtQemu.dsc", - arising from upstream commits: - - - 82662a3b5f56 ("ArmVirtPkg/PlatformPeiLib: discover the TPM base - address from the DT", 2020-03-04) - - - ddd34a818315 ("ArmVirtPkg/ArmVirtQemu: enable TPM2 support in the PEI - phase", 2020-03-04) - - - cdc3fa54184a ("ArmVirtPkg: control PXEv4 / PXEv6 boot support from the - QEMU command line", 2020-04-28) - -- Rework the downstream patch quite a bit, paralleling the upstream work - done for in commit - range 64ab457d1f21..cdc3fa54184a: - - - Refresh copyright year in TerminalPcdProducerLib.{inf,c}. Also replace - open-coded BSDL with "SPDX-License-Identifier: BSD-2-Clause-Patent". - - - Simplify LIBRARY_CLASS: this lib instance is meant to be consumed only - via NULL class resolution (basically: as a plugin), so use NULL for - LIBRARY_CLASS, not "TerminalPcdProducerLib|DXE_DRIVER". - - - Sort the [Packages] section alphabetically in the INF file. - - - Replace the open-coded GetNamedFwCfgBoolean() function with a call to - QemuFwCfgParseBool(), from QemuFwCfgSimpleParserLib. - - - Add the SOMETIMES_PRODUCES usage comment in the [Pcd] section of the - INF file. - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- no change - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- no change - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no change - -Notes about the 20170228-c325e41585e3 -> 20171011-92d07e48907f rebase: - -- Refresh downstream-only commit d4564d39dfdb against context changes in - "ArmVirtPkg/ArmVirtQemu.dsc" from upstream commit 7e5f1b673870 - ("ArmVirtPkg/PlatformHasAcpiDtDxe: allow guest level ACPI disable - override", 2017-03-29). - -Notes about the 20160608b-988715a -> 20170228-c325e41585e3 rebase: - -- Adapt commit 6b97969096a3 to the fact that upstream has deprecated such - setter functions for dynamic PCDs that don't return a status code (such - as PcdSetBool()). Employ PcdSetBoolS(), and assert that it succeeds -- - there's really no circumstance in this case when it could fail. - -Contributed-under: TianoCore Contribution Agreement 1.0 -Signed-off-by: Laszlo Ersek -(cherry picked from commit d4564d39dfdbf74e762af43314005a2c026cb262) -(cherry picked from commit c9081ebe3bcd28e5cce4bf58bd8d4fca12f9af7c) -(cherry picked from commit 8e92730c8e1cdb642b3b3e680e643ff774a90c65) -(cherry picked from commit 9448b6b46267d8d807fac0c648e693171bb34806) -(cherry picked from commit 232fcf06f6b3048b7c2ebd6931f23186b3852f04) -(cherry picked from commit 8338545260fbb423f796d5196faaaf8ff6e1ed99) -(cherry picked from commit a5f7a57bf390f1f340ff1d1f1884a73716817ef1) ---- - ArmVirtPkg/ArmVirtQemu.dsc | 7 +++- - .../TerminalPcdProducerLib.inf | 33 ++++++++++++++++++ - .../TerminalPcdProducerLib.c | 34 +++++++++++++++++++ - 3 files changed, 73 insertions(+), 1 deletion(-) - create mode 100644 ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf - create mode 100644 ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c - -diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc -index 7e2ff33ad172..9cb9831edde6 100644 ---- a/ArmVirtPkg/ArmVirtQemu.dsc -+++ b/ArmVirtPkg/ArmVirtQemu.dsc -@@ -307,6 +307,8 @@ [PcdsPatchableInModule] - gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress|0x0 - !endif - -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm|FALSE -+ - [PcdsDynamicHii] - gUefiOvmfPkgTokenSpaceGuid.PcdForceNoAcpi|L"ForceNoAcpi"|gOvmfVariableGuid|0x0|FALSE|NV,BS - -@@ -416,7 +418,10 @@ [Components.common] - MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf - MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf - MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf -- MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf -+ MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf { -+ -+ NULL|ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf -+ } - MdeModulePkg/Universal/SerialDxe/SerialDxe.inf - - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf -diff --git a/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf -new file mode 100644 -index 000000000000..a51dbd1670a8 ---- /dev/null -+++ b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.inf -@@ -0,0 +1,33 @@ -+## @file -+# Plugin library for setting up dynamic PCDs for TerminalDxe, from fw_cfg -+# -+# Copyright (C) 2015-2020, Red Hat, Inc. -+# Copyright (c) 2014, Linaro Ltd. All rights reserved.
-+# -+# SPDX-License-Identifier: BSD-2-Clause-Patent -+## -+ -+[Defines] -+ INF_VERSION = 0x00010005 -+ BASE_NAME = TerminalPcdProducerLib -+ FILE_GUID = 4a0c5ed7-8c42-4c01-8f4c-7bf258316a96 -+ MODULE_TYPE = BASE -+ VERSION_STRING = 1.0 -+ LIBRARY_CLASS = NULL -+ CONSTRUCTOR = TerminalPcdProducerLibConstructor -+ -+[Sources] -+ TerminalPcdProducerLib.c -+ -+[Packages] -+ MdeModulePkg/MdeModulePkg.dec -+ MdePkg/MdePkg.dec -+ OvmfPkg/OvmfPkg.dec -+ -+[LibraryClasses] -+ DebugLib -+ PcdLib -+ QemuFwCfgSimpleParserLib -+ -+[Pcd] -+ gEfiMdeModulePkgTokenSpaceGuid.PcdResizeXterm ## SOMETIMES_PRODUCES -diff --git a/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c -new file mode 100644 -index 000000000000..bfd3a6a535f9 ---- /dev/null -+++ b/ArmVirtPkg/Library/TerminalPcdProducerLib/TerminalPcdProducerLib.c -@@ -0,0 +1,34 @@ -+/** @file -+* Plugin library for setting up dynamic PCDs for TerminalDxe, from fw_cfg -+* -+* Copyright (C) 2015-2020, Red Hat, Inc. -+* Copyright (c) 2014, Linaro Ltd. All rights reserved.
-+* -+* SPDX-License-Identifier: BSD-2-Clause-Patent -+**/ -+ -+#include -+#include -+#include -+ -+#define UPDATE_BOOLEAN_PCD_FROM_FW_CFG(TokenName) \ -+ do { \ -+ BOOLEAN Setting; \ -+ RETURN_STATUS PcdStatus; \ -+ \ -+ if (!RETURN_ERROR (QemuFwCfgParseBool ( \ -+ "opt/org.tianocore.edk2.aavmf/" #TokenName, &Setting))) { \ -+ PcdStatus = PcdSetBoolS (TokenName, Setting); \ -+ ASSERT_RETURN_ERROR (PcdStatus); \ -+ } \ -+ } while (0) -+ -+RETURN_STATUS -+EFIAPI -+TerminalPcdProducerLibConstructor ( -+ VOID -+ ) -+{ -+ UPDATE_BOOLEAN_PCD_FROM_FW_CFG (PcdResizeXterm); -+ return RETURN_SUCCESS; -+} --- -2.45.0 - diff --git a/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch b/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch deleted file mode 100644 index 3d2e51529c..0000000000 --- a/SPECS/edk2/0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch +++ /dev/null @@ -1,121 +0,0 @@ -From edd740e3e07de081fca6d87c045c5db7b6a5dcc7 Mon Sep 17 00:00:00 2001 -From: Paolo Bonzini -Date: Tue, 21 Nov 2017 00:57:45 +0100 -Subject: [PATCH 06/17] OvmfPkg: enable DEBUG_VERBOSE (RHEL only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been - introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit - to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. - -- Remove obsolete commit message tags related to downstream patch - management: Message-id, Patchwork-id, O-Subject, Acked-by, From - (RHBZ#1846481). - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- context difference from upstream commit 46bb81200742 ("OvmfPkg: Make - SOURCE_DEBUG_ENABLE actually need to be set to TRUE", 2019-10-22) - resolved automatically - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- no change - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- no change - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no changes - -Bugzilla: 1488247 - -Set the DEBUG_VERBOSE bit (0x00400000) in the log mask. We want detailed -debug messages, and code in OvmfPkg logs many messages on the -DEBUG_VERBOSE level. - -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini -(this patch was previously applied as commit 78d3ed73172b5738e32d2b0bc03f7984b9584117) -(cherry picked from commit 7aeeaabc9871f657e65d2b99d81011b4964a1ce9) -(cherry picked from commit a0617a6be1a80966099ddceb010f89202a79ee76) -(cherry picked from commit 759bd3f591e2db699bdef4c7ea4e97c908e7f027) -(cherry picked from commit 7e6d5dc4078c64be6d55d8fc3317c59a91507a50) -(cherry picked from commit 3cb92f9ba18ac79911bd5258ff4f949cc617ae89) -(cherry picked from commit 5ecc18badaabe774d9d0806b027ab63a30c6a2d7) ---- - OvmfPkg/AmdSev/AmdSevX64.dsc | 2 +- - OvmfPkg/OvmfPkgIa32.dsc | 2 +- - OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- - OvmfPkg/OvmfPkgX64.dsc | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc -index 05076ff7f079..9bf06a17f3d2 100644 ---- a/OvmfPkg/AmdSev/AmdSevX64.dsc -+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc -@@ -429,7 +429,7 @@ [PcdsFixedAtBuild] - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 4aa47ac79ba2..63a1c0f393b5 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -536,7 +536,7 @@ [PcdsFixedAtBuild] - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 16f415821001..73f69272a75e 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -543,7 +543,7 @@ [PcdsFixedAtBuild] - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 0b8cb74ce099..1d1f2651b9b3 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -562,7 +562,7 @@ [PcdsFixedAtBuild] - # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may - # // significantly impact boot performance - # DEBUG_ERROR 0x80000000 // Error -- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F - - !if $(SOURCE_DEBUG_ENABLE) == TRUE - gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17 --- -2.45.0 - diff --git a/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch b/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch deleted file mode 100644 index 4457836ff7..0000000000 --- a/SPECS/edk2/0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch +++ /dev/null @@ -1,170 +0,0 @@ -From 1db7854d3e618d42b429aefd7ac397478e5a1ef9 Mon Sep 17 00:00:00 2001 -From: Paolo Bonzini -Date: Tue, 21 Nov 2017 00:57:46 +0100 -Subject: [PATCH 07/17] OvmfPkg: silence DEBUG_VERBOSE (0x00400000) in - QemuVideoDxe/QemuRamfbDxe (RH) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been - introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit - to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. - -- Remove obsolete commit message tags related to downstream patch - management: Message-id, Patchwork-id, O-Subject, Acked-by, From - (RHBZ#1846481). - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- no change - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- Due to upstream commit 4b04d9d73604 ("OvmfPkg: Don't build in - QemuVideoDxe when we have CSM", 2019-06-26), the contexts of - "QemuVideoDxe.inf" / "QemuRamfbDxe.inf" have changed in the DSC files. - Resolve the conflict manually. - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- Upstream commit 1d25ff51af5c ("OvmfPkg: add QemuRamfbDxe", 2018-06-14) - introduced another GOP driver that consumes FrameBufferBltLib, and - thereby produces a large number of (mostly useless) debug messages at - the DEBUG_VERBOSE level. Extend the patch to suppress those messages in - both QemuVideoDxe and QemuRamfbDxe; update the subject accordingly. - QemuRamfbDxe itself doesn't log anything at the VERBOSE level (see also - the original commit message at the bottom of this downstream patch). - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no changes - -Bugzilla: 1488247 - -In commit 5b2291f9567a ("OvmfPkg: QemuVideoDxe uses -MdeModulePkg/FrameBufferLib"), QemuVideoDxe was rebased to -FrameBufferBltLib. - -The FrameBufferBltLib instance added in commit b1ca386074bd -("MdeModulePkg: Add FrameBufferBltLib library instance") logs many -messages on the VERBOSE level; for example, a normal boot with OVMF can -produce 500+ "VideoFill" messages, dependent on the progress bar, when the -VERBOSE bit is set in PcdDebugPrintErrorLevel. - -QemuVideoDxe itself doesn't log anything at the VERBOSE level, so we lose -none of its messages this way. - -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini -(this patch was previously applied as commit 9b0d031dee7e823f6717bab73e422fbc6f0a6c52) -(cherry picked from commit 9122d5f2e8d8d289064d1e1700cb61964d9931f3) -(cherry picked from commit 7eb3be1d4ccafc26c11fe5afb95cc12b250ce6f0) -(cherry picked from commit bd650684712fb840dbcda5d6eaee065bd9e91fa1) -(cherry picked from commit b06b87f8ffd4fed4ef7eacb13689a9b6d111f850) -(cherry picked from commit c8c3f893e7c3710afe45c46839e97954871536e4) -(cherry picked from commit 1355849ad97c1e4a5c430597a377165a5cc118f7) ---- - OvmfPkg/AmdSev/AmdSevX64.dsc | 10 ++++++++-- - OvmfPkg/OvmfPkgIa32.dsc | 10 ++++++++-- - OvmfPkg/OvmfPkgIa32X64.dsc | 10 ++++++++-- - OvmfPkg/OvmfPkgX64.dsc | 10 ++++++++-- - 4 files changed, 32 insertions(+), 8 deletions(-) - -diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc -index 9bf06a17f3d2..f87c1eb00186 100644 ---- a/OvmfPkg/AmdSev/AmdSevX64.dsc -+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc -@@ -691,8 +691,14 @@ [Components] - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf - -- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - - # -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 63a1c0f393b5..d7184a248df2 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -829,8 +829,14 @@ [Components] - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf - -- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - OvmfPkg/VirtHstiDxe/VirtHstiDxe.inf - -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 73f69272a75e..47e580fede51 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -843,8 +843,14 @@ [Components.X64] - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf - -- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - OvmfPkg/VirtHstiDxe/VirtHstiDxe.inf - -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 1d1f2651b9b3..d68b61e2e6b9 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -911,8 +911,14 @@ [Components] - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf - -- OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - OvmfPkg/VirtHstiDxe/VirtHstiDxe.inf - --- -2.45.0 - diff --git a/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch b/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch deleted file mode 100644 index 8958dfb930..0000000000 --- a/SPECS/edk2/0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 7011ddb80145b9e47ebabb0f2f2f33e74dd2f83a Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 27 Jan 2016 03:05:18 +0100 -Subject: [PATCH 08/17] ArmVirtPkg: silence DEBUG_VERBOSE (0x00400000) in - QemuRamfbDxe (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- no change - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- no change - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- The previous version of this patch (downstream commit 76b4ac28e975) - caused a regression (RHBZ#1714446), which was fixed up in downstream - commit 5a216abaa737 ("ArmVirtPkg: silence DEBUG_VERBOSE masking - ~0x00400000 in QemuRamfbDxe (RH only)", 2019-08-05). - - Squash the fixup into the original patch. Fuse the commit messages. - (Acked-by tags are not preserved, lest we confuse ourselves while - reviewing this rebase.) - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- new patch, due to upstream commit c64688f36a8b ("ArmVirtPkg: add - QemuRamfbDxe", 2018-06-14) - -QemuRamfbDxe uses FrameBufferLib. The FrameBufferBltLib instance added in -commit b1ca386074bd ("MdeModulePkg: Add FrameBufferBltLib library -instance") logs many messages on the VERBOSE level; for example, a normal -boot with ArmVirtQemu[Kernel] can produce 500+ "VideoFill" messages, -dependent on the progress bar, when the VERBOSE bit is set in -PcdDebugPrintErrorLevel. - -Clear the VERBOSE bit without touching other bits -- those other bits -differ between the "silent" and "verbose" builds, so we can't set them as -constants. - -QemuRamfbDxe itself doesn't log anything at the VERBOSE level, so we lose -none of its messages, with the VERBOSE bit clear. - -Signed-off-by: Laszlo Ersek -(cherry picked from commit 76b4ac28e975bd63c25db903a1d42c47b38cc756) -Reported-by: Andrew Jones -Suggested-by: Laszlo Ersek -Signed-off-by: Philippe Mathieu-Daude -(cherry picked from commit 5a216abaa737195327235e37563b18a6bf2a74dc) -Signed-off-by: Laszlo Ersek -(cherry picked from commit e5b8152bced2364a1ded0926dbba4d65e23e3f84) -(cherry picked from commit e7f57f154439c1c18ea5030b01f8d7bc492698b2) ---- - ArmVirtPkg/ArmVirtQemu.dsc | 5 ++++- - ArmVirtPkg/ArmVirtQemuKernel.dsc | 5 ++++- - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc -index 9cb9831edde6..e4c8adf6e494 100644 ---- a/ArmVirtPkg/ArmVirtQemu.dsc -+++ b/ArmVirtPkg/ArmVirtQemu.dsc -@@ -545,7 +545,10 @@ [Components.common] - # - # Video support - # -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|($(DEBUG_PRINT_ERROR_LEVEL)) & 0xFFBFFFFF -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - OvmfPkg/PlatformDxe/Platform.inf - -diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc -index efe2df97bdf7..a12bb0809e23 100644 ---- a/ArmVirtPkg/ArmVirtQemuKernel.dsc -+++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc -@@ -447,7 +447,10 @@ [Components.common] - # - # Video support - # -- OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|($(DEBUG_PRINT_ERROR_LEVEL)) & 0xFFBFFFFF -+ } - OvmfPkg/VirtioGpuDxe/VirtioGpu.inf - OvmfPkg/PlatformDxe/Platform.inf - --- -2.45.0 - diff --git a/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch b/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch deleted file mode 100644 index a68655cc9d..0000000000 --- a/SPECS/edk2/0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 643f3d555a97c9187e0e817083da145c2a564d3e Mon Sep 17 00:00:00 2001 -From: Philippe Mathieu-Daude -Date: Thu, 1 Aug 2019 20:43:48 +0200 -Subject: [PATCH 09/17] OvmfPkg: QemuRamfbDxe: Do not report DXE failure on - Aarch64 silent builds (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- no change - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- no change - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- We have to carry this downstream-only patch -- committed originally as - aaaedc1e2cfd -- indefinitely. - -- To avoid confusion, remove the tags from the commit message that had - been added by the downstream maintainer scripts, such as: Message-id, - Patchwork-id, O-Subject, Acked-by. These remain available on the - original downstream commit. The Bugzilla line is preserved, as it - doesn't relate to a specific posting, but to the problem. - -Bugzilla: 1714446 - -To suppress an error message on the silent build when ramfb is -not configured, change QemuRamfbDxe to return EFI_SUCCESS even -when it fails. -Some memory is wasted (driver stays resident without -any good use), but it is mostly harmless, as the memory -is released by the OS after ExitBootServices(). - -Suggested-by: Laszlo Ersek -Signed-off-by: Philippe Mathieu-Daude -(cherry picked from commit aaaedc1e2cfd55ef003fb1b5a37c73a196b26dc7) -Signed-off-by: Laszlo Ersek -(cherry picked from commit aa2b66b18a62d652bdbefae7b5732297294306ca) -(cherry picked from commit deb3451034326b75fd760aba47a5171493ff055e) ---- - OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf | 1 + - OvmfPkg/QemuRamfbDxe/QemuRamfb.c | 15 +++++++++++++++ - 2 files changed, 16 insertions(+) - -diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -index e3890b8c202f..6ffee5acb24c 100644 ---- a/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -+++ b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf -@@ -29,6 +29,7 @@ [LibraryClasses] - BaseLib - BaseMemoryLib - DebugLib -+ DebugPrintErrorLevelLib - DevicePathLib - FrameBufferBltLib - MemoryAllocationLib -diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c -index 5a1044f0dc7b..3a687901b0d2 100644 ---- a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c -+++ b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -259,6 +260,20 @@ InitializeQemuRamfb ( - - Status = QemuFwCfgFindFile ("etc/ramfb", &mRamfbFwCfgItem, &FwCfgSize); - if (EFI_ERROR (Status)) { -+ #if defined (MDE_CPU_AARCH64) -+ // -+ // RHBZ#1714446 -+ // If no ramfb device was configured, this platform DXE driver should -+ // returns EFI_NOT_FOUND, so the DXE Core can unload it. However, even -+ // using a silent build, an error message is issued to the guest console. -+ // Since this confuse users, return success and stay resident. The wasted -+ // guest RAM still gets freed later after ExitBootServices(). -+ // -+ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { -+ return EFI_SUCCESS; -+ } -+ -+ #endif - return EFI_NOT_FOUND; - } - --- -2.45.0 - diff --git a/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch b/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch deleted file mode 100644 index 9a141ed176..0000000000 --- a/SPECS/edk2/0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch +++ /dev/null @@ -1,131 +0,0 @@ -From c59eeb543e26a6fe53afb72632571953b02ee45e Mon Sep 17 00:00:00 2001 -From: Paolo Bonzini -Date: Tue, 21 Nov 2017 00:57:47 +0100 -Subject: [PATCH 10/17] OvmfPkg: silence EFI_D_VERBOSE (0x00400000) in - NvmExpressDxe (RH only) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Extend the DSC change to the new OvmfPkg/AmdSev platform, which has been - introduced upstream in commit 30d277ed7a82 ("OvmfPkg/Amdsev: Base commit - to build encrypted boot specific OVMF", 2020-12-14), for TianoCore#3077. - -- Remove obsolete commit message tags related to downstream patch - management: Message-id, Patchwork-id, O-Subject, Acked-by, From - (RHBZ#1846481). - -Notes about the RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] -> -RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] rebase: - -- no change - -Notes about the RHEL-8.1/20190308-89910a39dcfd [edk2-stable201903] -> -RHEL-8.2/20190904-37eef91017ad [edk2-stable201908] rebase: - -- no change - -Notes about the RHEL-8.0/20180508-ee3198e672e2 -> -RHEL-8.1/20190308-89910a39dcfd rebase: - -- no change - -Notes about the RHEL-7.6/ovmf-20180508-2.gitee3198e672e2.el7 -> -RHEL-8.0/20180508-ee3198e672e2 rebase: - -- reorder the rebase changelog in the commit message so that it reads like - a blog: place more recent entries near the top -- no changes to the patch body - -Notes about the 20171011-92d07e48907f -> 20180508-ee3198e672e2 rebase: - -- no changes - -Bugzilla: 1488247 - -NvmExpressDxe logs all BlockIo read & write calls on the EFI_D_VERBOSE -level. - -Signed-off-by: Laszlo Ersek -Signed-off-by: Paolo Bonzini -(this patch was previously applied as commit 5f432837b9c60c2929b13dda1a1b488d5c3a6d2f) -(cherry picked from commit 33e00146eb878588ad1395d7b1ae38f401729da4) -(cherry picked from commit bd10cabcfcb1bc9a32b05062f4ee3792e27bc2d8) -(cherry picked from commit 5a27af700f49e00608f232f618dedd7bf5e9b3e6) -(cherry picked from commit 58bba429b9ec7b78109940ef945d0dc93f3cd958) -(cherry picked from commit b8d0ebded8c2cf5b266c807519e2d8ccfd66fee6) -(cherry picked from commit ed89844b47f46cfe911f1bf2bda40e537a908502) ---- - OvmfPkg/AmdSev/AmdSevX64.dsc | 5 ++++- - OvmfPkg/OvmfPkgIa32.dsc | 5 ++++- - OvmfPkg/OvmfPkgIa32X64.dsc | 5 ++++- - OvmfPkg/OvmfPkgX64.dsc | 5 ++++- - 4 files changed, 16 insertions(+), 4 deletions(-) - -diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc -index f87c1eb00186..96a63c50b451 100644 ---- a/OvmfPkg/AmdSev/AmdSevX64.dsc -+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc -@@ -686,7 +686,10 @@ [Components] - MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index d7184a248df2..9371b3a5e917 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -824,7 +824,10 @@ [Components] - MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 47e580fede51..483bcc69966d 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -838,7 +838,10 @@ [Components.X64] - MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index d68b61e2e6b9..9e243c5c086b 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -906,7 +906,10 @@ [Components] - MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf - MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf - MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -- MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf -+ MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf { -+ -+ gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F -+ } - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf - MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf - MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf --- -2.45.0 - diff --git a/SPECS/edk2/0011-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch b/SPECS/edk2/0011-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch deleted file mode 100644 index 67cb8e326f..0000000000 --- a/SPECS/edk2/0011-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch +++ /dev/null @@ -1,84 +0,0 @@ -From e76c01fd6eeb467e427f5e76f3c45ed098de4d3d Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 24 Jun 2020 11:31:36 +0200 -Subject: [PATCH 11/17] OvmfPkg/QemuKernelLoaderFsDxe: suppress error on no - "-kernel" in silent aa64 build (RH) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Remove obsolete commit message tags related to downstream patch - management: Message-id, Patchwork-id, O-Subject, Acked-by, From, - RH-Acked-by, RH-Author (RHBZ#1846481). - -Bugzilla: 1844682 - -If the "-kernel" QEMU option is not used, then QemuKernelLoaderFsDxe -should return EFI_NOT_FOUND, so that the DXE Core can unload it. However, -the associated error message, logged by the DXE Core to the serial -console, is not desired in the silent edk2-aarch64 build, given that the -absence of "-kernel" is nothing out of the ordinary. Therefore, return -success and stay resident. The wasted guest RAM still gets freed after -ExitBootServices(). - -(Inspired by RHEL-8.1.0 commit aaaedc1e2cfd.) - -Signed-off-by: Laszlo Ersek -Signed-off-by: Miroslav Rezanina -(cherry picked from commit 9adcdf493ebbd11efb74e2905ab5f6c8996e096d) ---- - .../QemuKernelLoaderFsDxe.inf | 1 + - .../QemuKernelLoaderFsDxe.c | 18 ++++++++++++++++++ - 2 files changed, 19 insertions(+) - -diff --git a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf -index 7b35adb8e034..e0331c6e2cbc 100644 ---- a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf -+++ b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.inf -@@ -28,6 +28,7 @@ [LibraryClasses] - BaseLib - BaseMemoryLib - DebugLib -+ DebugPrintErrorLevelLib - DevicePathLib - MemoryAllocationLib - QemuFwCfgLib -diff --git a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c -index 3c12085f6c1e..e473c0b57345 100644 ---- a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c -+++ b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1081,6 +1082,23 @@ QemuKernelLoaderFsDxeEntrypoint ( - - if (KernelBlob->Data == NULL) { - Status = EFI_NOT_FOUND; -+ #if defined (MDE_CPU_AARCH64) -+ // -+ // RHBZ#1844682 -+ // -+ // If the "-kernel" QEMU option is not being used, this platform DXE driver -+ // should return EFI_NOT_FOUND, so that the DXE Core can unload it. -+ // However, the associated error message, logged by the DXE Core to the -+ // serial console, is not desired in the silent edk2-aarch64 build, given -+ // that the absence of "-kernel" is nothing out of the ordinary. Therefore, -+ // return success and stay resident. The wasted guest RAM still gets freed -+ // after ExitBootServices(). -+ // -+ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { -+ Status = EFI_SUCCESS; -+ } -+ -+ #endif - goto FreeBlobs; - } - --- -2.45.0 - diff --git a/SPECS/edk2/0012-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch b/SPECS/edk2/0012-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch deleted file mode 100644 index d7115f2e4d..0000000000 --- a/SPECS/edk2/0012-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 7cb925d8dad6be9e9b749c7331fe0b0da8fd5e1c Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 24 Jun 2020 11:40:09 +0200 -Subject: [PATCH 12/17] SecurityPkg/Tcg2Dxe: suppress error on no swtpm in - silent aa64 build (RH) - -Notes about the RHEL-8.3/20200603-ca407c7246bf [edk2-stable202005] -> -RHEL-8.5/20210520-e1999b264f1f [edk2-stable202105] rebase: - -- Remove obsolete commit message tags related to downstream patch - management: Message-id, Patchwork-id, O-Subject, Acked-by, From, - RH-Acked-by, RH-Author (RHBZ#1846481). - -Bugzilla: 1844682 - -If swtpm / vTPM2 is not being used, Tcg2Dxe should return EFI_UNSUPPORTED, -so that the DXE Core can unload it. However, the associated error message, -logged by the DXE Core to the serial console, is not desired in the silent -edk2-aarch64 build, given that the absence of swtpm / vTPM2 is nothing out -of the ordinary. Therefore, return success and stay resident. The wasted -guest RAM still gets freed after ExitBootServices(). - -(Inspired by RHEL-8.1.0 commit aaaedc1e2cfd.) - -Signed-off-by: Laszlo Ersek -Signed-off-by: Miroslav Rezanina -(cherry picked from commit cbce29f7749477e271f9764fed82de94724af5df) ---- - SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf | 1 + - SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c | 17 +++++++++++++++++ - 2 files changed, 18 insertions(+) - -diff --git a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf -index a645474bf3cd..57795bd8d512 100644 ---- a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf -+++ b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf -@@ -55,6 +55,7 @@ [LibraryClasses] - UefiRuntimeServicesTableLib - BaseMemoryLib - DebugLib -+ DebugPrintErrorLevelLib - Tpm2CommandLib - PrintLib - UefiLib -diff --git a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c -index b55b6c12d2c5..4028cd0e1be3 100644 ---- a/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c -+++ b/SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c -@@ -29,6 +29,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - #include - - #include -+#include - #include - #include - #include -@@ -2743,6 +2744,22 @@ DriverEntry ( - CompareGuid (PcdGetPtr (PcdTpmInstanceGuid), &gEfiTpmDeviceInstanceTpm12Guid)) - { - DEBUG ((DEBUG_INFO, "No TPM2 instance required!\n")); -+#if defined (MDE_CPU_AARCH64) -+ // -+ // RHBZ#1844682 -+ // -+ // If swtpm / vTPM2 is not being used, this driver should return -+ // EFI_UNSUPPORTED, so that the DXE Core can unload it. However, the -+ // associated error message, logged by the DXE Core to the serial console, -+ // is not desired in the silent edk2-aarch64 build, given that the absence -+ // of swtpm / vTPM2 is nothing out of the ordinary. Therefore, return -+ // success and stay resident. The wasted guest RAM still gets freed after -+ // ExitBootServices(). -+ // -+ if (GetDebugPrintErrorLevel () == DEBUG_ERROR) { -+ return EFI_SUCCESS; -+ } -+#endif - return EFI_UNSUPPORTED; - } - --- -2.45.0 - diff --git a/SPECS/edk2/0013-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch b/SPECS/edk2/0013-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch deleted file mode 100644 index 3b2286d711..0000000000 --- a/SPECS/edk2/0013-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 54244041230217e763509c5bc4d8197e81e7f695 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 28 Feb 2023 15:47:00 +0100 -Subject: [PATCH 13/17] UefiCpuPkg/MpInitLib: fix apic mode for cpu hotplug - -In case the number of CPUs can in increase beyond 255 -due to CPU hotplug choose x2apic mode. - -Signed-off-by: Gerd Hoffmann ---- - UefiCpuPkg/Library/MpInitLib/MpLib.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c -index d7244565029d..c478878bb0a0 100644 ---- a/UefiCpuPkg/Library/MpInitLib/MpLib.c -+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c -@@ -534,7 +534,9 @@ CollectProcessorCount ( - // - // Enable x2APIC mode if - // 1. Number of CPU is greater than 255; or -- // 2. There are any logical processors reporting an Initial APIC ID of 255 or greater. -+ // 2. The platform exposed the exact *boot* CPU count to us in advance, and -+ // more than 255 logical processors are possible later, with hotplug; or -+ // 3. There are any logical processors reporting an Initial APIC ID of 255 or greater. - // - X2Apic = FALSE; - if (CpuMpData->CpuCount > 255) { -@@ -542,6 +544,10 @@ CollectProcessorCount ( - // If there are more than 255 processor found, force to enable X2APIC - // - X2Apic = TRUE; -+ } else if ((PcdGet32 (PcdCpuBootLogicalProcessorNumber) > 0) && -+ (PcdGet32 (PcdCpuMaxLogicalProcessorNumber) > 255)) -+ { -+ X2Apic = TRUE; - } else { - CpuInfoInHob = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob; - for (Index = 0; Index < CpuMpData->CpuCount; Index++) { --- -2.45.0 - diff --git a/SPECS/edk2/0014-CryptoPkg-CrtLib-add-stat.h.patch b/SPECS/edk2/0014-CryptoPkg-CrtLib-add-stat.h.patch deleted file mode 100644 index e6cad96ba0..0000000000 --- a/SPECS/edk2/0014-CryptoPkg-CrtLib-add-stat.h.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 15df0f549bdf5842c7aef669687dd1d8c11421cf Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Mon, 28 Aug 2023 13:11:02 +0200 -Subject: [PATCH 14/17] CryptoPkg/CrtLib: add stat.h - -needed by rhel downstream openssl patches ---- - CryptoPkg/Library/Include/sys/stat.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - create mode 100644 CryptoPkg/Library/Include/sys/stat.h - -diff --git a/CryptoPkg/Library/Include/sys/stat.h b/CryptoPkg/Library/Include/sys/stat.h -new file mode 100644 -index 000000000000..22247bb2db80 ---- /dev/null -+++ b/CryptoPkg/Library/Include/sys/stat.h -@@ -0,0 +1,9 @@ -+/** @file -+ Include file to support building the third-party cryptographic library. -+ -+Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.
-+SPDX-License-Identifier: BSD-2-Clause-Patent -+ -+**/ -+ -+#include --- -2.45.0 - diff --git a/SPECS/edk2/0015-CryptoPkg-CrtLib-add-access-open-read-write-close-sy.patch b/SPECS/edk2/0015-CryptoPkg-CrtLib-add-access-open-read-write-close-sy.patch deleted file mode 100644 index 4193beee17..0000000000 --- a/SPECS/edk2/0015-CryptoPkg-CrtLib-add-access-open-read-write-close-sy.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 919352ae9d35d222ec2073f03590b6914567daaf Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Mon, 28 Aug 2023 13:27:09 +0200 -Subject: [PATCH 15/17] CryptoPkg/CrtLib: add access/open/read/write/close - syscalls - -needed by rhel downstream openssl patches ---- - CryptoPkg/Library/Include/CrtLibSupport.h | 41 +++++++++++++++++ - .../Library/BaseCryptLib/SysCall/CrtWrapper.c | 46 +++++++++++++++++++ - 2 files changed, 87 insertions(+) - -diff --git a/CryptoPkg/Library/Include/CrtLibSupport.h b/CryptoPkg/Library/Include/CrtLibSupport.h -index f36fe08f0c61..7d98496af80b 100644 ---- a/CryptoPkg/Library/Include/CrtLibSupport.h -+++ b/CryptoPkg/Library/Include/CrtLibSupport.h -@@ -78,6 +78,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - // - // Definitions for global constants used by CRT library routines - // -+#define EINTR 4 - #define EINVAL 22 /* Invalid argument */ - #define EAFNOSUPPORT 47 /* Address family not supported by protocol family */ - #define INT_MAX 0x7FFFFFFF /* Maximum (signed) int value */ -@@ -102,6 +103,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - #define NS_INADDRSZ 4 /*%< IPv4 T_A */ - #define NS_IN6ADDRSZ 16 /*%< IPv6 T_AAAA */ - -+#define O_RDONLY 00000000 -+#define O_WRONLY 00000001 -+#define O_RDWR 00000002 -+ -+#define R_OK 4 -+#define W_OK 2 -+#define X_OK 1 -+#define F_OK 0 -+ - // - // Basic types mapping - // -@@ -324,6 +334,37 @@ fprintf ( - ... - ); - -+int -+access( -+ const char*, -+ int -+ ); -+ -+int -+open ( -+ const char *, -+ int -+ ); -+ -+ssize_t -+read ( -+ int, -+ void*, -+ size_t -+ ); -+ -+ssize_t -+write ( -+ int, -+ const void*, -+ size_t -+ ); -+ -+int -+close ( -+ int -+ ); -+ - time_t - time ( - time_t * -diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c b/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c -index 37cdecc9bd1d..dfdb63553667 100644 ---- a/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c -+++ b/CryptoPkg/Library/BaseCryptLib/SysCall/CrtWrapper.c -@@ -550,6 +550,52 @@ fread ( - return 0; - } - -+int -+access( -+ const char*, -+ int -+ ) -+{ -+ return -1; -+} -+ -+int -+open ( -+ const char *, -+ int -+ ) -+{ -+ return -1; -+} -+ -+ssize_t -+read ( -+ int, -+ void*, -+ size_t -+ ) -+{ -+ return -1; -+} -+ -+ssize_t -+write ( -+ int, -+ const void*, -+ size_t -+ ) -+{ -+ return -1; -+} -+ -+int -+close ( -+ int -+ ) -+{ -+ return -1; -+} -+ - uid_t - getuid ( - void --- -2.45.0 - diff --git a/SPECS/edk2/0016-OvmfPkg-set-PcdVariableStoreSize-PcdMaxVolatileVaria.patch b/SPECS/edk2/0016-OvmfPkg-set-PcdVariableStoreSize-PcdMaxVolatileVaria.patch deleted file mode 100644 index b7b404d780..0000000000 --- a/SPECS/edk2/0016-OvmfPkg-set-PcdVariableStoreSize-PcdMaxVolatileVaria.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 1fb97b6dfd4538216a118b5f303048c6c2686553 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Mon, 25 Sep 2023 09:48:46 +0200 -Subject: [PATCH 16/17] OvmfPkg: set PcdVariableStoreSize + - PcdMaxVolatileVariableSize unconditionally - -Signed-off-by: Gerd Hoffmann ---- - OvmfPkg/OvmfPkgIa32.dsc | 10 ---------- - OvmfPkg/OvmfPkgIa32X64.dsc | 10 ---------- - OvmfPkg/OvmfPkgX64.dsc | 10 ---------- - 3 files changed, 30 deletions(-) - -diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc -index 9371b3a5e917..2d8669c759d7 100644 ---- a/OvmfPkg/OvmfPkgIa32.dsc -+++ b/OvmfPkg/OvmfPkgIa32.dsc -@@ -492,23 +492,13 @@ [PcdsFixedAtBuild] - !if ($(FD_SIZE_IN_KB) == 1024) || ($(FD_SIZE_IN_KB) == 2048) - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x2000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x2800 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xe000 --!endif - !endif - !if $(FD_SIZE_IN_KB) == 4096 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x8400 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x8400 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x40000 - !endif --!endif --!if $(NETWORK_TLS_ENABLE) == TRUE - gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x80000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize|0x40000 --!endif - - gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE -diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc -index 483bcc69966d..0ee075a23d7b 100644 ---- a/OvmfPkg/OvmfPkgIa32X64.dsc -+++ b/OvmfPkg/OvmfPkgIa32X64.dsc -@@ -499,23 +499,13 @@ [PcdsFixedAtBuild] - !if ($(FD_SIZE_IN_KB) == 1024) || ($(FD_SIZE_IN_KB) == 2048) - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x2000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x2800 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xe000 --!endif - !endif - !if $(FD_SIZE_IN_KB) == 4096 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x8400 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x8400 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x40000 - !endif --!endif --!if $(NETWORK_TLS_ENABLE) == TRUE - gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x80000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize|0x40000 --!endif - - gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE -diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc -index 9e243c5c086b..9bd223a880d5 100644 ---- a/OvmfPkg/OvmfPkgX64.dsc -+++ b/OvmfPkg/OvmfPkgX64.dsc -@@ -518,23 +518,13 @@ [PcdsFixedAtBuild] - !if ($(FD_SIZE_IN_KB) == 1024) || ($(FD_SIZE_IN_KB) == 2048) - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x2000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x2800 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xe000 --!endif - !endif - !if $(FD_SIZE_IN_KB) == 4096 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x8400 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x8400 --!if $(NETWORK_TLS_ENABLE) == FALSE -- # match PcdFlashNvStorageVariableSize purely for convenience -- gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x40000 - !endif --!endif --!if $(NETWORK_TLS_ENABLE) == TRUE - gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x80000 - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVolatileVariableSize|0x40000 --!endif - - gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE --- -2.45.0 - diff --git a/SPECS/edk2/0017-silence-.-has-a-LOAD-segment-with-RWX-permissions-wa.patch b/SPECS/edk2/0017-silence-.-has-a-LOAD-segment-with-RWX-permissions-wa.patch deleted file mode 100644 index 43bb319c9b..0000000000 --- a/SPECS/edk2/0017-silence-.-has-a-LOAD-segment-with-RWX-permissions-wa.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 7abc0fa61b35a7ac6335175451c429f04671e02e Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Mon, 27 Nov 2023 11:04:08 +0100 -Subject: [PATCH 17/17] silence '... has a LOAD segment with RWX permissions' - warning - ---- - BaseTools/Conf/tools_def.template | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template -index c34ecfd557c5..53ac3baa6be3 100755 ---- a/BaseTools/Conf/tools_def.template -+++ b/BaseTools/Conf/tools_def.template -@@ -747,7 +747,7 @@ DEFINE GCC_AARCH64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno- - DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align -mgeneral-regs-only - DEFINE GCC_RISCV64_CC_XIPFLAGS = -mstrict-align -mgeneral-regs-only - DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib --pie --DEFINE GCC_DLINK2_FLAGS_COMMON = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds -+DEFINE GCC_DLINK2_FLAGS_COMMON = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds -Wl,--no-warn-rwx-segments - DEFINE GCC_IA32_X64_DLINK_COMMON = DEF(GCC_DLINK_FLAGS_COMMON) --gc-sections - DEFINE GCC_ARM_AARCH64_DLINK_COMMON= -Wl,--emit-relocs -nostdlib -Wl,--gc-sections -u $(IMAGE_ENTRY_POINT) -Wl,-e,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map - DEFINE GCC_LOONGARCH64_DLINK_COMMON= -Wl,--emit-relocs -nostdlib -Wl,--gc-sections -u $(IMAGE_ENTRY_POINT) -Wl,-e,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map --- -2.45.0 - diff --git a/SPECS/edk2/0018-NetworkPkg-TcpDxe-Fixed-system-stuck-on-PXE-boot-flo.patch b/SPECS/edk2/0018-NetworkPkg-TcpDxe-Fixed-system-stuck-on-PXE-boot-flo.patch deleted file mode 100644 index 49c9b2c0ef..0000000000 --- a/SPECS/edk2/0018-NetworkPkg-TcpDxe-Fixed-system-stuck-on-PXE-boot-flo.patch +++ /dev/null @@ -1,57 +0,0 @@ -From be52b5be73ab0a5e0cd37272a6f8f768a3395ffc Mon Sep 17 00:00:00 2001 -From: Sam -Date: Wed, 29 May 2024 07:46:03 +0800 -Subject: [PATCH 18/18] NetworkPkg TcpDxe: Fixed system stuck on PXE boot flow - in iPXE environment -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This bug fix is based on the following commit "NetworkPkg TcpDxe: SECURITY PATCH" -REF: 1904a64 - -Issue Description: -An "Invalid handle" error was detected during runtime when attempting to destroy a child instance of the hashing protocol. The problematic code segment was: - -NetworkPkg\TcpDxe\TcpDriver.c -Status = Hash2ServiceBinding->DestroyChild(Hash2ServiceBinding, ​&mHash2ServiceHandle); - -Root Cause Analysis: -The root cause of the error was the passing of an incorrect parameter type, a pointer to an EFI_HANDLE instead of an EFI_HANDLE itself, to the DestroyChild function. This mismatch resulted in the function receiving an invalid handle. - -Implemented Solution: -To resolve this issue, the function call was corrected to pass mHash2ServiceHandle directly: - -NetworkPkg\TcpDxe\TcpDriver.c -Status = Hash2ServiceBinding->DestroyChild(Hash2ServiceBinding, mHash2ServiceHandle); - -This modification ensures the correct handle type is used, effectively rectifying the "Invalid handle" error. - -Verification: -Testing has been conducted, confirming the efficacy of the fix. Additionally, the BIOS can boot into the OS in an iPXE environment. - -Cc: Doug Flick [MSFT] - -Signed-off-by: Sam Tsai [Wiwynn] -Reviewed-by: Saloni Kasbekar -(cherry picked from commit ced13b93afea87a8a1fe6ddbb67240a84cb2e3d3) ---- - NetworkPkg/TcpDxe/TcpDriver.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/NetworkPkg/TcpDxe/TcpDriver.c b/NetworkPkg/TcpDxe/TcpDriver.c -index 40bba4080c87..c6e7c0df540a 100644 ---- a/NetworkPkg/TcpDxe/TcpDriver.c -+++ b/NetworkPkg/TcpDxe/TcpDriver.c -@@ -509,7 +509,7 @@ TcpDestroyService ( - // - // Destroy the instance of the hashing protocol for this controller. - // -- Status = Hash2ServiceBinding->DestroyChild (Hash2ServiceBinding, &mHash2ServiceHandle); -+ Status = Hash2ServiceBinding->DestroyChild (Hash2ServiceBinding, mHash2ServiceHandle); - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } --- -2.45.1 - diff --git a/SPECS/edk2/0019-NetworkPkg-DxeNetLib-adjust-PseudoRandom-error-loggi.patch b/SPECS/edk2/0019-NetworkPkg-DxeNetLib-adjust-PseudoRandom-error-loggi.patch deleted file mode 100644 index 9bc704c1c6..0000000000 --- a/SPECS/edk2/0019-NetworkPkg-DxeNetLib-adjust-PseudoRandom-error-loggi.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 820bf9f58bd8bd88a45f8355ffea8e8ac4890328 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Wed, 19 Jun 2024 09:07:56 +0200 -Subject: [PATCH 19/19] NetworkPkg/DxeNetLib: adjust PseudoRandom error logging - -There is a list of allowed rng algorithms, if /one/ of them is not -supported this is not a problem, only /all/ of them failing is an -error condition. - -Downgrade the message for a single unsupported algorithm from ERROR to -VERBOSE. Add an error message in case we finish the loop without -finding a supported algorithm. - -Signed-off-by: Gerd Hoffmann -(cherry picked from commit 6862b9d538d96363635677198899e1669e591259) ---- - NetworkPkg/Library/DxeNetLib/DxeNetLib.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/NetworkPkg/Library/DxeNetLib/DxeNetLib.c b/NetworkPkg/Library/DxeNetLib/DxeNetLib.c -index 01c13c08d203..4dfbe91a5554 100644 ---- a/NetworkPkg/Library/DxeNetLib/DxeNetLib.c -+++ b/NetworkPkg/Library/DxeNetLib/DxeNetLib.c -@@ -951,7 +951,7 @@ PseudoRandom ( - // - // Secure Algorithm was not supported on this platform - // -- DEBUG ((DEBUG_ERROR, "Failed to generate random data using secure algorithm %d: %r\n", AlgorithmIndex, Status)); -+ DEBUG ((DEBUG_VERBOSE, "Failed to generate random data using secure algorithm %d: %r\n", AlgorithmIndex, Status)); - - // - // Try the next secure algorithm -@@ -971,6 +971,7 @@ PseudoRandom ( - // If we get here, we failed to generate random data using any secure algorithm - // Platform owner should ensure that at least one secure algorithm is supported - // -+ DEBUG ((DEBUG_ERROR, "Failed to generate random data, no supported secure algorithm found\n")); - ASSERT_EFI_ERROR (Status); - return Status; - } --- -2.45.2 - diff --git a/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json b/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json deleted file mode 100644 index e709223313..0000000000 --- a/SPECS/edk2/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "enrolled-keys", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json b/SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json deleted file mode 100644 index 33f970d0a6..0000000000 --- a/SPECS/edk2/30-edk2-ovmf-ia32-sb-enrolled.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "OVMF for i386, with SB+SMM, SB enabled, MS certs enrolled", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_VARS.secboot.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "i386", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "enrolled-keys", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json b/SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json deleted file mode 100644 index 2ed45362c4..0000000000 --- a/SPECS/edk2/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "enrolled-keys", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json b/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json deleted file mode 100644 index 655dd42ef1..0000000000 --- a/SPECS/edk2/40-edk2-ovmf-4m-qcow2-x64-sb.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "description": "OVMF with SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/40-edk2-ovmf-ia32-sb.json b/SPECS/edk2/40-edk2-ovmf-ia32-sb.json deleted file mode 100644 index 1e80e588ac..0000000000 --- a/SPECS/edk2/40-edk2-ovmf-ia32-sb.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "description": "OVMF for i386, with SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "i386", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json b/SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json deleted file mode 100644 index 06b3ece89a..0000000000 --- a/SPECS/edk2/41-edk2-ovmf-2m-raw-x64-sb.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "description": "OVMF with SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "requires-smm", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/50-edk2-aarch64-qcow2.json b/SPECS/edk2/50-edk2-aarch64-qcow2.json deleted file mode 100644 index 79f64a11a3..0000000000 --- a/SPECS/edk2/50-edk2-aarch64-qcow2.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "UEFI firmware for ARM64 virtual machines", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/aarch64/vars-template-pflash.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "aarch64", - "machines": [ - "virt-*" - ] - } - ], - "features": [ - - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/50-edk2-arm-verbose.json b/SPECS/edk2/50-edk2-arm-verbose.json deleted file mode 100644 index 52f9c2ce00..0000000000 --- a/SPECS/edk2/50-edk2-arm-verbose.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "UEFI firmware for arm, verbose logs", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/arm/QEMU_EFI-pflash.raw", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/arm/vars-template-pflash.raw", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "arm", - "machines": [ - "virt-*" - ] - } - ], - "features": [ - "verbose-static" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/50-edk2-loongarch64.json b/SPECS/edk2/50-edk2-loongarch64.json deleted file mode 100644 index c5a7ec5f7b..0000000000 --- a/SPECS/edk2/50-edk2-loongarch64.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode": "split", - "executable": { - "filename": "/usr/share/edk2/loongarch64/QEMU_EFI.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/loongarch64/QEMU_VARS.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "loongarch64", - "machines": [ - "virt", - "virt-*" - ] - } - ], - "features": [ - ] -} diff --git a/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json b/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json deleted file mode 100644 index d64735f477..0000000000 --- a/SPECS/edk2/50-edk2-ovmf-4m-qcow2-x64-nosb.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "OVMF without SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE_4M.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS_4M.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-i440fx-*", - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "amd-sev", - "amd-sev-es", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/50-edk2-ovmf-ia32-nosb.json b/SPECS/edk2/50-edk2-ovmf-ia32-nosb.json deleted file mode 100644 index 544f824ced..0000000000 --- a/SPECS/edk2/50-edk2-ovmf-ia32-nosb.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "description": "OVMF for i386, without SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_CODE.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "i386", - "machines": [ - "pc-i440fx-*", - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/50-edk2-ovmf-x64-microvm.json b/SPECS/edk2/50-edk2-ovmf-x64-microvm.json deleted file mode 100644 index 3d5b393949..0000000000 --- a/SPECS/edk2/50-edk2-ovmf-x64-microvm.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "description": "OVMF for microvm", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "memory", - "filename": "/usr/share/edk2/ovmf/MICROVM.fd" - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "microvm" - ] - } - ], - "features": [ - ], - "tags": [ - ] -} diff --git a/SPECS/edk2/50-edk2-riscv-qcow2.json b/SPECS/edk2/50-edk2-riscv-qcow2.json deleted file mode 100644 index eb1930da49..0000000000 --- a/SPECS/edk2/50-edk2-riscv-qcow2.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "description": "UEFI firmware for RISC-V virtual machines", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/riscv/RISCV_VIRT_CODE.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/riscv/RISCV_VIRT_VARS.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "riscv64", - "machines": [ - "virt", - "virt-*" - ] - } - ], - "features": [ - - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/51-edk2-aarch64-raw.json b/SPECS/edk2/51-edk2-aarch64-raw.json deleted file mode 100644 index cabbd396ea..0000000000 --- a/SPECS/edk2/51-edk2-aarch64-raw.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "UEFI firmware for ARM64 virtual machines", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.raw", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "aarch64", - "machines": [ - "virt-*" - ] - } - ], - "features": [ - - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json b/SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json deleted file mode 100644 index 050853e2b8..0000000000 --- a/SPECS/edk2/51-edk2-ovmf-2m-raw-x64-nosb.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "description": "OVMF without SB+SMM, empty varstore", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF_CODE.fd", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/ovmf/OVMF_VARS.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-i440fx-*", - "pc-q35-*" - ] - } - ], - "features": [ - "acpi-s3", - "amd-sev", - "amd-sev-es", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json b/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json deleted file mode 100644 index 4173102967..0000000000 --- a/SPECS/edk2/52-edk2-aarch64-verbose-qcow2.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "UEFI firmware for ARM64 virtual machines, verbose logs", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.qcow2", - "format": "qcow2" - }, - "nvram-template": { - "filename": "/usr/share/edk2/aarch64/vars-template-pflash.qcow2", - "format": "qcow2" - } - }, - "targets": [ - { - "architecture": "aarch64", - "machines": [ - "virt-*" - ] - } - ], - "features": [ - "verbose-static" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/53-edk2-aarch64-verbose-raw.json b/SPECS/edk2/53-edk2-aarch64-verbose-raw.json deleted file mode 100644 index ec69d19858..0000000000 --- a/SPECS/edk2/53-edk2-aarch64-verbose-raw.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "description": "UEFI firmware for ARM64 virtual machines, verbose logs", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode" : "split", - "executable": { - "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw", - "format": "raw" - }, - "nvram-template": { - "filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "aarch64", - "machines": [ - "virt-*" - ] - } - ], - "features": [ - "verbose-static" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json b/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json deleted file mode 100644 index 9a561bc7eb..0000000000 --- a/SPECS/edk2/60-edk2-ovmf-x64-amdsev.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "description": "OVMF with SEV-ES support", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "flash", - "mode": "stateless", - "executable": { - "filename": "/usr/share/edk2/ovmf/OVMF.amdsev.fd", - "format": "raw" - } - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "amd-sev", - "amd-sev-es", - "amd-sev-snp", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json b/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json deleted file mode 100644 index 445eb70e03..0000000000 --- a/SPECS/edk2/60-edk2-ovmf-x64-inteltdx.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "description": "OVMF with TDX support", - "interface-types": [ - "uefi" - ], - "mapping": { - "device": "memory", - "filename": "/usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd" - }, - "targets": [ - { - "architecture": "x86_64", - "machines": [ - "pc-q35-*" - ] - } - ], - "features": [ - "enrolled-keys", - "intel-tdx", - "secure-boot", - "verbose-dynamic" - ], - "tags": [ - - ] -} diff --git a/SPECS/edk2/CVE-2022-3996.patch b/SPECS/edk2/CVE-2022-3996.patch deleted file mode 100644 index 46339f9195..0000000000 --- a/SPECS/edk2/CVE-2022-3996.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 7725e7bfe6f2ce8146b6552b44e0d226be7638e7 Mon Sep 17 00:00:00 2001 -From: Pauli -Date: Fri, 11 Nov 2022 09:40:19 +1100 -Subject: [PATCH] x509: fix double locking problem - -This reverts commit 9aa4be691f5c73eb3c68606d824c104550c053f7 and removed the -redundant flag setting. - -Fixes #19643 - -Fixes LOW CVE-2022-3996 - -Reviewed-by: Dmitry Belyavskiy -Reviewed-by: Tomas Mraz -(Merged from https://github.com/openssl/openssl/pull/19652) - -(cherry picked from commit 4d0340a6d2f327700a059f0b8f954d6160f8eef5) ---- - CryptoPkg/Library/OpensslLib/openssl/crypto/x509/pcy_map.c | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/pcy_map.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/pcy_map.c -index 05406c6493fce..60dfd1e3203b0 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/pcy_map.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/pcy_map.c -@@ -73,10 +73,6 @@ int ossl_policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps) - - ret = 1; - bad_mapping: -- if (ret == -1 && CRYPTO_THREAD_write_lock(x->lock)) { -- x->ex_flags |= EXFLAG_INVALID_POLICY; -- CRYPTO_THREAD_unlock(x->lock); -- } - sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free); - return ret; - diff --git a/SPECS/edk2/CVE-2024-13176.patch b/SPECS/edk2/CVE-2024-13176.patch deleted file mode 100644 index 2c218aa4ef..0000000000 --- a/SPECS/edk2/CVE-2024-13176.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 07272b05b04836a762b4baa874958af51d513844 Mon Sep 17 00:00:00 2001 -From: Tomas Mraz -Date: Wed, 15 Jan 2025 18:27:02 +0100 -Subject: [PATCH] Fix timing side-channel in ECDSA signature computation - -There is a timing signal of around 300 nanoseconds when the top word of -the inverted ECDSA nonce value is zero. This can happen with significant -probability only for some of the supported elliptic curves. In particular -the NIST P-521 curve is affected. To be able to measure this leak, the -attacker process must either be located in the same physical computer or -must have a very fast network connection with low latency. - -Attacks on ECDSA nonce are also known as Minerva attack. - -Fixes CVE-2024-13176 - -Reviewed-by: Tim Hudson -Reviewed-by: Neil Horman -Reviewed-by: Paul Dale -(Merged from https://github.com/openssl/openssl/pull/26429) - -(cherry picked from commit 63c40a66c5dc287485705d06122d3a6e74a6a203) ---- - CryptoPkg/Library/OpensslLib/openssl/crypto/bn/bn_exp.c | 21 +++++++++++++++------ - CryptoPkg/Library/OpensslLib/openssl/crypto/ec/ec_lib.c | 7 ++++--- - include/CryptoPkg/Library/OpensslLib/openssl/crypto/bn.h | 3 +++ - 3 files changed, 22 insertions(+), 9 deletions(-) - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/bn/bn_exp.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/bn/bn_exp.c -index 598a592ca1397..d84c7de18a6b6 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/crypto/bn/bn_exp.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/bn/bn_exp.c -@@ -606,7 +606,7 @@ static int MOD_EXP_CTIME_COPY_FROM_PREBUF(BIGNUM *b, int top, - * out by Colin Percival, - * http://www.daemonology.net/hyperthreading-considered-harmful/) - */ --int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, -+int bn_mod_exp_mont_fixed_top(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont) - { -@@ -623,10 +623,6 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - unsigned int t4 = 0; - #endif - -- bn_check_top(a); -- bn_check_top(p); -- bn_check_top(m); -- - if (!BN_is_odd(m)) { - ERR_raise(ERR_LIB_BN, BN_R_CALLED_WITH_EVEN_MODULUS); - return 0; -@@ -1146,7 +1142,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - goto err; - } else - #endif -- if (!BN_from_montgomery(rr, &tmp, mont, ctx)) -+ if (!bn_from_mont_fixed_top(rr, &tmp, mont, ctx)) - goto err; - ret = 1; - err: -@@ -1160,6 +1156,19 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - return ret; - } - -+int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, -+ const BIGNUM *m, BN_CTX *ctx, -+ BN_MONT_CTX *in_mont) -+{ -+ bn_check_top(a); -+ bn_check_top(p); -+ bn_check_top(m); -+ if (!bn_mod_exp_mont_fixed_top(rr, a, p, m, ctx, in_mont)) -+ return 0; -+ bn_correct_top(rr); -+ return 1; -+} -+ - int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont) - { -diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/ec/ec_lib.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/ec/ec_lib.c -index b1696d93bd6dd..1f0bf1ec795fa 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/crypto/ec/ec_lib.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/ec/ec_lib.c -@@ -20,6 +20,7 @@ - #include - #include - #include "crypto/ec.h" -+#include "crypto/bn.h" - #include "internal/nelem.h" - #include "ec_local.h" - -@@ -1262,10 +1263,10 @@ static int ec_field_inverse_mod_ord(const EC_GROUP *group, BIGNUM *r, - if (!BN_sub(e, group->order, e)) - goto err; - /*- -- * Exponent e is public. -- * No need for scatter-gather or BN_FLG_CONSTTIME. -+ * Although the exponent is public we want the result to be -+ * fixed top. - */ -- if (!BN_mod_exp_mont(r, x, e, group->order, ctx, group->mont_data)) -+ if (!bn_mod_exp_mont_fixed_top(r, x, e, group->order, ctx, group->mont_data)) - goto err; - - ret = 1; -diff --git a/CryptoPkg/Library/OpensslLib/openssl/include/crypto/bn.h b/include/CryptoPkg/Library/OpensslLib/openssl/crypto/bn.h -index c5f328156d3a9..59a629b9f6288 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/include/crypto/bn.h -+++ b/CryptoPkg/Library/OpensslLib/openssl/include/crypto/bn.h -@@ -73,6 +73,9 @@ int bn_set_words(BIGNUM *a, const BN_ULONG *words, int num_words); - */ - int bn_mul_mont_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -+int bn_mod_exp_mont_fixed_top(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, -+ const BIGNUM *m, BN_CTX *ctx, -+ BN_MONT_CTX *in_mont); - int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); - int bn_from_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, diff --git a/SPECS/edk2/CVE-2024-2511.patch b/SPECS/edk2/CVE-2024-2511.patch deleted file mode 100644 index c7f036c39d..0000000000 --- a/SPECS/edk2/CVE-2024-2511.patch +++ /dev/null @@ -1,95 +0,0 @@ -From dfa811c4173d0b520de4cfb0e7794781ad41289a Mon Sep 17 00:00:00 2001 -From: Archana Choudhary -Date: Tue, 29 Apr 2025 09:04:40 +0000 -Subject: [PATCH] Patch for CVE-2024-2511 - -Ported from https://github.com/openssl/openssl/commit/b52867a9f618bb955bed2a3ce3db4d4f97ed8e5d ---- - .../Library/OpensslLib/openssl/ssl/ssl_lib.c | 5 ++-- - .../Library/OpensslLib/openssl/ssl/ssl_sess.c | 28 +++++++++++++++---- - .../openssl/ssl/statem/statem_srvr.c | 5 ++-- - 3 files changed, 27 insertions(+), 11 deletions(-) - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -index 99ce450..158b550 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -@@ -3717,9 +3717,10 @@ void ssl_update_cache(SSL *s, int mode) - - /* - * If the session_id_length is 0, we are not supposed to cache it, and it -- * would be rather hard to do anyway :-) -+ * would be rather hard to do anyway :-). Also if the session has already -+ * been marked as not_resumable we should not cache it for later reuse. - */ -- if (s->session->session_id_length == 0) -+ if (s->session->session_id_length == 0 || s->session->not_resumable) - return; - - /* -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_sess.c b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_sess.c -index 68b57a5..c1c7837 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_sess.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_sess.c -@@ -152,16 +152,11 @@ SSL_SESSION *SSL_SESSION_new(void) - return ss; - } - --SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src) --{ -- return ssl_session_dup(src, 1); --} -- - /* - * Create a new SSL_SESSION and duplicate the contents of |src| into it. If - * ticket == 0 then no ticket information is duplicated, otherwise it is. - */ --SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket) -+static SSL_SESSION *ssl_session_dup_intern(const SSL_SESSION *src, int ticket) - { - SSL_SESSION *dest; - -@@ -281,6 +276,27 @@ SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket) - return NULL; - } - -+SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src) -+{ -+ return ssl_session_dup_intern(src, 1); -+} -+ -+/* -+ * Used internally when duplicating a session which might be already shared. -+ * We will have resumed the original session. Subsequently we might have marked -+ * it as non-resumable (e.g. in another thread) - but this copy should be ok to -+ * resume from. -+ */ -+SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket) -+{ -+ SSL_SESSION *sess = ssl_session_dup_intern(src, ticket); -+ -+ if (sess != NULL) -+ sess->not_resumable = 0; -+ -+ return sess; -+} -+ - const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) - { - if (len) -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/statem/statem_srvr.c b/CryptoPkg/Library/OpensslLib/openssl/ssl/statem/statem_srvr.c -index a9e67f9..6c942e6 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/statem/statem_srvr.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/statem/statem_srvr.c -@@ -2338,9 +2338,8 @@ int tls_construct_server_hello(SSL *s, WPACKET *pkt) - * so the following won't overwrite an ID that we're supposed - * to send back. - */ -- if (s->session->not_resumable || -- (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER) -- && !s->hit)) -+ if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER) -+ && !s->hit) - s->session->session_id_length = 0; - - if (usetls13) { diff --git a/SPECS/edk2/CVE-2024-38796.patch b/SPECS/edk2/CVE-2024-38796.patch deleted file mode 100644 index 59aa80a6b6..0000000000 --- a/SPECS/edk2/CVE-2024-38796.patch +++ /dev/null @@ -1,26 +0,0 @@ -From a6d8206a22d70dc5e6d7ac8aae8e69b80ace7e61 Mon Sep 17 00:00:00 2001 -From: jykanase -Date: Wed, 2 Apr 2025 05:23:55 +0000 -Subject: [PATCH] CVE-2024-38796 - -Upstream patch reference: https://github.com/tianocore/edk2/commit/c95233b8525ca6828921affd1496146cff262e65 ---- - MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c -index 86ff2e7..128090d 100644 ---- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c -+++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c -@@ -1054,7 +1054,7 @@ PeCoffLoaderRelocateImage ( - RelocDir = &Hdr.Te->DataDirectory[0]; - } - -- if ((RelocDir != NULL) && (RelocDir->Size > 0)) { -+ if ((RelocDir != NULL) && (RelocDir->Size > 0) && (RelocDir->Size - 1 < MAX_UINT32 - RelocDir->VirtualAddress)) { - RelocBase = (EFI_IMAGE_BASE_RELOCATION *)PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress, TeStrippedOffset); - RelocBaseEnd = (EFI_IMAGE_BASE_RELOCATION *)PeCoffLoaderImageAddress ( - ImageContext, --- -2.45.2 - diff --git a/SPECS/edk2/CVE-2024-4603.patch b/SPECS/edk2/CVE-2024-4603.patch deleted file mode 100644 index 7c3ee34ade..0000000000 --- a/SPECS/edk2/CVE-2024-4603.patch +++ /dev/null @@ -1,125 +0,0 @@ -From d2bbe37ccf8857197a4b6c36fc0381ab58bb8b09 Mon Sep 17 00:00:00 2001 -From: Archana Choudhary -Date: Tue, 29 Apr 2025 09:12:17 +0000 -Subject: [PATCH] Fix for CVE-2024-4603 - -Ported from https://github.com/openssl/openssl/commit/3559e868e58005d15c6013a0c1fd832e51c73397 ---- - .../Library/OpensslLib/openssl/CHANGES.md | 17 +++++++ - .../OpensslLib/openssl/crypto/dsa/dsa_check.c | 45 +++++++++++++++++-- - 2 files changed, 58 insertions(+), 4 deletions(-) - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/CHANGES.md b/CryptoPkg/Library/OpensslLib/openssl/CHANGES.md -index 84933a8..34a2e7f 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/CHANGES.md -+++ b/CryptoPkg/Library/OpensslLib/openssl/CHANGES.md -@@ -30,6 +30,23 @@ breaking changes, and mappings for the large list of deprecated functions. - - ### Changes between 3.0.6 and 3.0.7 [1 Nov 2022] - -+ * Fixed an issue where checking excessively long DSA keys or parameters may -+ be very slow. -+ -+ Applications that use the functions EVP_PKEY_param_check() or -+ EVP_PKEY_public_check() to check a DSA public key or DSA parameters may -+ experience long delays. Where the key or parameters that are being checked -+ have been obtained from an untrusted source this may lead to a Denial of -+ Service. -+ -+ To resolve this issue DSA keys larger than OPENSSL_DSA_MAX_MODULUS_BITS -+ will now fail the check immediately with a DSA_R_MODULUS_TOO_LARGE error -+ reason. -+ -+ ([CVE-2024-4603]) -+ -+ *Tomáš Mráz* -+ - * Fixed two buffer overflows in punycode decoding functions. - - A buffer overrun can be triggered in X.509 certificate verification, -diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/dsa/dsa_check.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/dsa/dsa_check.c -index 7ee914a..a66fe05 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/crypto/dsa/dsa_check.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/dsa/dsa_check.c -@@ -19,8 +19,34 @@ - #include "dsa_local.h" - #include "crypto/dsa.h" - -+static int dsa_precheck_params(const DSA *dsa, int *ret) -+{ -+ if (dsa->params.p == NULL || dsa->params.q == NULL) { -+ ERR_raise(ERR_LIB_DSA, DSA_R_BAD_FFC_PARAMETERS); -+ *ret = FFC_CHECK_INVALID_PQ; -+ return 0; -+ } -+ -+ if (BN_num_bits(dsa->params.p) > OPENSSL_DSA_MAX_MODULUS_BITS) { -+ ERR_raise(ERR_LIB_DSA, DSA_R_MODULUS_TOO_LARGE); -+ *ret = FFC_CHECK_INVALID_PQ; -+ return 0; -+ } -+ -+ if (BN_num_bits(dsa->params.q) >= BN_num_bits(dsa->params.p)) { -+ ERR_raise(ERR_LIB_DSA, DSA_R_BAD_Q_VALUE); -+ *ret = FFC_CHECK_INVALID_PQ; -+ return 0; -+ } -+ -+ return 1; -+} -+ - int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret) - { -+ if (!dsa_precheck_params(dsa, ret)) -+ return 0; -+ - if (checktype == OSSL_KEYMGMT_VALIDATE_QUICK_CHECK) - return ossl_ffc_params_simple_validate(dsa->libctx, &dsa->params, - FFC_PARAM_TYPE_DSA, ret); -@@ -39,6 +65,9 @@ int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret) - */ - int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret) - { -+ if (!dsa_precheck_params(dsa, ret)) -+ return 0; -+ - return ossl_ffc_validate_public_key(&dsa->params, pub_key, ret); - } - -@@ -49,6 +78,10 @@ int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret) - */ - int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, int *ret) - { -+ -+ if (!dsa_precheck_params(dsa, ret)) -+ return 0; -+ - return ossl_ffc_validate_public_key_partial(&dsa->params, pub_key, ret); - } - -@@ -56,8 +89,10 @@ int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret) - { - *ret = 0; - -- return (dsa->params.q != NULL -- && ossl_ffc_validate_private_key(dsa->params.q, priv_key, ret)); -+ if (!dsa_precheck_params(dsa, ret)) -+ return 0; -+ -+ return ossl_ffc_validate_private_key(dsa->params.q, priv_key, ret); - } - - /* -@@ -70,8 +105,10 @@ int ossl_dsa_check_pairwise(const DSA *dsa) - BN_CTX *ctx = NULL; - BIGNUM *pub_key = NULL; - -- if (dsa->params.p == NULL -- || dsa->params.g == NULL -+ if (!dsa_precheck_params(dsa, &ret)) -+ return 0; -+ -+ if (dsa->params.g == NULL - || dsa->priv_key == NULL - || dsa->pub_key == NULL) - return 0; diff --git a/SPECS/edk2/CVE-2024-4741.patch b/SPECS/edk2/CVE-2024-4741.patch deleted file mode 100644 index 133442d130..0000000000 --- a/SPECS/edk2/CVE-2024-4741.patch +++ /dev/null @@ -1,69 +0,0 @@ -From b3f0eb0a295f58f16ba43ba99dad70d4ee5c437d Mon Sep 17 00:00:00 2001 -From: Watson Ladd -Date: Wed, 24 Apr 2024 11:26:56 +0100 -Subject: [PATCH] Only free the read buffers if we're not using them - -If we're part way through processing a record, or the application has -not released all the records then we should not free our buffer because -they are still needed. - -CVE-2024-4741 - -Reviewed-by: Tomas Mraz -Reviewed-by: Neil Horman -Reviewed-by: Matt Caswell -(Merged from https://github.com/openCryptoPkg/Library/OpensslLib/openssl/ssl/openCryptoPkg/Library/OpensslLib/openssl/ssl/pull/24395) - -(cherry picked from commit 704f725b96aa373ee45ecfb23f6abfe8be8d9177) ---- - CryptoPkg/Library/OpensslLib/openssl/ssl/record/rec_layer_s3.c | 9 +++++++++ - CryptoPkg/Library/OpensslLib/openssl/ssl/record/record.h | 1 + - CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c | 3 +++ - 3 files changed, 13 insertions(+) - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/record/rec_layer_s3.c b/CryptoPkg/Library/OpensslLib/openssl/ssl/record/rec_layer_s3.c -index 4bcffcc41e364..1569997bea2d3 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/record/rec_layer_s3.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/record/rec_layer_s3.c -@@ -81,6 +81,15 @@ int RECORD_LAYER_read_pending(const RECORD_LAYER *rl) - return SSL3_BUFFER_get_left(&rl->rbuf) != 0; - } - -+int RECORD_LAYER_data_present(const RECORD_LAYER *rl) -+{ -+ if (rl->rstate == SSL_ST_READ_BODY) -+ return 1; -+ if (RECORD_LAYER_processed_read_pending(rl)) -+ return 1; -+ return 0; -+} -+ - /* Checks if we have decrypted unread record data pending */ - int RECORD_LAYER_processed_read_pending(const RECORD_LAYER *rl) - { -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/record/record.h b/CryptoPkg/Library/OpensslLib/openssl/ssl/record/record.h -index 234656bf93942..b60f71c8cb23b 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/record/record.h -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/record/record.h -@@ -205,6 +205,7 @@ void RECORD_LAYER_release(RECORD_LAYER *rl); - int RECORD_LAYER_read_pending(const RECORD_LAYER *rl); - int RECORD_LAYER_processed_read_pending(const RECORD_LAYER *rl); - int RECORD_LAYER_write_pending(const RECORD_LAYER *rl); -+int RECORD_LAYER_data_present(const RECORD_LAYER *rl); - void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl); - void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl); - int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl); -diff --git a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -index eed649c6fdee9..d14c55ae557bc 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/ssl/ssl_lib.c -@@ -5492,6 +5492,9 @@ int SSL_free_buffers(SSL *ssl) - if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl)) - return 0; - -+ if (RECORD_LAYER_data_present(rl)) -+ return 0; -+ - RECORD_LAYER_release(rl); - return 1; - } diff --git a/SPECS/edk2/CVE-2024-6119.patch b/SPECS/edk2/CVE-2024-6119.patch deleted file mode 100644 index e821f23434..0000000000 --- a/SPECS/edk2/CVE-2024-6119.patch +++ /dev/null @@ -1,266 +0,0 @@ -From 05f360d9e849a1b277db628f1f13083a7f8dd04f Mon Sep 17 00:00:00 2001 -From: Viktor Dukhovni -Date: Wed, 19 Jun 2024 21:04:11 +1000 -Subject: [PATCH] Avoid type errors in EAI-related name check logic. - -The incorrectly typed data is read only, used in a compare operation, so -neither remote code execution, nor memory content disclosure were possible. -However, applications performing certificate name checks were vulnerable to -denial of service. - -The GENERAL_TYPE data type is a union, and we must take care to access the -correct member, based on `gen->type`, not all the member fields have the same -structure, and a segfault is possible if the wrong member field is read. - -The code in question was lightly refactored with the intent to make it more -obviously correct. - -Fixes CVE-2024-6119 - -Reviewed-by: Richard Levitte -Reviewed-by: Tomas Mraz -(cherry picked from commit 0890cd13d40fbc98f655f3974f466769caa83680) ---- - CryptoPkg/Library/OpensslLib/openssl/crypto/x509/v3_utl.c | 78 +++++++++++++------ - CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data.t | 12 ++- - CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-cert.pem | 21 +++++ - .../25-test_eai_data/kdc-root-cert.pem | 16 ++++ - CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc.sh | 41 ++++++++++ - 5 files changed, 142 insertions(+), 26 deletions(-) - create mode 100644 test/recipes/25-test_eai_data/kdc-cert.pem - create mode 100644 test/recipes/25-test_eai_data/kdc-root-cert.pem - create mode 100755 test/recipes/25-test_eai_data/kdc.sh - -diff --git a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/v3_utl.c b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/v3_utl.c -index 1a18174995196..a09414c972fa8 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/v3_utl.c -+++ b/CryptoPkg/Library/OpensslLib/openssl/crypto/x509/v3_utl.c -@@ -916,36 +916,64 @@ static int do_x509_check(X509 *x, const char *chk, size_t chklen, - ASN1_STRING *cstr; - - gen = sk_GENERAL_NAME_value(gens, i); -- if ((gen->type == GEN_OTHERNAME) && (check_type == GEN_EMAIL)) { -- if (OBJ_obj2nid(gen->d.otherName->type_id) == -- NID_id_on_SmtpUTF8Mailbox) { -- san_present = 1; -- -- /* -- * If it is not a UTF8String then that is unexpected and we -- * treat it as no match -- */ -- if (gen->d.otherName->value->type == V_ASN1_UTF8STRING) { -- cstr = gen->d.otherName->value->value.utf8string; -- -- /* Positive on success, negative on error! */ -- if ((rv = do_check_string(cstr, 0, equal, flags, -- chk, chklen, peername)) != 0) -- break; -- } -- } else -+ switch (gen->type) { -+ default: -+ continue; -+ case GEN_OTHERNAME: -+ switch (OBJ_obj2nid(gen->d.otherName->type_id)) { -+ default: - continue; -- } else { -- if ((gen->type != check_type) && (gen->type != GEN_OTHERNAME)) -+ case NID_id_on_SmtpUTF8Mailbox: -+ /*- -+ * https://datatracker.ietf.org/doc/html/rfc8398#section-3 -+ * -+ * Due to name constraint compatibility reasons described -+ * in Section 6, SmtpUTF8Mailbox subjectAltName MUST NOT -+ * be used unless the local-part of the email address -+ * contains non-ASCII characters. When the local-part is -+ * ASCII, rfc822Name subjectAltName MUST be used instead -+ * of SmtpUTF8Mailbox. This is compatible with legacy -+ * software that supports only rfc822Name (and not -+ * SmtpUTF8Mailbox). [...] -+ * -+ * SmtpUTF8Mailbox is encoded as UTF8String. -+ * -+ * If it is not a UTF8String then that is unexpected, and -+ * we ignore the invalid SAN (neither set san_present nor -+ * consider it a candidate for equality). This does mean -+ * that the subject CN may be considered, as would be the -+ * case when the malformed SmtpUtf8Mailbox SAN is instead -+ * simply absent. -+ * -+ * When CN-ID matching is not desirable, applications can -+ * choose to turn it off, doing so is at this time a best -+ * practice. -+ */ -+ if (check_type != GEN_EMAIL -+ || gen->d.otherName->value->type != V_ASN1_UTF8STRING) -+ continue; -+ alt_type = 0; -+ cstr = gen->d.otherName->value->value.utf8string; -+ break; -+ } -+ break; -+ case GEN_EMAIL: -+ if (check_type != GEN_EMAIL) - continue; -- } -- san_present = 1; -- if (check_type == GEN_EMAIL) - cstr = gen->d.rfc822Name; -- else if (check_type == GEN_DNS) -+ break; -+ case GEN_DNS: -+ if (check_type != GEN_DNS) -+ continue; - cstr = gen->d.dNSName; -- else -+ break; -+ case GEN_IPADD: -+ if (check_type != GEN_IPADD) -+ continue; - cstr = gen->d.iPAddress; -+ break; -+ } -+ san_present = 1; - /* Positive on success, negative on error! */ - if ((rv = do_check_string(cstr, alt_type, equal, flags, - chk, chklen, peername)) != 0) -diff --git a/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data.t b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data.t -index 522982ddfb802..e18735d89aadf 100644 ---- a/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data.t -+++ b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data.t -@@ -21,16 +21,18 @@ setup("test_eai_data"); - #./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/utf8_chain.pem test/recipes/25-test_eai_data/ascii_leaf.pem - #./util/wrap.pl apps/openssl verify -nameopt utf8 -no_check_time -CAfile test/recipes/25-test_eai_data/ascii_chain.pem test/recipes/25-test_eai_data/utf8_leaf.pem - --plan tests => 12; -+plan tests => 16; - - require_ok(srctop_file('test','recipes','tconversion.pl')); - my $folder = "test/recipes/25-test_eai_data"; - - my $ascii_pem = srctop_file($folder, "ascii_leaf.pem"); - my $utf8_pem = srctop_file($folder, "utf8_leaf.pem"); -+my $kdc_pem = srctop_file($folder, "kdc-cert.pem"); - - my $ascii_chain_pem = srctop_file($folder, "ascii_chain.pem"); - my $utf8_chain_pem = srctop_file($folder, "utf8_chain.pem"); -+my $kdc_chain_pem = srctop_file($folder, "kdc-root-cert.pem"); - - my $out; - my $outcnt = 0; -@@ -56,10 +58,18 @@ SKIP: { - - ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $ascii_chain_pem, $ascii_pem]))); - ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $utf8_chain_pem, $utf8_pem]))); -+ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $kdc_chain_pem, $kdc_pem]))); - - ok(!run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $ascii_chain_pem, $utf8_pem]))); - ok(!run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-CAfile", $utf8_chain_pem, $ascii_pem]))); - -+# Check an otherName does not get misparsed as an DNS name, (should trigger ASAN errors if violated). -+ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-verify_hostname", 'mx1.example.com', "-CAfile", $kdc_chain_pem, $kdc_pem]))); -+# Check an otherName does not get misparsed as an email address, (should trigger ASAN errors if violated). -+ok(run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-verify_email", 'joe@example.com', "-CAfile", $kdc_chain_pem, $kdc_pem]))); -+# We expect SmtpUTF8Mailbox to be a UTF8 String, not an IA5String. -+ok(!run(app(["openssl", "verify", "-nameopt", "utf8", "-no_check_time", "-verify_email", 'moe@example.com', "-CAfile", $kdc_chain_pem, $kdc_pem]))); -+ - #Check that we get the expected failure return code - with({ exit_checker => sub { return shift == 2; } }, - sub { -diff --git a/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-cert.pem b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-cert.pem -new file mode 100644 -index 0000000000000..e8a2c6f55d459 ---- /dev/null -+++ b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-cert.pem -@@ -0,0 +1,21 @@ -+-----BEGIN CERTIFICATE----- -+MIIDbDCCAlSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290 -+MCAXDTI0MDYyMDA2MTQxNVoYDzIxMjQwNjIwMDYxNDE1WjAXMRUwEwYDVQQDDAxU -+RVNULkVYQU1QTEUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6wfP+ -+6go79dkpo/dGLMlPZ7Gw/Q6gUYrCWZWUEgEeRVHCrqOlgUEyA+PcWas/XDPUxXry -+BQlJHLvlqamAQn8gs4QPBARFYWKNiTVGyaRkgNA1N5gqyZdrP9UE+ZJmdqxRAAe8 -+vvpGZWSgevPhLUiSCFYDiD0Rtji2Hm3rGUrReQFBQDEw2pNGwz9zIaxUs08kQZcx -+Yzyiplz5Oau+R/6sAgUwDlrD9xOlUxx/tA/MSDIfkK8qioU11uUZtO5VjkNQy/bT -+7zQMmXxWgm2MIgOs1u4YN7YGOtgqHE9v9iPHHfgrkbQDtVDGQsa8AQEhkUDSCtW9 -+3VFAKx6dGNXYzFwfAgMBAAGjgcgwgcUwHQYDVR0OBBYEFFR5tZycW19DmtbL4Zqj -+te1c2vZLMAkGA1UdIwQCMAAwCQYDVR0TBAIwADCBjQYDVR0RBIGFMIGCoD8GBisG -+AQUCAqA1MDOgDhsMVEVTVC5FWEFNUExFoSEwH6ADAgEBoRgwFhsGa3JidGd0GwxU -+RVNULkVYQU1QTEWgHQYIKwYBBQUHCAmgERYPbW9lQGV4YW1wbGUuY29tgQ9qb2VA -+ZXhhbXBsZS5jb22CD214MS5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEA -+T0xzVtVpRtaOzIhgzw7XQUdzWD5UEGSJJ1cBCOmKUWwDLTAouCYLFB4TbEE7MMUb -+iuMy60bjmVtvfJIXorGUgSadRe5RWJ5DamJWvPA0Q9x7blnEcXqEF+9Td+ypevgU -+UYHFmg83OYwxOsFXZ5cRuXMk3WCsDHQIBi6D1L6oDDZ2pfArs5mqm3thQKVlqyl1 -+El3XRYEdqAz/5eCOFNfwxF0ALxjxVr/Z50StUZU8I7Zfev6+kHhyrR7dqzYJImv9 -+0fTCOBEMjIETDsrA70OxAMu4V16nrWZdJdvzblS2qrt97Omkj+2kiPAJFB76RpwI -+oDQ9fKfUOAmUFth2/R/eGA== -+-----END CERTIFICATE----- -diff --git a/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-root-cert.pem b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-root-cert.pem -new file mode 100644 -index 0000000000000..a74c96bf31469 ---- /dev/null -+++ b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc-root-cert.pem -@@ -0,0 +1,16 @@ -+-----BEGIN CERTIFICATE----- -+MIICnDCCAYQCCQCBswYcrlZSHjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARS -+b290MCAXDTI0MDYyMDA2MTQxNVoYDzIxMjQwNjIwMDYxNDE1WjAPMQ0wCwYDVQQD -+DARSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqRj8S4kBbIUj -+61kZfi6nE35Q38U140+qt4uAiwAhKumfVHlBM0zQ98WFt5zMHIBQwIb3yjc2zj+0 -+qzUnQfwm1r/RfcMmBPEti9Ge+aEMSsds2gMXziOFM8wd2aAFPy7UVE0XpEWofsRK -+MGi61MKVdPSbGIxBwY9VW38/7D/wf1HtJe7y0xpuecR7GB2XAs+qST59NjuF+7wS -+dLM8Hb3TATgeYbXXWsRJgwz+SPzExg5WmLnU+7y4brZ32dHtdSmkRVSgSlaIf7Xj -+3Tc6Zi7I+W/JYk7hy1zUexVdWCak4PHcoWrXe0gNNN/t8VfLfMExt5z/HIylXnU7 -+pGUyqZlTGQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAHpLF1UCRy7b6Hk0rLokxI -+lgwiH9BU9mktigAGASvkbllpt+YbUbWnuYAvpHBGiP1qZtfX2r96UrSJaGO9BEzT -+Gp9ThnSjoj4Srul0+s/NArU22irFLmDzbalgevAmm9gMGkdqkiIm/mXbwrPj0ncl -+KGicevXryVpvaP62eZ8cc3C4p97frMmXxRX8sTdQpD/gRI7prdEILRSKveqT+AEW -+7rFGM5AOevb4U8ddop8A3D/kX0wcCAIBF6jCNk3uEJ57jVcagL04kPnVfdRiedTS -+vfq1DRNcD29d1H/9u0fHdSn1/+8Ep3X+afQ3C6//5NvOEaXcIGO4QSwkprQydfv8 -+-----END CERTIFICATE----- -diff --git a/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc.sh b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc.sh -new file mode 100755 -index 0000000000000..7a8dbc719fb71 ---- /dev/null -+++ b/CryptoPkg/Library/OpensslLib/openssl/test/recipes/25-test_eai_data/kdc.sh -@@ -0,0 +1,41 @@ -+#! /usr/bin/env bash -+ -+# Create a root CA, signing a leaf cert with a KDC principal otherName SAN, and -+# also a non-UTF8 smtpUtf8Mailbox SAN followed by an rfc822Name SAN and a DNS -+# name SAN. In the vulnerable EAI code, the KDC principal `otherName` should -+# trigger ASAN errors in DNS name checks, while the non-UTF8 `smtpUtf8Mailbox` -+# should likewise lead to ASAN issues with email name checks. -+ -+rm -f root-key.pem root-cert.pem -+openssl req -nodes -new -newkey rsa:2048 -keyout kdc-root-key.pem \ -+ -x509 -subj /CN=Root -days 36524 -out kdc-root-cert.pem -+ -+exts=$( -+ printf "%s\n%s\n%s\n%s = " \ -+ "subjectKeyIdentifier = hash" \ -+ "authorityKeyIdentifier = keyid" \ -+ "basicConstraints = CA:false" \ -+ "subjectAltName" -+ printf "%s, " "otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name" -+ printf "%s, " "otherName:1.3.6.1.5.5.7.8.9;IA5:moe@example.com" -+ printf "%s, " "email:joe@example.com" -+ printf "%s\n" "DNS:mx1.example.com" -+ printf "[kdc_princ_name]\n" -+ printf "realm = EXP:0, GeneralString:TEST.EXAMPLE\n" -+ printf "principal_name = EXP:1, SEQUENCE:kdc_principal_seq\n" -+ printf "[kdc_principal_seq]\n" -+ printf "name_type = EXP:0, INTEGER:1\n" -+ printf "name_string = EXP:1, SEQUENCE:kdc_principal_components\n" -+ printf "[kdc_principal_components]\n" -+ printf "princ1 = GeneralString:krbtgt\n" -+ printf "princ2 = GeneralString:TEST.EXAMPLE\n" -+ ) -+ -+printf "%s\n" "$exts" -+ -+openssl req -nodes -new -newkey rsa:2048 -keyout kdc-key.pem \ -+ -subj "/CN=TEST.EXAMPLE" | -+ openssl x509 -req -out kdc-cert.pem \ -+ -CA "kdc-root-cert.pem" -CAkey "kdc-root-key.pem" \ -+ -set_serial 2 -days 36524 \ -+ -extfile <(printf "%s\n" "$exts") diff --git a/SPECS/edk2/CVE-2025-3770.patch b/SPECS/edk2/CVE-2025-3770.patch deleted file mode 100644 index 3577990bc2..0000000000 --- a/SPECS/edk2/CVE-2025-3770.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 9e882b45ee5648f415540cea3c2c0f7e274b5e86 Mon Sep 17 00:00:00 2001 -From: John Mathews -Date: Fri, 30 May 2025 11:06:49 -0700 -Subject: [PATCH] UefiCpuPkg/PiSmmCpuDxeSmm: Safe handling of IDT register on - SMM entry - -Mitigates CVE-2025-3770 - -Do not assume that IDT.limit is loaded with a zero value upon SMM entry. -Delay enabling Machine Check Exceptions in SMM until after the SMM IDT -has been reloaded. - -Signed-off-by: John Mathews -Signed-off-by: rpm-build -Upstream-reference: https://github.com/tianocore/edk2/commit/d2d8d38ee08c5e602fb092f940dfecc1f5a4eb38.patch ---- - UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm -index 644366b..6e1cd45 100644 ---- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm -+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm -@@ -113,7 +113,7 @@ ProtFlatMode: - mov eax, strict dword 0 ; source operand will be patched - ASM_PFX(gPatchSmiCr3): - mov cr3, rax -- mov eax, 0x668 ; as cr4.PGE is not set here, refresh cr3 -+ mov eax, 0x628 ; as cr4.PGE is not set here, refresh cr3 - - mov cl, strict byte 0 ; source operand will be patched - ASM_PFX(gPatch5LevelPagingNeeded): -@@ -204,6 +204,10 @@ SmiHandlerIdtrAbsAddr: - mov ax, [rbx + DSC_SS] - mov ss, eax - -+ mov rax, cr4 ; enable MCE -+ bts rax, 6 -+ mov cr4, rax -+ - mov rbx, [rsp + 0x8] ; rbx <- CpuIndex - - ; enable CET if supported --- -2.45.4 - diff --git a/SPECS/edk2/DBXUpdate-20220812.ia32.bin b/SPECS/edk2/DBXUpdate-20220812.ia32.bin deleted file mode 100644 index fbdb270960..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20220812.ia32.bin and /dev/null differ diff --git a/SPECS/edk2/DBXUpdate-20220812.x64.bin b/SPECS/edk2/DBXUpdate-20220812.x64.bin deleted file mode 100644 index ab95a63894..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20220812.x64.bin and /dev/null differ diff --git a/SPECS/edk2/DBXUpdate-20230314.ia32.bin b/SPECS/edk2/DBXUpdate-20230314.ia32.bin deleted file mode 100644 index 0d4b335608..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20230314.ia32.bin and /dev/null differ diff --git a/SPECS/edk2/DBXUpdate-20230314.x64.bin b/SPECS/edk2/DBXUpdate-20230314.x64.bin deleted file mode 100644 index e211fbcf72..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20230314.x64.bin and /dev/null differ diff --git a/SPECS/edk2/DBXUpdate-20230509.ia32.bin b/SPECS/edk2/DBXUpdate-20230509.ia32.bin deleted file mode 100644 index 6dbb7028d6..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20230509.ia32.bin and /dev/null differ diff --git a/SPECS/edk2/DBXUpdate-20230509.x64.bin b/SPECS/edk2/DBXUpdate-20230509.x64.bin deleted file mode 100644 index e2f6b0259a..0000000000 Binary files a/SPECS/edk2/DBXUpdate-20230509.x64.bin and /dev/null differ diff --git a/SPECS/edk2/README.experimental b/SPECS/edk2/README.experimental deleted file mode 100644 index 0859237582..0000000000 --- a/SPECS/edk2/README.experimental +++ /dev/null @@ -1,36 +0,0 @@ - -experimental edk2 builds ------------------------- - -OVMF.stateless.fd -OVMF.stateless.secboot.fd -OVMF.stateless.secboot.pcr - - Stateless (== no persistent uefi variables) ovmf build. Has secure - boot support, the 'secboot' variant has secure boot enabled. Does - not require SMM support. - -OVMF_CODE.4m.secboot.strictnx.fd - - OVMF build with strict NX configuration (using r-x for code, rw- for - data). Known to not work with some grub and linux kernel versions - because they use the wrong memory type for allocations and run into - NX faults. Useful for bootloader development and CI. - -QEMU_EFI.strictnx.fd -QEMU_EFI-strictnx-pflash.raw - - ArmVirt build with strict NX configuration (see above for details). - -QEMU_EFI.secboot.testonly.fd -QEMU_EFI-secboot-testonly-pflash.raw -vars-template-secboot-testonly-pflash.raw - - ArmVirt build with secure boot support. - - Exposes the secure boot APIs, so they can be used for development / - testing / CI. - - The EFI variable store is NOT protected, therefore the build is NOT - suitable for production use. - diff --git a/SPECS/edk2/edk2-build.fedora b/SPECS/edk2/edk2-build.fedora deleted file mode 100644 index 0a91fd8461..0000000000 --- a/SPECS/edk2/edk2-build.fedora +++ /dev/null @@ -1,311 +0,0 @@ - -[opts.ovmf.common] -NETWORK_HTTP_BOOT_ENABLE = TRUE -NETWORK_IP6_ENABLE = TRUE -NETWORK_TLS_ENABLE = TRUE -NETWORK_ISCSI_ENABLE = TRUE -NETWORK_ALLOW_HTTP_CONNECTIONS = TRUE -TPM2_ENABLE = TRUE -TPM2_CONFIG_ENABLE = TRUE -TPM1_ENABLE = FALSE -CAVIUM_ERRATUM_27456 = TRUE - -[opts.ovmf.4m] -FD_SIZE_4MB = TRUE - -[opts.ovmf.2m] -FD_SIZE_2MB = TRUE -NETWORK_ISCSI_ENABLE = FALSE -NETWORK_TLS_ENABLE = FALSE - -[opts.ovmf.sb.smm] -SECURE_BOOT_ENABLE = TRUE -SMM_REQUIRE = TRUE -BUILD_SHELL = FALSE - -# requires edk2 2022-11 or newer -[opts.ovmf.sb.stateless] -SECURE_BOOT_ENABLE = TRUE -SMM_REQUIRE = FALSE -BUILD_SHELL = FALSE - -[opts.armvirt.verbose] -DEBUG_PRINT_ERROR_LEVEL = 0x8040004F - -[opts.armvirt.silent] -DEBUG_PRINT_ERROR_LEVEL = 0x80000000 - -[opts.armvirt.sb.testonly] -SECURE_BOOT_ENABLE = TRUE -BUILD_SHELL = FALSE - -[opts.armvirt.kernel] -TPM2_ENABLE = FALSE -TPM2_CONFIG_ENABLE = FALSE - - -[pcds.nx.strict] -PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD5 -PcdImageProtectionPolicy = 0x03 -PcdSetNxForStack = TRUE -# Default is FALSE, so there no need to actually set it. -#PcdUninstallMemAttrProtocol = FALSE - -[pcds.nx.broken.shim.grub] -# grub.efi uses EfiLoaderData for code -PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD1 -# shim.efi has broken MemAttr code -PcdUninstallMemAttrProtocol = TRUE - - -##################################################################### -# stateful ovmf builds (with vars in flash) - -[build.ovmf.2m.default] -desc = ovmf build (64-bit, 2MB) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.2m -plat = OvmfX64 -dest = Fedora/ovmf -cpy1 = FV/OVMF_CODE.fd -cpy2 = FV/OVMF_VARS.fd -cpy3 = X64/Shell.efi - -[build.ovmf.4m.default] -desc = ovmf build (64-bit, 4MB) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m -plat = OvmfX64 -dest = Fedora/ovmf -cpy1 = FV/OVMF_CODE.fd OVMF_CODE_4M.fd -cpy2 = FV/OVMF_VARS.fd OVMF_VARS_4M.fd - -[build.ovmf.2m.sb.smm] -desc = ovmf build (64-bit, 2MB, q35 only, needs smm, secure boot) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.2m - ovmf.sb.smm -plat = OvmfX64 -dest = Fedora/ovmf -cpy1 = FV/OVMF_CODE.fd OVMF_CODE.secboot.fd -cpy2 = X64/EnrollDefaultKeys.efi - -[build.ovmf.4m.sb.smm] -desc = ovmf build (64-bit, 4MB, q35 only, needs smm, secure boot) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m - ovmf.sb.smm -plat = OvmfX64 -dest = Fedora/ovmf -cpy1 = FV/OVMF_CODE.fd OVMF_CODE_4M.secboot.fd - - -##################################################################### -# stateless ovmf builds (firmware in rom or r/o flash) - -[build.ovmf.microvm] -desc = ovmf build for qemu microvm (2MB) -conf = OvmfPkg/Microvm/MicrovmX64.dsc -arch = X64 -opts = ovmf.common - ovmf.2m -plat = MicrovmX64 -dest = Fedora/ovmf -cpy1 = FV/MICROVM.fd - -[build.ovmf.xen] -desc = ovmf build for Xen -conf = OvmfPkg/OvmfXen.dsc -arch = X64 -opts = ovmf.common - ovmf.2m -plat = OvmfXen -dest = Fedora/xen -cpy1 = FV/OVMF.fd - -[build.ovmf.amdsev] -desc = ovmf build for AmdSev (2MB) -conf = OvmfPkg/AmdSev/AmdSevX64.dsc -arch = X64 -opts = ovmf.common - ovmf.2m -plat = AmdSev -dest = Fedora/ovmf -cpy1 = FV/OVMF.fd OVMF.amdsev.fd - -[build.ovmf.inteltdx] -desc = ovmf build for IntelTdx (2MB) -conf = OvmfPkg/IntelTdx/IntelTdxX64.dsc -arch = X64 -opts = ovmf.common - ovmf.2m - ovmf.sb.stateless -plat = IntelTdx -dest = Fedora/ovmf -cpy1 = FV/OVMF.fd OVMF.inteltdx.fd - - -##################################################################### -# armvirt builds - -[build.armvirt.aa64.verbose] -desc = ArmVirt build for qemu, 64-bit (arm v8), verbose -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.verbose -pcds = nx.broken.shim.grub -plat = ArmVirtQemu-AARCH64 -dest = Fedora/aarch64 -cpy1 = FV/QEMU_EFI.fd -cpy2 = FV/QEMU_VARS.fd -cpy3 = FV/QEMU_EFI.fd QEMU_EFI-pflash.raw -cpy4 = FV/QEMU_VARS.fd vars-template-pflash.raw -pad3 = QEMU_EFI-pflash.raw 64m -pad4 = vars-template-pflash.raw 64m - -[build.armvirt.aa64.silent] -desc = ArmVirt build for qemu, 64-bit (arm v8), silent -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.silent -pcds = nx.broken.shim.grub -plat = ArmVirtQemu-AARCH64 -dest = Fedora/aarch64 -cpy1 = FV/QEMU_EFI.fd QEMU_EFI.silent.fd -cpy2 = FV/QEMU_EFI.fd QEMU_EFI-silent-pflash.raw -pad2 = QEMU_EFI-silent-pflash.raw 64m - -[build.armvirt.aa64.kernel] -desc = ArmVirt build for qemu, 64-bit (arm v8) -conf = ArmVirtPkg/ArmVirtQemuKernel.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.silent - armvirt.kernel -pcds = nx.broken.shim.grub -plat = ArmVirtQemuKernel-AARCH64 -dest = Fedora/aarch64 -cpy1 = FV/QEMU_EFI.fd QEMU_EFI.kernel.fd - - -##################################################################### -# riscv - -[build.riscv.qemu] -conf = OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc -arch = RISCV64 -plat = RiscVVirtQemu -dest = Fedora/riscv -cpy1 = FV/RISCV_VIRT_CODE.fd -cpy2 = FV/RISCV_VIRT_CODE.fd RISCV_VIRT_CODE.raw -cpy3 = FV/RISCV_VIRT_VARS.fd -cpy4 = FV/RISCV_VIRT_VARS.fd RISCV_VIRT_VARS.raw -pad1 = RISCV_VIRT_CODE.raw 32m -pad2 = RISCV_VIRT_VARS.raw 32m - - -##################################################################### -# 32-bit builds - -[build.ovmf.ia32.default] -desc = ovmf build (32-bit, 2MB) -conf = OvmfPkg/OvmfPkgIa32.dsc -arch = IA32 -opts = ovmf.common - ovmf.2m -plat = OvmfIa32 -dest = Fedora/ovmf-ia32 -cpy1 = FV/OVMF_CODE.fd -cpy2 = FV/OVMF_VARS.fd -cpy3 = IA32/Shell.efi - -[build.ovmf.ia32.sb.smm] -desc = ovmf build (32-bit, 2MB, q35 only, needs smm, secure boot) -conf = OvmfPkg/OvmfPkgIa32.dsc -arch = IA32 -opts = ovmf.common - ovmf.2m - ovmf.sb.smm -plat = OvmfIa32 -dest = Fedora/ovmf-ia32 -cpy1 = FV/OVMF_CODE.fd OVMF_CODE.secboot.fd -cpy2 = IA32/EnrollDefaultKeys.efi - -[build.armvirt.arm] -desc = ArmVirt build for qemu, 32-bit (arm v7) -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = ARM -opts = ovmf.common -pcds = nx.broken.shim.grub -plat = ArmVirtQemu-ARM -dest = Fedora/arm -cpy1 = FV/QEMU_EFI.fd -cpy2 = FV/QEMU_VARS.fd -cpy3 = FV/QEMU_EFI.fd QEMU_EFI-pflash.raw -cpy4 = FV/QEMU_VARS.fd vars-template-pflash.raw -pad3 = QEMU_EFI-pflash.raw 64m -pad4 = vars-template-pflash.raw 64m - - -##################################################################### -# experimental builds - -[build.ovmf.sb.stateless] -desc = ovmf build (64-bit, stateless secure boot) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m - ovmf.sb.stateless -plat = OvmfX64 -dest = Fedora/experimental -cpy1 = FV/OVMF.fd OVMF.stateless.fd - -[build.ovmf.strict.nx] -desc = ovmf build (64-bit, 4MB, q35 only, needs smm, secure boot, strict nx) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m - ovmf.sb.smm -pcds = nx.strict -plat = OvmfX64 -dest = Fedora/experimental -cpy1 = FV/OVMF_CODE.fd OVMF_CODE_4M.secboot.strictnx.fd - -[build.armvirt.aa64.strict.nx] -desc = ArmVirt build for qemu, 64-bit (arm v8), verbose -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.verbose -pcds = nx.strict -plat = ArmVirtQemu-AARCH64 -dest = Fedora/experimental -cpy1 = FV/QEMU_EFI.fd QEMU_EFI.strictnx.fd -cpy3 = FV/QEMU_EFI.fd QEMU_EFI-strictnx-pflash.raw -pad3 = QEMU_EFI-strictnx-pflash.raw 64m - -[build.armvirt.aa64.secboot.testonly] -desc = ArmVirt build for qemu, 64-bit (arm v8), secure boot -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.verbose - armvirt.sb.testonly -pcds = nx.strict -plat = ArmVirtQemu-AARCH64 -dest = Fedora/experimental -cpy1 = FV/QEMU_EFI.fd QEMU_EFI.secboot.testonly.fd -cpy3 = FV/QEMU_EFI.fd QEMU_EFI-secboot-testonly-pflash.raw -pad3 = QEMU_EFI-secboot-testonly-pflash.raw 64m diff --git a/SPECS/edk2/edk2-build.fedora.platforms b/SPECS/edk2/edk2-build.fedora.platforms deleted file mode 100644 index e9aad91b02..0000000000 --- a/SPECS/edk2/edk2-build.fedora.platforms +++ /dev/null @@ -1,51 +0,0 @@ - -##################################################################### -# ext4 driver - -[build.ext4.x64] -desc = ext4 driver -conf = Features/Ext4Pkg/Ext4Pkg.dsc -arch = X64 -plat = Ext4Pkg -dest = Fedora/drivers -cpy1 = X64/Ext4Dxe.efi ext4x64.efi - -[build.ext4.aa64] -desc = ext4 driver -conf = Features/Ext4Pkg/Ext4Pkg.dsc -arch = AARCH64 -plat = Ext4Pkg -dest = Fedora/drivers -cpy1 = AARCH64/Ext4Dxe.efi ext4aa64.efi - -[build.ext4.riscv64] -desc = ext4 driver -conf = Features/Ext4Pkg/Ext4Pkg.dsc -arch = RISCV64 -plat = Ext4Pkg -dest = Fedora/drivers -cpy1 = RISCV64/Ext4Dxe.efi ext4riscv64.efi - - -##################################################################### -# arm standalone mm - -[build.standalone.mm.aa64] -conf = Platform/StandaloneMm/PlatformStandaloneMmPkg/PlatformStandaloneMmRpmb.dsc -arch = AARCH64 -plat = MmStandaloneRpmb -dest = Fedora/aarch64 -cpy1 = FV/BL32_AP_MM.fd - - -##################################################################### -# loongarch builds - -[build.loongarch] -desc = Loongarch build -conf = Platform/Loongson/LoongArchQemuPkg/Loongson.dsc -arch = LOONGARCH64 -plat = LoongArchQemu -dest = Fedora/loongarch64 -cpy1 = FV/QEMU_EFI.fd -cpy2 = FV/QEMU_VARS.fd diff --git a/SPECS/edk2/edk2-build.py b/SPECS/edk2/edk2-build.py deleted file mode 100755 index 5f02ecb854..0000000000 --- a/SPECS/edk2/edk2-build.py +++ /dev/null @@ -1,447 +0,0 @@ -#!/usr/bin/python3 -""" -build helper script for edk2, see -https://gitlab.com/kraxel/edk2-build-config - -""" -import os -import sys -import time -import shutil -import argparse -import subprocess -import configparser - -rebase_prefix = "" -version_override = None -release_date = None - -# pylint: disable=unused-variable -def check_rebase(): - """ detect 'git rebase -x edk2-build.py master' testbuilds """ - global rebase_prefix - global version_override - gitdir = '.git' - - if os.path.isfile(gitdir): - with open(gitdir, 'r', encoding = 'utf-8') as f: - (unused, gitdir) = f.read().split() - - if not os.path.exists(f'{gitdir}/rebase-merge/msgnum'): - return - with open(f'{gitdir}/rebase-merge/msgnum', 'r', encoding = 'utf-8') as f: - msgnum = int(f.read()) - with open(f'{gitdir}/rebase-merge/end', 'r', encoding = 'utf-8') as f: - end = int(f.read()) - with open(f'{gitdir}/rebase-merge/head-name', 'r', encoding = 'utf-8') as f: - head = f.read().strip().split('/') - - rebase_prefix = f'[ {int(msgnum/2)} / {int(end/2)} - {head[-1]} ] ' - if msgnum != end and not version_override: - # fixed version speeds up builds - version_override = "test-build-patch-series" - -def get_coredir(cfg): - if cfg.has_option('global', 'core'): - return os.path.abspath(cfg['global']['core']) - return os.getcwd() - -def get_toolchain(cfg, build): - if cfg.has_option(build, 'tool'): - return cfg[build]['tool'] - if cfg.has_option('global', 'tool'): - return cfg['global']['tool'] - return 'GCC5' - -def get_hostarch(): - mach = os.uname().machine - if mach == 'x86_64': - return 'X64' - if mach == 'aarch64': - return 'AARCH64' - if mach == 'riscv64': - return 'RISCV64' - return 'UNKNOWN' - -def get_version(cfg, silent = False): - coredir = get_coredir(cfg) - if version_override: - version = version_override - if not silent: - print('') - print(f'### version [override]: {version}') - return version - if os.environ.get('RPM_PACKAGE_NAME'): - version = os.environ.get('RPM_PACKAGE_NAME') - version += '-' + os.environ.get('RPM_PACKAGE_VERSION') - version += '-' + os.environ.get('RPM_PACKAGE_RELEASE') - if not silent: - print('') - print(f'### version [rpmbuild]: {version}') - return version - if os.path.exists(coredir + '/.git'): - cmdline = [ 'git', 'describe', '--tags', '--abbrev=8', - '--match=edk2-stable*' ] - result = subprocess.run(cmdline, cwd = coredir, - stdout = subprocess.PIPE, - check = True) - version = result.stdout.decode().strip() - if not silent: - print('') - print(f'### version [git]: {version}') - return version - return None - -def pcd_string(name, value): - return f'{name}=L{value}\\0' - -def pcd_version(cfg, silent = False): - version = get_version(cfg, silent) - if version is None: - return [] - return [ '--pcd', pcd_string('PcdFirmwareVersionString', version) ] - -def pcd_release_date(): - if release_date is None: - return [] - return [ '--pcd', pcd_string('PcdFirmwareReleaseDateString', release_date) ] - -def build_message(line, line2 = None, silent = False): - if os.environ.get('TERM') in [ 'xterm', 'xterm-256color' ]: - # setxterm title - start = '\x1b]2;' - end = '\x07' - print(f'{start}{rebase_prefix}{line}{end}', end = '') - - if silent: - print(f'### {rebase_prefix}{line}', flush = True) - else: - print('') - print('###') - print(f'### {rebase_prefix}{line}') - if line2: - print(f'### {line2}') - print('###', flush = True) - -def build_run(cmdline, name, section, silent = False, nologs = False): - if silent: - logfile = f'{section}.log' - if nologs: - print(f'### building in silent mode [no log] ...', flush = True) - else: - print(f'### building in silent mode [{logfile}] ...', flush = True) - start = time.time() - result = subprocess.run(cmdline, check = False, - stdout = subprocess.PIPE, - stderr = subprocess.STDOUT) - if not nologs: - with open(logfile, 'wb') as f: - f.write(result.stdout) - - if result.returncode: - print('### BUILD FAILURE') - print('### cmdline') - print(cmdline) - print('### output') - print(result.stdout.decode()) - print(f'### exit code: {result.returncode}') - else: - secs = int(time.time() - start) - print(f'### OK ({int(secs/60)}:{secs%60:02d})') - else: - print(cmdline, flush = True) - result = subprocess.run(cmdline, check = False) - if result.returncode: - print(f'ERROR: {cmdline[0]} exited with {result.returncode}' - f' while building {name}') - sys.exit(result.returncode) - -def build_copy(plat, tgt, toolchain, dstdir, copy): - srcdir = f'Build/{plat}/{tgt}_{toolchain}' - names = copy.split() - srcfile = names[0] - if len(names) > 1: - dstfile = names[1] - else: - dstfile = os.path.basename(srcfile) - print(f'# copy: {srcdir} / {srcfile} => {dstdir} / {dstfile}') - - src = srcdir + '/' + srcfile - dst = dstdir + '/' + dstfile - os.makedirs(os.path.dirname(dst), exist_ok = True) - shutil.copy(src, dst) - -def pad_file(dstdir, pad): - args = pad.split() - if len(args) < 2: - raise RuntimeError(f'missing arg for pad ({args})') - name = args[0] - size = args[1] - cmdline = [ - 'truncate', - '--size', size, - dstdir + '/' + name, - ] - print(f'# padding: {dstdir} / {name} => {size}') - subprocess.run(cmdline, check = True) - -# pylint: disable=too-many-branches -def build_one(cfg, build, jobs = None, silent = False, nologs = False): - b = cfg[build] - - cmdline = [ 'build' ] - cmdline += [ '-t', get_toolchain(cfg, build) ] - cmdline += [ '-p', b['conf'] ] - - if (b['conf'].startswith('OvmfPkg/') or - b['conf'].startswith('ArmVirtPkg/')): - cmdline += pcd_version(cfg, silent) - cmdline += pcd_release_date() - - if jobs: - cmdline += [ '-n', jobs ] - for arch in b['arch'].split(): - if arch == 'HOST': - cmdline += [ '-a', get_hostarch() ] - else: - cmdline += [ '-a', arch ] - if 'opts' in b: - for name in b['opts'].split(): - section = 'opts.' + name - for opt in cfg[section]: - cmdline += [ '-D', opt + '=' + cfg[section][opt] ] - if 'pcds' in b: - for name in b['pcds'].split(): - section = 'pcds.' + name - for pcd in cfg[section]: - cmdline += [ '--pcd', pcd + '=' + cfg[section][pcd] ] - if 'tgts' in b: - tgts = b['tgts'].split() - else: - tgts = [ 'DEBUG' ] - for tgt in tgts: - desc = None - if 'desc' in b: - desc = b['desc'] - build_message(f'building: {b["conf"]} ({b["arch"]}, {tgt})', - f'description: {desc}', - silent = silent) - build_run(cmdline + [ '-b', tgt ], - b['conf'], - build + '.' + tgt, - silent, - nologs) - - if 'plat' in b: - # copy files - for cpy in b: - if not cpy.startswith('cpy'): - continue - build_copy(b['plat'], tgt, - get_toolchain(cfg, build), - b['dest'], b[cpy]) - # pad builds - for pad in b: - if not pad.startswith('pad'): - continue - pad_file(b['dest'], b[pad]) - -def build_basetools(silent = False, nologs = False): - build_message('building: BaseTools', silent = silent) - basedir = os.environ['EDK_TOOLS_PATH'] + '/Source/C' - cmdline = [ 'make', '-C', basedir ] - build_run(cmdline, 'BaseTools', 'build.basetools', silent, nologs) - -def binary_exists(name): - for pdir in os.environ['PATH'].split(':'): - if os.path.exists(pdir + '/' + name): - return True - return False - -def prepare_env(cfg, silent = False): - """ mimic Conf/BuildEnv.sh """ - workspace = os.getcwd() - packages = [ workspace, ] - path = os.environ['PATH'].split(':') - dirs = [ - 'BaseTools/Bin/Linux-x86_64', - 'BaseTools/BinWrappers/PosixLike' - ] - - if cfg.has_option('global', 'pkgs'): - for pkgdir in cfg['global']['pkgs'].split(): - packages.append(os.path.abspath(pkgdir)) - coredir = get_coredir(cfg) - if coredir != workspace: - packages.append(coredir) - - # add basetools to path - for pdir in dirs: - p = coredir + '/' + pdir - if not os.path.exists(p): - continue - if p in path: - continue - path.insert(0, p) - - # run edksetup if needed - toolsdef = coredir + '/Conf/tools_def.txt' - if not os.path.exists(toolsdef): - os.makedirs(os.path.dirname(toolsdef), exist_ok = True) - build_message('running BaseTools/BuildEnv', silent = silent) - cmdline = [ 'bash', 'BaseTools/BuildEnv' ] - subprocess.run(cmdline, cwd = coredir, check = True) - - # set variables - os.environ['PATH'] = ':'.join(path) - os.environ['PACKAGES_PATH'] = ':'.join(packages) - os.environ['WORKSPACE'] = workspace - os.environ['EDK_TOOLS_PATH'] = coredir + '/BaseTools' - os.environ['CONF_PATH'] = coredir + '/Conf' - os.environ['PYTHON_COMMAND'] = '/usr/bin/python3' - os.environ['PYTHONHASHSEED'] = '1' - - # for cross builds - if binary_exists('arm-linux-gnueabi-gcc'): - # ubuntu - os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnueabi-' - os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnueabi-' - elif binary_exists('arm-linux-gnu-gcc'): - # fedora - os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnu-' - os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnu-' - if binary_exists('loongarch64-linux-gnu-gcc'): - os.environ['GCC5_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-' - os.environ['GCC_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-' - - hostarch = os.uname().machine - if binary_exists('aarch64-linux-gnu-gcc') and hostarch != 'aarch64': - os.environ['GCC5_AARCH64_PREFIX'] = 'aarch64-linux-gnu-' - os.environ['GCC_AARCH64_PREFIX'] = 'aarch64-linux-gnu-' - if binary_exists('riscv64-linux-gnu-gcc') and hostarch != 'riscv64': - os.environ['GCC5_RISCV64_PREFIX'] = 'riscv64-linux-gnu-' - os.environ['GCC_RISCV64_PREFIX'] = 'riscv64-linux-gnu-' - if binary_exists('x86_64-linux-gnu-gcc') and hostarch != 'x86_64': - os.environ['GCC5_IA32_PREFIX'] = 'x86_64-linux-gnu-' - os.environ['GCC5_X64_PREFIX'] = 'x86_64-linux-gnu-' - os.environ['GCC5_BIN'] = 'x86_64-linux-gnu-' - os.environ['GCC_IA32_PREFIX'] = 'x86_64-linux-gnu-' - os.environ['GCC_X64_PREFIX'] = 'x86_64-linux-gnu-' - os.environ['GCC_BIN'] = 'x86_64-linux-gnu-' - -def build_list(cfg): - for build in cfg.sections(): - if not build.startswith('build.'): - continue - name = build.lstrip('build.') - desc = 'no description' - if 'desc' in cfg[build]: - desc = cfg[build]['desc'] - print(f'# {name:20s} - {desc}') - -def main(): - parser = argparse.ArgumentParser(prog = 'edk2-build', - description = 'edk2 build helper script') - parser.add_argument('-c', '--config', dest = 'configfile', - type = str, default = '.edk2.builds', metavar = 'FILE', - help = 'read configuration from FILE (default: .edk2.builds)') - parser.add_argument('-C', '--directory', dest = 'directory', type = str, - help = 'change to DIR before building', metavar = 'DIR') - parser.add_argument('-j', '--jobs', dest = 'jobs', type = str, - help = 'allow up to JOBS parallel build jobs', - metavar = 'JOBS') - parser.add_argument('-m', '--match', dest = 'match', - type = str, action = 'append', - help = 'only run builds matching INCLUDE (substring)', - metavar = 'INCLUDE') - parser.add_argument('-x', '--exclude', dest = 'exclude', - type = str, action = 'append', - help = 'skip builds matching EXCLUDE (substring)', - metavar = 'EXCLUDE') - parser.add_argument('-l', '--list', dest = 'list', - action = 'store_true', default = False, - help = 'list build configs available') - parser.add_argument('--silent', dest = 'silent', - action = 'store_true', default = False, - help = 'write build output to logfiles, ' - 'write to console only on errors') - parser.add_argument('--no-logs', dest = 'nologs', - action = 'store_true', default = False, - help = 'do not write build log files (with --silent)') - parser.add_argument('--core', dest = 'core', type = str, metavar = 'DIR', - help = 'location of the core edk2 repository ' - '(i.e. where BuildTools are located)') - parser.add_argument('--pkg', '--package', dest = 'pkgs', - type = str, action = 'append', metavar = 'DIR', - help = 'location(s) of additional packages ' - '(can be specified multiple times)') - parser.add_argument('-t', '--toolchain', dest = 'toolchain', - type = str, metavar = 'NAME', - help = 'tool chain to be used to build edk2') - parser.add_argument('--version-override', dest = 'version_override', - type = str, metavar = 'VERSION', - help = 'set firmware build version') - parser.add_argument('--release-date', dest = 'release_date', - type = str, metavar = 'DATE', - help = 'set firmware build release date (in MM/DD/YYYY format)') - options = parser.parse_args() - - if options.directory: - os.chdir(options.directory) - - if not os.path.exists(options.configfile): - print(f'config file "{options.configfile}" not found') - return 1 - - cfg = configparser.ConfigParser() - cfg.optionxform = str - cfg.read(options.configfile) - - if options.list: - build_list(cfg) - return 0 - - if not cfg.has_section('global'): - cfg.add_section('global') - if options.core: - cfg.set('global', 'core', options.core) - if options.pkgs: - cfg.set('global', 'pkgs', ' '.join(options.pkgs)) - if options.toolchain: - cfg.set('global', 'tool', options.toolchain) - - global version_override - global release_date - check_rebase() - if options.version_override: - version_override = options.version_override - if options.release_date: - release_date = options.release_date - - prepare_env(cfg, options.silent) - build_basetools(options.silent, options.nologs) - for build in cfg.sections(): - if not build.startswith('build.'): - continue - if options.match: - matching = False - for item in options.match: - if item in build: - matching = True - if not matching: - print(f'# skipping "{build}" (not matching "{"|".join(options.match)}")') - continue - if options.exclude: - exclude = False - for item in options.exclude: - if item in build: - print(f'# skipping "{build}" (matching "{item}")') - exclude = True - if exclude: - continue - build_one(cfg, build, options.jobs, options.silent, options.nologs) - - return 0 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/SPECS/edk2/edk2-build.rhel-9 b/SPECS/edk2/edk2-build.rhel-9 deleted file mode 100644 index cb172ed8a9..0000000000 --- a/SPECS/edk2/edk2-build.rhel-9 +++ /dev/null @@ -1,127 +0,0 @@ - -[opts.ovmf.common] -NETWORK_HTTP_BOOT_ENABLE = TRUE -NETWORK_IP6_ENABLE = TRUE -NETWORK_TLS_ENABLE = TRUE -NETWORK_ISCSI_ENABLE = TRUE -NETWORK_ALLOW_HTTP_CONNECTIONS = TRUE -TPM2_ENABLE = TRUE -TPM2_CONFIG_ENABLE = TRUE -TPM1_ENABLE = FALSE -CAVIUM_ERRATUM_27456 = TRUE - -[opts.ovmf.4m] -FD_SIZE_4MB = TRUE - -[opts.ovmf.sb.smm] -SECURE_BOOT_ENABLE = TRUE -SMM_REQUIRE = TRUE -BUILD_SHELL = FALSE - -[opts.ovmf.sb.stateless] -SECURE_BOOT_ENABLE = TRUE -SMM_REQUIRE = FALSE -BUILD_SHELL = FALSE - -[opts.armvirt.verbose] -DEBUG_PRINT_ERROR_LEVEL = 0x8040004F - -[opts.armvirt.silent] -DEBUG_PRINT_ERROR_LEVEL = 0x80000000 - - -[pcds.nx.strict] -PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD5 -PcdUninstallMemAttrProtocol = FALSE - -[pcds.nx.broken.shim.grub] -# grub.efi uses EfiLoaderData for code -PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD1 -# shim.efi has broken MemAttr code -PcdUninstallMemAttrProtocol = TRUE - - -##################################################################### -# stateful ovmf builds (with vars in flash) - -[build.ovmf.4m.default] -desc = ovmf build (64-bit, 4MB) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m -plat = OvmfX64 -dest = RHEL-9/ovmf -cpy1 = FV/OVMF_CODE.fd OVMF_CODE.fd -cpy2 = FV/OVMF_VARS.fd -cpy3 = X64/Shell.efi - -[build.ovmf.4m.sb.smm] -desc = ovmf build (64-bit, 4MB, q35 only, needs smm, secure boot) -conf = OvmfPkg/OvmfPkgX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m - ovmf.sb.smm -plat = OvmfX64 -dest = RHEL-9/ovmf -cpy1 = FV/OVMF_CODE.fd OVMF_CODE.secboot.fd -cpy2 = X64/EnrollDefaultKeys.efi - - -##################################################################### -# stateless ovmf builds (firmware in rom or r/o flash) - -[build.ovmf.amdsev] -desc = ovmf build for AmdSev (4MB) -conf = OvmfPkg/AmdSev/AmdSevX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m -plat = AmdSev -dest = RHEL-9/ovmf -cpy1 = FV/OVMF.fd OVMF.amdsev.fd - -[build.ovmf.inteltdx] -desc = ovmf build for IntelTdx (4MB) -conf = OvmfPkg/IntelTdx/IntelTdxX64.dsc -arch = X64 -opts = ovmf.common - ovmf.4m - ovmf.sb.stateless -plat = IntelTdx -dest = RHEL-9/ovmf -cpy1 = FV/OVMF.fd OVMF.inteltdx.fd - - -##################################################################### -# armvirt builds - -[build.armvirt.aa64.verbose] -desc = ArmVirt build for qemu, 64-bit (arm v8), verbose -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.verbose -pcds = nx.broken.shim.grub -plat = ArmVirtQemu-AARCH64 -dest = RHEL-9/aarch64 -cpy1 = FV/QEMU_EFI.fd -cpy2 = FV/QEMU_VARS.fd -cpy3 = FV/QEMU_EFI.fd QEMU_EFI-pflash.raw -cpy4 = FV/QEMU_VARS.fd vars-template-pflash.raw -pad3 = QEMU_EFI-pflash.raw 64m -pad4 = vars-template-pflash.raw 64m - -[build.armvirt.aa64.silent] -desc = ArmVirt build for qemu, 64-bit (arm v8), silent -conf = ArmVirtPkg/ArmVirtQemu.dsc -arch = AARCH64 -opts = ovmf.common - armvirt.silent -pcds = nx.broken.shim.grub -plat = ArmVirtQemu-AARCH64 -dest = RHEL-9/aarch64 -cpy1 = FV/QEMU_EFI.fd QEMU_EFI.silent.fd -cpy2 = FV/QEMU_EFI.fd QEMU_EFI-silent-pflash.raw -pad2 = QEMU_EFI-silent-pflash.raw 64m diff --git a/SPECS/edk2/edk2.signatures.json b/SPECS/edk2/edk2.signatures.json deleted file mode 100644 index 3a5fe9358e..0000000000 --- a/SPECS/edk2/edk2.signatures.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "Signatures": { - "30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json": "827c542dee2906d261c92c19f390637c1e653165d6a920c45651edd68e7fffd0", - "30-edk2-ovmf-ia32-sb-enrolled.json": "8ce4600fd84968adca9d037df9531d34ce455ad566d4691d256d370acc86120d", - "31-edk2-ovmf-2m-raw-x64-sb-enrolled.json": "e0237cf4909d129324953bd854caf79136065402a30d363f13e594fd0e493bcf", - "40-edk2-ovmf-4m-qcow2-x64-sb.json": "52ad30099a600dc9d03d60557a94e8c5459cd72124445109287ebf6971b879a1", - "40-edk2-ovmf-ia32-sb.json": "de562405d0f9a9400eb58239e10753455216196dface2631858bcf1a3c886ac7", - "41-edk2-ovmf-2m-raw-x64-sb.json": "c9c505b6308af28f29c16b4108f7f295408f975a47c94fb7aef523cb2a999d8e", - "50-edk2-aarch64-qcow2.json": "a62d1c8b3801a33d670863fd4824252f65b93b64af8e5fd8908e6e09d8d5db99", - "50-edk2-arm-verbose.json": "8805fce3e313705b7b43be6f2601776871c35bac0914fa05c34d09c929044253", - "50-edk2-loongarch64.json": "733d208b45c1d15cb96273f9eb405adb91876d64306c6ad791351f6861b85053", - "50-edk2-ovmf-4m-qcow2-x64-nosb.json": "a97c1339a837d106ccb25132a68cdeaf13f2b7cff3d4c7411ce4457e75b68278", - "50-edk2-ovmf-ia32-nosb.json": "b360162bd55df3b1cb4bfa8d0b7c2b46a7c7b492aabf6d0d57c3dbf3d8c7fd10", - "50-edk2-ovmf-x64-microvm.json": "5136200cd26eff9387259b1ca0f352b64298283f990277ac7a1b7a94d87baa27", - "50-edk2-riscv-qcow2.json": "b91747d4c9e46b656105cf0b5e061df6f30f8db452c39bac1ae6e91bc3f90da1", - "51-edk2-aarch64-raw.json": "7523b4dc263748fc8bee26e763aa94463222a8d2e8b738fdbde0d2b263ad562d", - "51-edk2-ovmf-2m-raw-x64-nosb.json": "59aec29aa157bb0f7e5242ff0de9932367d5314d9ce8159b97360b6d44da58f2", - "52-edk2-aarch64-verbose-qcow2.json": "132627485055270421667399465b06e954f85b8e6f14b2efa1d31aac1b83a6cb", - "53-edk2-aarch64-verbose-raw.json": "a03962c06b66b33d55ee8d62273dabe625f1525fd1a7769af2dc07e7889b2163", - "60-edk2-ovmf-x64-amdsev.json": "3ea01de7839cae41880cded64f964ed8d9b44e179527627aca6b24d6f8ead113", - "60-edk2-ovmf-x64-inteltdx.json": "43bb034df6a8c4dfd69b5b7350850a8884873ab09e8d27f18657ecfe0727c65b", - "DBXUpdate-20230509.ia32.bin": "b073eb71894e933e22d935cf45bf8319543819998522785d967f51fd87c85f85", - "DBXUpdate-20230509.x64.bin": "3e56c3d9e5b12edbd9e4006413d87fba099de1eba33d2bea566e742166cb366a", - "README.experimental": "71ce0b179d0e1325723cc444e45f7eeb67cce4cc1b336f3c5f586de16a6a78fd", - "edk2-3e722403cd16.tar.xz": "7ec671f04a183fb0e7f70bba008e8f66e60b44e1709b7bacd293ddb9196f4456", - "edk2-build.fedora": "0c8ed554f434a4b392620cec4e47af5b2ec5288542337216be849b5f7ac93329", - "edk2-build.fedora.platforms": "a4c1c1b34917b451a7f2386bfc053a980e62316b2bbdece1e024d2633d2356c7", - "edk2-build.py": "b4be60833465d372662ac4f1f89f40b9c65d59fb17f7716059f980503069ddb7", - "edk2-build.rhel-9": "477723037cadf03fa15756de563995cc556ccf84d9a4ba059ea37c97c3a0e3e7", - "edk2-platforms-a912d9fcf7d1.tar.xz": "dc2c8a0eb131ccba28f52c83d14617cae049ddd466f98a8cd229215051b9754a", - "hvloader-286f1c642ed624af2c7840fbca7923497891fe68.tar.gz": "4e0a15cfab98a89a0a93f747df876ea3ee5366c3ffbd158c28e296bf52c7dfba", - "hvloader-target.txt": "fcf4f427d3b80e67296be2a1d17ec124d65f673d4f6ea37d238f8d3fc1ddc4b8", - "jansson-2.13.1.tar.bz2": "ee90a0f879d2b7b7159124ff22b937a2a9a8c36d3bb65d1da7dd3f04370a10bd", - "openssl-rhel-db0287935122edceb91dcda8dfb53b4090734e22.tar.xz": "9fcc5b49513d6ae21c7ddc3d1bbb1f8973cfbe76f2392d10106a8cd435e3eb47", - "ovmf-whitepaper-c770f8c.txt": "842518adadaa837914dbb13a6628002fb7f7acca107c6d6f41815b399dc9f8b8", - "softfloat-20180726-gitb64af41.tar.xz": "c7f2172357ca3022621b9464fd92bf2b462256bda3e019bf9a669fa6b5aeea91" - } -} diff --git a/SPECS/edk2/edk2.spec b/SPECS/edk2/edk2.spec deleted file mode 100644 index 2673e02176..0000000000 --- a/SPECS/edk2/edk2.spec +++ /dev/null @@ -1,1269 +0,0 @@ -%bcond_without experimental -%bcond_with arm - -Vendor: Intel Corporation -Distribution: Edge Microvisor Toolkit -## START: Set by rpmautospec -## (rpmautospec version 0.3.5) -## RPMAUTOSPEC: autorelease, autochangelog -%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: - release_number = 31; - base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); - print(release_number + base_release_number - 1); -}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} -## END: Set by rpmautospec - -# https://fedoraproject.org/wiki/Changes/SetBuildFlagsBuildCheck -# breaks cross-building -%undefine _auto_set_build_flags - -# actual firmware builds support cross-compiling. edk2-tools -# in theory should build everywhere without much trouble, but -# in practice the edk2 build system barfs on archs it doesn't know -# (such as ppc), so lets limit things to the known-good ones. -# -# Can't build aarch64 due to a dependency on "nasm", which doesn't -# officially support the ARM64 architecture. See here: -# https://github.com/netwide-assembler/nasm/pull/3 -ExclusiveArch: x86_64 - -# edk2-stable202402 -%define GITDATE 20240524 -%define GITCOMMIT 3e722403cd16 -%define TOOLCHAIN GCC - -%define PLATFORMS_COMMIT a912d9fcf7d1 - -%define OPENSSL_VER 3.0.7 -%define OPENSSL_COMMIT db0287935122edceb91dcda8dfb53b4090734e22 - -%define DBXDATE 20230509 - -%define HVLOADER_VER 1.0.1 -%define HVLOADER_COMMIT 286f1c642ed624af2c7840fbca7923497891fe68 - -%define build_ovmf 1 -%define build_aarch64 0 -%define build_riscv64 0 - -# Undefine this to get *HUGE* (50MB+) verbose build logs -%define silent --silent - -%global softfloat_version 20180726-gitb64af41 -%define disable_werror 1 - - -Name: edk2 -Version: %{GITDATE}git%{GITCOMMIT} -Release: 10%{?dist} -Summary: UEFI firmware for 64-bit virtual machines -License: Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-3-Clause AND BSD-4-Clause AND ISC AND MIT AND LicenseRef-Fedora-Public-Domain -URL: https://www.tianocore.org - -# The source tarball is created using following commands: -# COMMIT=bb1bba3d7767 -# git archive --format=tar --prefix=edk2-$COMMIT/ $COMMIT \ -# | xz -9ev >/tmp/edk2-$COMMIT.tar.xz -Source0: https://src.fedoraproject.org/repo/pkgs/edk2/edk2-%{GITCOMMIT}.tar.xz/sha512/58550636ea26810a0184423765db24e43319a0cc5e38dfd5fbd7f09b5f6e1c2d2b9e1e33112a3b721e05c7f088dbfd8a2ddd4a73d833c3019a16101ef1d0342a/edk2-%{GITCOMMIT}.tar.xz -Source1: ovmf-whitepaper-c770f8c.txt -Source2: openssl-rhel-%{OPENSSL_COMMIT}.tar.xz -Source3: softfloat-%{softfloat_version}.tar.xz -Source4: edk2-platforms-%{PLATFORMS_COMMIT}.tar.xz -Source5: jansson-2.13.1.tar.bz2 -Source6: README.experimental -Source7: hvloader-%{HVLOADER_COMMIT}.tar.gz -Source8: hvloader-target.txt - -# json description files -Source10: 50-edk2-aarch64-qcow2.json -Source11: 51-edk2-aarch64-raw.json -Source12: 52-edk2-aarch64-verbose-qcow2.json -Source13: 53-edk2-aarch64-verbose-raw.json - -Source20: 50-edk2-arm-verbose.json - -Source30: 30-edk2-ovmf-ia32-sb-enrolled.json -Source31: 40-edk2-ovmf-ia32-sb.json -Source32: 50-edk2-ovmf-ia32-nosb.json - -Source40: 30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json -Source41: 31-edk2-ovmf-2m-raw-x64-sb-enrolled.json -Source42: 40-edk2-ovmf-4m-qcow2-x64-sb.json -Source43: 41-edk2-ovmf-2m-raw-x64-sb.json -Source44: 50-edk2-ovmf-x64-microvm.json -Source45: 50-edk2-ovmf-4m-qcow2-x64-nosb.json -Source46: 51-edk2-ovmf-2m-raw-x64-nosb.json -Source47: 60-edk2-ovmf-x64-amdsev.json -Source48: 60-edk2-ovmf-x64-inteltdx.json -Source50: 50-edk2-riscv-qcow2.json - -Source60: 50-edk2-loongarch64.json - -# https://gitlab.com/kraxel/edk2-build-config -Source80: edk2-build.py -Source81: edk2-build.fedora -Source82: edk2-build.fedora.platforms -Source83: edk2-build.rhel-9 - -Source90: DBXUpdate-%{DBXDATE}.x64.bin -Source91: DBXUpdate-%{DBXDATE}.ia32.bin - -Patch0001: 0001-BaseTools-do-not-build-BrotliCompress-RH-only.patch -Patch0002: 0002-MdeModulePkg-remove-package-private-Brotli-include-p.patch -Patch0003: 0003-MdeModulePkg-TerminalDxe-set-xterm-resolution-on-mod.patch -Patch0004: 0004-OvmfPkg-take-PcdResizeXterm-from-the-QEMU-command-li.patch -Patch0005: 0005-ArmVirtPkg-take-PcdResizeXterm-from-the-QEMU-command.patch -Patch0006: 0006-OvmfPkg-enable-DEBUG_VERBOSE-RHEL-only.patch -Patch0007: 0007-OvmfPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuVide.patch -Patch0008: 0008-ArmVirtPkg-silence-DEBUG_VERBOSE-0x00400000-in-QemuR.patch -Patch0009: 0009-OvmfPkg-QemuRamfbDxe-Do-not-report-DXE-failure-on-Aa.patch -Patch0010: 0010-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch -Patch0011: 0011-OvmfPkg-QemuKernelLoaderFsDxe-suppress-error-on-no-k.patch -Patch0012: 0012-SecurityPkg-Tcg2Dxe-suppress-error-on-no-swtpm-in-si.patch -Patch0013: 0013-UefiCpuPkg-MpInitLib-fix-apic-mode-for-cpu-hotplug.patch -Patch0014: 0014-CryptoPkg-CrtLib-add-stat.h.patch -Patch0015: 0015-CryptoPkg-CrtLib-add-access-open-read-write-close-sy.patch -Patch0016: 0016-OvmfPkg-set-PcdVariableStoreSize-PcdMaxVolatileVaria.patch -%if (0%{?fedora} >= 38 || 0%{?rhel} >= 10) && !0%{?emt} -Patch0017: 0017-silence-.-has-a-LOAD-segment-with-RWX-permissions-wa.patch -%endif -Patch0018: 0018-NetworkPkg-TcpDxe-Fixed-system-stuck-on-PXE-boot-flo.patch -Patch0019: 0019-NetworkPkg-DxeNetLib-adjust-PseudoRandom-error-loggi.patch -Patch0020: CVE-2024-38796.patch - -# Patches for the vendored OpenSSL are in the range from 1000 to 1999 (inclusive). -Patch1000: CVE-2022-3996.patch -Patch1001: CVE-2024-6119.patch -Patch1002: CVE-2024-4741.patch -Patch1003: CVE-2024-13176.patch -Patch1004: CVE-2024-2511.patch -Patch1005: CVE-2024-4603.patch -Patch1006: CVE-2025-3770.patch - -# python3-devel and libuuid-devel are required for building tools. -# python3-devel is also needed for varstore template generation and -# verification with "ovmf-vars-generator". -BuildRequires: python3-devel -BuildRequires: libuuid-devel -BuildRequires: iasl -BuildRequires: binutils gcc git gcc-c++ make -BuildRequires: qemu-img - -# openssl configure -BuildRequires: perl(FindBin) -BuildRequires: perl(IPC::Cmd) -BuildRequires: perl(File::Compare) -BuildRequires: perl(File::Copy) -BuildRequires: perl(JSON) -BuildRequires: perl(lib) - -%if %{build_ovmf} -# Only OVMF includes 80x86 assembly files (*.nasm*). -BuildRequires: nasm - -# Only OVMF includes the Secure Boot feature, for which we need to separate out -# the UEFI shell. -BuildRequires: dosfstools -BuildRequires: mtools -BuildRequires: xorriso - -# For mkisofs. -BuildRequires: cdrkit - -# For generating the variable store template with the default certificates -# enrolled. -BuildRequires: python3-virt-firmware >= 24.2 -BuildRequires: python3-pefile - -# endif build_ovmf -%endif - - -%package ovmf -Summary: UEFI firmware for x86_64 virtual machines -BuildArch: noarch -Provides: OVMF = %{version}-%{release} -Obsoletes: OVMF < 20180508-100.gitee3198e672e2.el7 - -# need libvirt version with qcow2 support -Conflicts: libvirt-daemon-driver-qemu < 9.7.0 - -# OVMF includes the Secure Boot and IPv6 features; it has a builtin OpenSSL -# library. -Provides: bundled(openssl) = %{OPENSSL_VER} -License: Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain - -# URL taken from the Maintainers.txt file. -URL: http://www.tianocore.org/ovmf/ - -%description ovmf -OVMF (Open Virtual Machine Firmware) is a project to enable UEFI support for -Virtual Machines. This package contains a sample 64-bit UEFI firmware for QEMU -and KVM. - - -%package aarch64 -Summary: UEFI firmware for aarch64 virtual machines -BuildArch: noarch -Provides: AAVMF = %{version}-%{release} -Obsoletes: AAVMF < 20180508-100.gitee3198e672e2.el7 - -# need libvirt version with qcow2 support -Conflicts: libvirt-daemon-driver-qemu < 9.7.0 - -# No Secure Boot for AAVMF yet, but we include OpenSSL for the IPv6 stack. -Provides: bundled(openssl) = %{OPENSSL_VER} -License: Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain - -# URL taken from the Maintainers.txt file. -URL: https://github.com/tianocore/tianocore.github.io/wiki/ArmVirtPkg - -%description aarch64 -AAVMF (ARM Architecture Virtual Machine Firmware) is an EFI Development Kit II -platform that enables UEFI support for QEMU/KVM ARM Virtual Machines. This -package contains a 64-bit build. - - -%package tools -Summary: EFI Development Kit II Tools -License: BSD-2-Clause-Patent AND LicenseRef-Fedora-Public-Domain -URL: https://github.com/tianocore/tianocore.github.io/wiki/BaseTools -%description tools -This package provides tools that are needed to -build EFI executables and ROMs using the GNU tools. - -%package tools-doc -Summary: Documentation for EFI Development Kit II Tools -BuildArch: noarch -License: BSD-2-Clause-Patent -URL: https://github.com/tianocore/tianocore.github.io/wiki/BaseTools -%description tools-doc -This package documents the tools that are needed to -build EFI executables and ROMs using the GNU tools. - -%description -EDK II is a modern, feature-rich, cross-platform firmware development -environment for the UEFI and PI specifications. This package contains sample -64-bit UEFI firmware builds for QEMU and KVM. - - -%package ovmf-ia32 -Summary: Open Virtual Machine Firmware -License: Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain -Provides: bundled(openssl) -BuildArch: noarch -%description ovmf-ia32 -EFI Development Kit II -Open Virtual Machine Firmware (ia32) - -%package ovmf-xen -Summary: Open Virtual Machine Firmware, Xen build -License: Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain -Provides: bundled(openssl) -BuildArch: noarch -%description ovmf-xen -EFI Development Kit II -Open Virtual Machine Firmware (Xen build) - -%if %{with experimental} -%package experimental -Summary: Open Virtual Machine Firmware, experimental builds -License: Apache-2.0 AND BSD-2-Clause-Patent AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain -Provides: bundled(openssl) -Obsoletes: edk2-ovmf-experimental < 20230825 -BuildArch: noarch -%description experimental -EFI Development Kit II -Open Virtual Machine Firmware (experimental builds) -%endif - -%if %{with arm} -%package arm -Summary: ARM Virtual Machine Firmware -BuildArch: noarch -License: Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND BSD-3-Clause AND BSD-4-Clause AND ISC AND LicenseRef-Fedora-Public-Domain -%description arm -EFI Development Kit II -ARMv7 UEFI Firmware -%endif - -%if %{build_riscv64} -%package riscv64 -Summary: RISC-V Virtual Machine Firmware -BuildArch: noarch -License: Apache-2.0 AND (BSD-2-Clause OR GPL-2.0-or-later) AND BSD-2-Clause-Patent AND LicenseRef-Fedora-Public-Domain - -# need libvirt version with qcow2 support -Conflicts: libvirt-daemon-driver-qemu < 9.7.0 - -%description riscv64 -EFI Development Kit II -RISC-V UEFI Firmware -%endif - -%package ext4 -Summary: Ext4 filesystem driver -License: Apache-2.0 AND BSD-2-Clause-Patent -BuildArch: noarch -%description ext4 -EFI Development Kit II -Ext4 filesystem driver - -%package tools-python -Summary: EFI Development Kit II Tools -Requires: python3 -BuildArch: noarch - -%description tools-python -This package provides tools that are needed to build EFI executables -and ROMs using the GNU tools. You do not need to install this package; -you probably want to install edk2-tools only. - -%package hvloader -Summary: Loader binary for loading type 1 hypervisors under Linux. -Requires: python3 - -%description hvloader -HvLoader.efi is an EFI application for loading an external hypervisor loader. - -HvLoader.efi loads a given hypervisor loader binary (DLL, EFI, etc.), and -calls it's entry point passing HvLoader.efi ImageHandle. This way the -hypervisor loader binary has access to HvLoader.efi's command line options, -and use those as configuration parameters. The first HvLoader.efi command line -option is the path to hypervisor loader binary. - - -%prep -# We needs some special git config options that %%autosetup won't give us. -# We init the git dir ourselves, then tell %%autosetup not to blow it away. -%setup -q -n edk2-%{GITCOMMIT} -git init -q -git config core.whitespace cr-at-eol -git config am.keepcr true -# -T is passed to %%setup to not re-extract the archive -# -D is passed to %%setup to not delete the existing archive dir -%autosetup -T -D -n edk2-%{GITCOMMIT} -S git_am -N -# -M Apply patches up to 999 -%autopatch -M 999 - -# Unpack the vendored OpenSSL tarball. This tarball has a '.git' directory -# which will confuse the git repo we unpack it into, so exclude that. -# Then add it to the git index so that we can use autopatch, which -# uses git am since we set it up that way initially. -# Only apply patches between 1000 and 1999 (inclusive). -tar -C CryptoPkg/Library/OpensslLib -a -f %{SOURCE2} -x --exclude '.git' -git add . -git commit -m 'add vendored openssl' -%autopatch -p1 -m 1000 -M 1999 - -cp -a -- %{SOURCE1} . - -# extract softfloat into place -tar -xf %{SOURCE3} --strip-components=1 --directory ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/ -tar -xf %{SOURCE4} --strip-components=1 --wildcards "*/Drivers" "*/Features" "*/Platform" "*/Silicon" -mkdir -p RedfishPkg/Library/JsonLib/jansson -tar -xf %{SOURCE5} --strip-components=1 --directory RedfishPkg/Library/JsonLib/jansson - -# include paths pointing to unused submodules -mkdir -p MdePkg/Library/MipiSysTLib/mipisyst/library/include -mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/include -mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/include/mbedtls -mkdir -p CryptoPkg/Library/MbedTlsLib/mbedtls/library -mkdir -p SecurityPkg/DeviceSecurity/SpdmLib/libspdm/include - -# Done by %setup, but we do not use it for the auxiliary tarballs -chmod -Rf a+rX,u+w,g-w,o-w . - -cp -a -- \ - %{SOURCE6} \ - %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} \ - %{SOURCE20} \ - %{SOURCE30} %{SOURCE31} %{SOURCE32} \ - %{SOURCE40} %{SOURCE41} %{SOURCE42} %{SOURCE43} %{SOURCE44} \ - %{SOURCE45} %{SOURCE46} %{SOURCE47} %{SOURCE48} \ - %{SOURCE50} \ - %{SOURCE60} \ - %{SOURCE80} %{SOURCE81} %{SOURCE82} %{SOURCE83} \ - %{SOURCE90} %{SOURCE91} \ - . - -# extract hvloader source into place -tar -xf %{SOURCE7} --directory MdeModulePkg/Application -sed -i '/MdeModulePkg\/Application\/HelloWorld\/HelloWorld.inf/a \ \ MdeModulePkg\/Application\/HvLoader-%{HVLOADER_VER}/HvLoader.inf' MdeModulePkg/MdeModulePkg.dsc - -%build - -chmod +x ./edk2-build.py - -build_iso() { - dir="$1" - UEFI_SHELL_BINARY=${dir}/Shell.efi - ENROLLER_BINARY=${dir}/EnrollDefaultKeys.efi - UEFI_SHELL_IMAGE=uefi_shell.img - ISO_IMAGE=${dir}/UefiShell.iso - - UEFI_SHELL_BINARY_BNAME=$(basename -- "$UEFI_SHELL_BINARY") - UEFI_SHELL_SIZE=$(stat --format=%s -- "$UEFI_SHELL_BINARY") - ENROLLER_SIZE=$(stat --format=%s -- "$ENROLLER_BINARY") - - # add 1MB then 10% for metadata - UEFI_SHELL_IMAGE_KB=$(( - (UEFI_SHELL_SIZE + ENROLLER_SIZE + 1 * 1024 * 1024) * 11 / 10 / 1024 - )) - - # create non-partitioned FAT image - rm -f -- "$UEFI_SHELL_IMAGE" - mkdosfs -C "$UEFI_SHELL_IMAGE" -n UEFI_SHELL -- "$UEFI_SHELL_IMAGE_KB" - - # copy the shell binary into the FAT image - export MTOOLS_SKIP_CHECK=1 - mmd -i "$UEFI_SHELL_IMAGE" ::efi - mmd -i "$UEFI_SHELL_IMAGE" ::efi/boot - mcopy -i "$UEFI_SHELL_IMAGE" "$UEFI_SHELL_BINARY" ::efi/boot/bootx64.efi - mcopy -i "$UEFI_SHELL_IMAGE" "$ENROLLER_BINARY" :: - mdir -i "$UEFI_SHELL_IMAGE" -/ :: - - # build ISO with FAT image file as El Torito EFI boot image - mkisofs -input-charset ASCII -J -rational-rock \ - -e "$UEFI_SHELL_IMAGE" -no-emul-boot \ - -o "$ISO_IMAGE" "$UEFI_SHELL_IMAGE" -} - -export EXTRA_OPTFLAGS="%{optflags}" -export EXTRA_LDFLAGS="%{__global_ldflags}" -export RELEASE_DATE="$(echo %{GITDATE} | sed -e 's|\(....\)\(..\)\(..\)|\2/\3/\1|')" - -touch OvmfPkg/AmdSev/Grub/grub.efi # dummy -python3 CryptoPkg/Library/OpensslLib/configure.py - -%if %{build_ovmf} -./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m ovmf -./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m x64 -virt-fw-vars --input Fedora/ovmf/OVMF_VARS.fd \ - --output Fedora/ovmf/OVMF_VARS.secboot.fd \ - --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ - --enroll-redhat --secure-boot -virt-fw-vars --input Fedora/ovmf/OVMF_VARS_4M.fd \ - --output Fedora/ovmf/OVMF_VARS_4M.secboot.fd \ - --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ - --enroll-redhat --secure-boot -virt-fw-vars --input Fedora/ovmf/OVMF.inteltdx.fd \ - --output Fedora/ovmf/OVMF.inteltdx.secboot.fd \ - --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ - --enroll-redhat --secure-boot -virt-fw-vars --input Fedora/ovmf-ia32/OVMF_VARS.fd \ - --output Fedora/ovmf-ia32/OVMF_VARS.secboot.fd \ - --set-dbx DBXUpdate-%{DBXDATE}.ia32.bin \ - --enroll-redhat --secure-boot -build_iso Fedora/ovmf -build_iso Fedora/ovmf-ia32 -cp DBXUpdate-%{DBXDATE}.x64.bin Fedora/ovmf -cp DBXUpdate-%{DBXDATE}.ia32.bin Fedora/ovmf-ia32 - -for raw in */ovmf/*_4M*.fd; do - qcow2="${raw%.fd}.qcow2" - qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2" - rm -f "$raw" -done - -# experimental stateless builds -virt-fw-vars --input Fedora/experimental/OVMF.stateless.fd \ - --output Fedora/experimental/OVMF.stateless.secboot.fd \ - --set-dbx DBXUpdate-%{DBXDATE}.x64.bin \ - --enroll-redhat --secure-boot \ - --set-fallback-no-reboot - -for image in \ - Fedora/ovmf/OVMF_CODE.secboot.fd \ - Fedora/ovmf/OVMF_CODE_4M.secboot.qcow2 \ - Fedora/experimental/OVMF.stateless.secboot.fd \ -; do - pcr="${image}" - pcr="${pcr%.fd}" - pcr="${pcr%.qcow2}" - pcr="${pcr}.pcr" - python3 /usr/share/doc/python3-virt-firmware/experimental/measure.py \ - --image "$image" \ - --version "%{name}-%{version}-%{release}" \ - --no-shim \ - --bank sha256 --bank sha384 \ - > "$pcr" -done -%endif - -%if %{build_aarch64} -./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m armvirt -./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m aa64 -virt-fw-vars --input Fedora/aarch64/vars-template-pflash.raw \ - --output Fedora/experimental/vars-template-secboot-testonly-pflash.raw \ - --enroll-redhat --secure-boot --distro-keys rhel -for raw in */aarch64/*.raw; do - qcow2="${raw%.raw}.qcow2" - qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2" -done -%endif - -%if %{build_riscv64} -./edk2-build.py --config edk2-build.fedora %{?silent} --release-date "$RELEASE_DATE" -m riscv -./edk2-build.py --config edk2-build.fedora.platforms %{?silent} -m riscv -for raw in */riscv/*.raw; do - qcow2="${raw%.raw}.qcow2" - qemu-img convert -f raw -O qcow2 -o cluster_size=4096 -S 4096 "$raw" "$qcow2" - rm -f "$raw" -done -%endif - -source ./edksetup.sh -make -C BaseTools -cp %{SOURCE8} Conf/target.txt -build -p MdeModulePkg/MdeModulePkg.dsc -m MdeModulePkg/Application/HvLoader-%{HVLOADER_VER}/HvLoader.inf - -%install - -cp -a OvmfPkg/License.txt License.OvmfPkg.txt -cp -a CryptoPkg/Library/OpensslLib/openssl/LICENSE.txt LICENSE.openssl -mkdir -p %{buildroot}%{_datadir}/qemu/firmware - -# install the tools -mkdir -p %{buildroot}%{_bindir} \ - %{buildroot}%{_datadir}/%{name}/Conf \ - %{buildroot}%{_datadir}/%{name}/Scripts -install BaseTools/Source/C/bin/* \ - %{buildroot}%{_bindir} -install BaseTools/BinWrappers/PosixLike/LzmaF86Compress \ - %{buildroot}%{_bindir} -install BaseTools/BuildEnv \ - %{buildroot}%{_datadir}/%{name} -install BaseTools/Conf/*.template \ - %{buildroot}%{_datadir}/%{name}/Conf -install BaseTools/Scripts/GccBase.lds \ - %{buildroot}%{_datadir}/%{name}/Scripts - -# install firmware images -mkdir -p %{buildroot}%{_datadir}/%{name} -cp -av Fedora/* %{buildroot}%{_datadir}/%{name} -%if !%{with experimental} -rm -rf %{buildroot}%{_datadir}/%{name}/experimental -%endif - -%if %{build_ovmf} -# compat symlinks -mkdir -p %{buildroot}%{_datadir}/OVMF -ln -s ../%{name}/ovmf/OVMF_CODE.fd %{buildroot}%{_datadir}/OVMF/ -ln -s ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}%{_datadir}/OVMF/ -ln -s ../%{name}/ovmf/OVMF_VARS.fd %{buildroot}%{_datadir}/OVMF/ -ln -s ../%{name}/ovmf/OVMF_VARS.secboot.fd %{buildroot}%{_datadir}/OVMF/ -ln -s ../%{name}/ovmf/UefiShell.iso %{buildroot}%{_datadir}/OVMF/ -ln -s OVMF_CODE.fd %{buildroot}%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd - -# json description files -mkdir -p %{buildroot}%{_datadir}/qemu/firmware -install -m 0644 \ - 30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json \ - 31-edk2-ovmf-2m-raw-x64-sb-enrolled.json \ - 40-edk2-ovmf-4m-qcow2-x64-sb.json \ - 41-edk2-ovmf-2m-raw-x64-sb.json \ - 50-edk2-ovmf-4m-qcow2-x64-nosb.json \ - 51-edk2-ovmf-2m-raw-x64-nosb.json \ - 60-edk2-ovmf-x64-amdsev.json \ - 60-edk2-ovmf-x64-inteltdx.json \ - %{buildroot}%{_datadir}/qemu/firmware -install -m 0644 \ - 50-edk2-ovmf-x64-microvm.json \ - 30-edk2-ovmf-ia32-sb-enrolled.json \ - 40-edk2-ovmf-ia32-sb.json \ - 50-edk2-ovmf-ia32-nosb.json \ - %{buildroot}%{_datadir}/qemu/firmware -# endif build_ovmf -%endif - -%if %{build_aarch64} -# compat symlinks -mkdir -p %{buildroot}%{_datadir}/AAVMF -ln -s ../%{name}/aarch64/QEMU_EFI-pflash.raw \ - %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd -ln -s ../%{name}/aarch64/QEMU_EFI-silent-pflash.raw \ - %{buildroot}%{_datadir}/AAVMF/AAVMF_CODE.fd -ln -s ../%{name}/aarch64/vars-template-pflash.raw \ - %{buildroot}%{_datadir}/AAVMF/AAVMF_VARS.fd -ln -s ../%{name}/arm/QEMU_EFI-pflash.raw \ - %{buildroot}%{_datadir}/AAVMF/AAVMF32_CODE.fd - -# json description files -install -m 0644 \ - 50-edk2-aarch64-qcow2.json \ - 51-edk2-aarch64-raw.json \ - 52-edk2-aarch64-verbose-qcow2.json \ - 53-edk2-aarch64-verbose-raw.json \ - %{buildroot}%{_datadir}/qemu/firmware -install -m 0644 \ - 50-edk2-arm-verbose.json \ - %{buildroot}%{_datadir}/qemu/firmware -# endif build_aarch64 -%endif - -# edk2-tools-python install -cp -R BaseTools/Source/Python %{buildroot}%{_datadir}/%{name}/Python -for i in build BPDG Ecc GenDepex GenFds GenPatchPcdTable PatchPcdValue TargetTool Trim UPT; do -echo '#!/bin/sh -export PYTHONPATH=%{_datadir}/%{name}/Python -exec python3 '%{_datadir}/%{name}/Python/$i/$i.py' "$@"' > %{buildroot}%{_bindir}/$i - chmod +x %{buildroot}%{_bindir}/$i -done - -%if 0%{?py_byte_compile:1} -# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#manual-bytecompilation -%py_byte_compile %{python3} %{buildroot}%{_datadir}/edk2/Python -%endif - -mkdir -p %{buildroot}/boot/efi -cp ./Build/MdeModule/RELEASE_GCC5/X64/MdeModulePkg/Application/HvLoader-%{HVLOADER_VER}/HvLoader/OUTPUT/HvLoader.efi %{buildroot}/boot/efi - -%check -for file in %{buildroot}%{_datadir}/%{name}/*/*VARS.secboot.fd; do - test -f "$file" || continue - virt-fw-vars --input $file --print | grep "SecureBootEnable.*ON" || exit 1 -done - -%global common_files \ - %%license License.txt License.OvmfPkg.txt License-History.txt LICENSE.openssl \ - %%dir %%{_datadir}/%%{name}/ \ - %%dir %%{_datadir}/qemu \ - %%dir %%{_datadir}/qemu/firmware - -%if %{build_ovmf} -%files ovmf -%common_files -%doc OvmfPkg/README -%doc ovmf-whitepaper-c770f8c.txt -%dir %{_datadir}/OVMF/ -%{_datadir}/OVMF/OVMF_CODE.fd -%{_datadir}/OVMF/OVMF_CODE.secboot.fd -%{_datadir}/OVMF/OVMF_VARS.fd -%{_datadir}/OVMF/OVMF_VARS.secboot.fd -%{_datadir}/OVMF/UefiShell.iso -%dir %{_datadir}/%{name}/ovmf/ -%{_datadir}/%{name}/ovmf/OVMF_CODE.fd -%{_datadir}/%{name}/ovmf/OVMF_CODE.cc.fd -%{_datadir}/%{name}/ovmf/OVMF_CODE.secboot.fd -%{_datadir}/%{name}/ovmf/OVMF_VARS.fd -%{_datadir}/%{name}/ovmf/OVMF_VARS.secboot.fd -%{_datadir}/%{name}/ovmf/OVMF.amdsev.fd -%{_datadir}/%{name}/ovmf/OVMF.inteltdx.fd -%{_datadir}/%{name}/ovmf/OVMF.inteltdx.secboot.fd -%{_datadir}/%{name}/ovmf/UefiShell.iso -%{_datadir}/%{name}/ovmf/Shell.efi -%{_datadir}/%{name}/ovmf/EnrollDefaultKeys.efi -%{_datadir}/%{name}/ovmf/DBXUpdate*.bin -%{_datadir}/qemu/firmware/30-edk2-ovmf-4m-qcow2-x64-sb-enrolled.json -%{_datadir}/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json -%{_datadir}/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json -%{_datadir}/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json -%{_datadir}/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json -%{_datadir}/qemu/firmware/51-edk2-ovmf-2m-raw-x64-nosb.json -%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-amdsev.json -%{_datadir}/qemu/firmware/60-edk2-ovmf-x64-inteltdx.json -%{_datadir}/%{name}/ovmf/MICROVM.fd -%{_datadir}/qemu/firmware/50-edk2-ovmf-x64-microvm.json -%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.qcow2 -%{_datadir}/%{name}/ovmf/OVMF_CODE_4M.secboot.qcow2 -%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.qcow2 -%{_datadir}/%{name}/ovmf/OVMF_VARS_4M.secboot.qcow2 -%{_datadir}/%{name}/ovmf/*.pcr -# endif build_ovmf -%endif - -%if %{build_aarch64} -%files aarch64 -%common_files -%dir %{_datadir}/AAVMF/ -%{_datadir}/AAVMF/AAVMF_CODE.verbose.fd -%{_datadir}/AAVMF/AAVMF_CODE.fd -%{_datadir}/AAVMF/AAVMF_VARS.fd -%dir %{_datadir}/%{name}/aarch64/ -%{_datadir}/%{name}/aarch64/QEMU_EFI-pflash.* -%{_datadir}/%{name}/aarch64/QEMU_EFI-silent-pflash.* -%{_datadir}/%{name}/aarch64/vars-template-pflash.* -%{_datadir}/%{name}/aarch64/QEMU_EFI.fd -%{_datadir}/%{name}/aarch64/QEMU_EFI.silent.fd -%{_datadir}/%{name}/aarch64/QEMU_VARS.fd -%{_datadir}/%{name}/aarch64/BL32_AP_MM.fd -%{_datadir}/%{name}/aarch64/QEMU_EFI.kernel.fd -%{_datadir}/qemu/firmware/50-edk2-aarch64-qcow2.json -%{_datadir}/qemu/firmware/51-edk2-aarch64-raw.json -%{_datadir}/qemu/firmware/52-edk2-aarch64-verbose-qcow2.json -%{_datadir}/qemu/firmware/53-edk2-aarch64-verbose-raw.json -# endif build_aarch64 -%endif - -%files tools -%license License.txt -%license License-History.txt -%{_bindir}/DevicePath -%{_bindir}/EfiRom -%{_bindir}/GenCrc32 -%{_bindir}/GenFfs -%{_bindir}/GenFv -%{_bindir}/GenFw -%{_bindir}/GenSec -%{_bindir}/LzmaCompress -%{_bindir}/LzmaF86Compress -%{_bindir}/TianoCompress -%{_bindir}/VfrCompile -%{_bindir}/VolInfo -%dir %{_datadir}/%{name} -%{_datadir}/%{name}/BuildEnv -%{_datadir}/%{name}/Conf -%{_datadir}/%{name}/Scripts - -%files tools-doc -%doc BaseTools/UserManuals/*.rtf - - -%if %{build_ovmf} -%files ovmf-ia32 -%common_files -%dir %{_datadir}/%{name}/ovmf-ia32 -%{_datadir}/%{name}/ovmf-ia32/EnrollDefaultKeys.efi -%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.fd -%{_datadir}/%{name}/ovmf-ia32/OVMF_CODE.secboot.fd -%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.fd -%{_datadir}/%{name}/ovmf-ia32/OVMF_VARS.secboot.fd -%{_datadir}/%{name}/ovmf-ia32/Shell.efi -%{_datadir}/%{name}/ovmf-ia32/UefiShell.iso -%{_datadir}/%{name}/ovmf-ia32/DBXUpdate*.bin -%{_datadir}/qemu/firmware/30-edk2-ovmf-ia32-sb-enrolled.json -%{_datadir}/qemu/firmware/40-edk2-ovmf-ia32-sb.json -%{_datadir}/qemu/firmware/50-edk2-ovmf-ia32-nosb.json - -%if %{with experimental} -%files experimental -%common_files -%doc README.experimental -%dir %{_datadir}/%{name}/experimental -%{_datadir}/%{name}/experimental/*.fd -%if %{build_aarch64} -%{_datadir}/%{name}/experimental/*.raw -%endif -%{_datadir}/%{name}/experimental/*.pcr -%endif - -%files ovmf-xen -%common_files -%dir %{_datadir}/%{name}/xen -%{_datadir}/%{name}/xen/*.fd -%endif - -%if %{with arm} -%files arm -%common_files -%dir %{_datadir}/AAVMF/ -%{_datadir}/AAVMF/AAVMF32_CODE.fd -%dir %{_datadir}/%{name}/arm -%{_datadir}/%{name}/arm/QEMU_EFI-pflash.raw -%{_datadir}/%{name}/arm/QEMU_EFI.fd -%{_datadir}/%{name}/arm/QEMU_VARS.fd -%{_datadir}/%{name}/arm/vars-template-pflash.raw -%{_datadir}/qemu/firmware/50-edk2-arm-verbose.json -%endif - -%if %{build_riscv64} -%files riscv64 -%common_files -%{_datadir}/%{name}/riscv/*.fd -%{_datadir}/%{name}/riscv/*.qcow2 -%{_datadir}/qemu/firmware/50-edk2-riscv-qcow2.json -%endif - -%files ext4 -%common_files -%dir %{_datadir}/%{name}/drivers -%{_datadir}/%{name}/drivers/ext4*.efi - - -%files tools-python -%{_bindir}/build -%{_bindir}/BPDG -%{_bindir}/Ecc -%{_bindir}/GenDepex -%{_bindir}/GenFds -%{_bindir}/GenPatchPcdTable -%{_bindir}/PatchPcdValue -%{_bindir}/TargetTool -%{_bindir}/Trim -%{_bindir}/UPT -%dir %{_datadir}/%{name} -%{_datadir}/%{name}/Python - -%files hvloader -%license MdeModulePkg/Application/HvLoader-%{HVLOADER_VER}/LICENSE -/boot/efi/HvLoader.efi - -%changelog -* Fri Oct 3 2025 Lee Chee Yang - 20240524git3e722403cd16-10 -- merge from Azure Linux 3.0.20250910-3.0 -- Patch for CVE-2025-3770 - -* Tue Sep 30 2025 Andy - 20240524git3e722403cd16-9 -- Bump version for release - -* Thu Apr 24 2025 Jyoti Kanase - 20240524git3e722403cd16-8 -- Fix CVE-2024-38796 - -* Wed Apr 23 2025 Archana Choudhary - 20240524git3e722403cd16-7 -- Add patch for CVE-2024-2511, CVE-2024-4603 - -* Mon Apr 14 2025 Tobias Brick - 20240524git3e722403cd16-6 -- Patch CVE-2024-13176. -- Rename patch for CVE-2024-4741 to standard name format. - -* Tue Mar 25 2025 Tobias Brick - 20240524git3e722403cd16-5 -- Patch vendored openssl to only free read buffers if not in use. - -* Wed Sep 25 2024 Cameron Baird - 20240524git3e722403cd16-4 -- Package license for edk2-hvloader - -* Thu Sep 19 2024 Minghe Ren - 20240524git3e722403cd16-3 -- Add patch for CVE-2024-6119 - -* Wed Aug 21 2024 Cameron Baird - 20240524git3e722403cd16-2 -- Introduce edk2-hvloader subpackage - -* Tue Jul 30 2024 Betty Lakes - 20240524git3e722403cd16-1 -- Upgrade to 20240524git3e722403cd16 to fix CVE-2023-45236, CVE-2023-45237 - -* Tue Jul 9 2024 Suresh Thelkar - 20240223gitedc6681206c1-2 -- Patch CVE-2022-3996 in bundled OpenSSL - -* Fri Mar 8 2024 Elaine Zhao - 20240223gitedc6681206c1-1 -- Bump version to edk2-stable202402 - -* Wed Dec 13 2023 Andrew Phelps - 20230301gitf80f052277c8-38 -- Apply patch to vendored source - -* Tue Oct 17 2023 Francisco Huelsz Prince - 20230301gitf80f052277c8-37 -- Patch CVE-2023-0465 and CVE-2023-2650 in bundled OpenSSL. - -* Fri Oct 13 2023 Sindhu Karri - 20230301gitf80f052277c8-36 -- Patch CVE-2023-3817 in bundled OpenSSL - -* Tue Sep 26 2023 Pawel Winogrodzki - 20230301gitf80f052277c8-35 -- Removing 'exit' calls from the '%%check' section. - -* Wed Jun 21 2023 Vince Perri - 20230301gitf80f052277c8-34 -- Add nvram-template mapping to ovmf x64 config. - -* Tue Jun 6 2023 Daniel McIlvaney - 20230301gitf80f052277c8-33 -- Patch CVE-2023-0464 in bundled OpenSSL. - -* Fri May 26 2023 Vince Perri - 20230301gitf80f052277c8-32 -- License verified. -- Disable aarch64 and riscv64 builds. -- Disable ovmf-experimental and arm subpackages due to build error. -- Pass _smp_mflags to edk-build.py commands for parallel builds. -- Disable cross-compilation. -- Add --wildcards to fix tar command. -- Initial CBL-Mariner import from Fedora 39 (license: MIT). - -* Wed May 17 2023 Gerd Hoffmann - 20230301gitf80f052277c8-31 -- drop /ovmf-4m/, move 4M builds to /ovmf/ instead - -* Wed May 17 2023 Gerd Hoffmann - 20230301gitf80f052277c8-30 -- update build script - -* Tue May 16 2023 Gerd Hoffmann - 20230301gitf80f052277c8-29 -- json descriptors: explicitly set mode = split - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-28 -- switch DBXDATE to 20230509 - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-27 -- add 20230509 dbx update files - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-26 -- add json descriptor files for qcow2 images - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-25 -- drop ovmf 4m raw images - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-24 -- add ovmf 4m qcow2 images - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-23 -- require python3-virt-firmware v23.5 - -* Fri May 12 2023 Gerd Hoffmann - 20230301gitf80f052277c8-22 -- update NestedInterruptTplLib patches - -* Fri May 05 2023 Gerd Hoffmann - 20230301gitf80f052277c8-21 -- drop ASSERT from NestedInterruptTplLib (rhbz#2183336). - -* Thu Apr 27 2023 Gerd Hoffmann - 20230301gitf80f052277c8-4 -- fix tpm detection. - -* Thu Apr 13 2023 Gerd Hoffmann - 20230301gitf80f052277c8-2 -- add StandaloneMM and ArmVirtQemuKernel builds. -- add json files for qcow2 images. -- update dbx files to 2023-03. - -* Mon Mar 06 2023 Gerd Hoffmann - 20230301gitf80f052277c8-1 -- update to edk2-stable202302 -- update dbx database to 20220812 -- add riscv64 sub-rpm - -* Fri Feb 17 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-14 -- add sub-package with xen build (resolves: rhbz#2170730) - -* Sat Feb 11 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-13 -- update openssl (CVE-2023-0286, CVE-2023-0215, CVE-2022-4450, CVE-2022-4304). - -* Wed Feb 08 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-12 -- cherry-pick aarch64 bugfixes. -- set firmware build release date. -- add ext4 sub-package. - -* Thu Jan 19 2023 Fedora Release Engineering - 20221117gitfff6d81270b5-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Fri Jan 06 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-10 -- add experimental builds with strict nx checking. - -* Mon Jan 02 2023 Gerd Hoffmann - 20221117gitfff6d81270b5-9 -- revert 'make files sparse again' (resolves: rhbz#2155673). -- pick up compiler + linker flags from rpm - -* Tue Dec 20 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-8 -- make files sparse again - -* Thu Dec 15 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-7 -- backport https://github.com/tianocore/edk2/pull/3770 - -* Mon Dec 12 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-6 -- fix ovmf platform config (revert broken commit). -- show version information in smbios (backport). - -* Mon Dec 05 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-5 -- rename *.json files to be more consistent. -- build script update - -* Fri Dec 02 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-4 -- apply dbx updates - -* Tue Nov 29 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-3 -- fix build script - -* Mon Nov 28 2022 Gerd Hoffmann - 20221117gitfff6d81270b5-2 -- add workaround for broken grub - -* Tue Sep 20 2022 Gerd Hoffmann - 20220826gitba0e0e4c6a17-1 -- update edk2 to 2022-08 stable tag. -- update openssl bundle to rhel-8.7 level. -- add stdvga fix. -- add 4MB firmware builds. - -* Thu Aug 18 2022 Gerd Hoffmann - 20220526git16779ede2d36-5 -- comment out patch #4 (bug 2116534 workaround) -- comment out patch #12 (bug 2114858 workaround) - -* Thu Jul 21 2022 Fedora Release Engineering - 20220526git16779ede2d36-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Jun 10 2022 Gerd Hoffmann - 20220526git16779ede2d36-3 -- swap stack fix patch. - -* Wed Jun 08 2022 Gerd Hoffmann - 20220526git16779ede2d36-2 -- fix PcdResizeXterm patch. -- minor specfile cleanup. -- add 0021-OvmfPkg-Sec-fix-stack-switch.patch -- Resolves rhbz#2093745 - -* Tue May 31 2022 Gerd Hoffmann - 20220526git16779ede2d36-1 -- update to new edk2 stable tag (2022-05), refresh patches. -- add amdsev and inteltdx builds -- drop qosb - -* Tue Apr 19 2022 Gerd Hoffmann - 20220221gitb24306f15daa-4 -- switch to virt-firmware for secure boot key enrollment -- Stop builds on armv7 too (iasl missing). - -* Thu Apr 07 2022 Gerd Hoffmann - 20220221gitb24306f15daa-3 -- Fix TPM build options. -- Stop builds on i686 (iasl missing). -- Resolves rhbz#2072827 - -* Wed Mar 23 2022 Gerd Hoffmann - 20220221gitb24306f15daa-1 -- Update to edk2-stable202202 - -* Thu Jan 20 2022 Fedora Release Engineering - 20211126gitbb1bba3d7767-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Dec 6 2021 Gerd Hoffmann - 20211126gitbb1bba3d7767-1 -- Update to edk2-stable202111 -- Resolves rhbz#1978966 -- Resolves rhbz#2026744 - -* Mon Dec 6 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-5 -- Drop glibc strcmp workaround - -* Mon Nov 29 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-4 -- Drop customized splash screen boot logo -- Temporary workaround for suspected glibc strcmp bug breaking builds in koji - -* Wed Sep 1 2021 Daniel P. Berrangé - 20210527gite1999b264f1f-3 -- Fix qemu packaging conditionals for ELN builds - -* Wed Jul 21 2021 Fedora Release Engineering - 20210527gite1999b264f1f-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Tue Jul 20 2021 Cole Robinson - 20210527gite1999b264f1f-1 -- Update to git snapshot -- Sync with c9s packaging - -* Mon Jun 14 2021 Jiri Kucera - 20200801stable-5 -- Replace genisoimage with xorriso - -* Tue Jan 26 2021 Fedora Release Engineering - 20200801stable-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Thu Dec 03 2020 Cole Robinson - 20200801stable-3 -- Really fix TPM breakage (bz 1897367) - -* Tue Nov 24 2020 Cole Robinson - 20200801stable-2 -- Fix openssl usage, unbreak TPM (bz 1897367) - -* Wed Sep 16 2020 Cole Robinson - 20200801stable-1 -- Update to edk2 stable 202008 - -* Sat Sep 12 2020 Peter Robinson - 20200201stable-6 -- Tweaks for aarch64/ARMv7 builds -- Minor cleanups - -* Tue Aug 04 2020 Cole Robinson - 20200201stable-5 -- Fix build failures on rawhide - -* Sat Aug 01 2020 Fedora Release Engineering - 20200201stable-4 -- Second attempt - Rebuilt for - https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 27 2020 Fedora Release Engineering - 20200201stable-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 13 2020 Tom Stellard - 20200201stable-2 -- Use make macros -- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro - -* Mon Apr 13 2020 Cole Robinson - 20200201stable-1 -- Update to stable-202002 - -* Tue Jan 28 2020 Fedora Release Engineering - 20190501stable-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Sep 06 2019 Patrick Uiterwijk - 20190501stable-4 -- Updated HTTP_BOOT option to new upstream value - -* Wed Jul 24 2019 Fedora Release Engineering - 20190501stable-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Mon Jul 15 2019 Cole Robinson - 20190501stable-2 -- License is now BSD-2-Clause-Patent -- Re-enable secureboot enrollment -- Use qemu-ovmf-secureboot from git - -* Thu Jul 11 2019 Cole Robinson - 20190501stable-1 -- Update to stable-201905 -- Update to openssl-1.1.1b -- Ship VARS file for ovmf-ia32 (bug 1688596) -- Ship Fedora-variant JSON "firmware descriptor files" -- Resolves rhbz#1728652 - -* Mon Mar 18 2019 Cole Robinson - 20190308stable-1 -- Use YYYYMMDD versioning to fix upgrade path - -* Fri Mar 15 2019 Cole Robinson - 201903stable-1 -- Update to stable-201903 -- Update to openssl-1.1.0j -- Move to python3 deps - -* Thu Jan 31 2019 Fedora Release Engineering - 20180815gitcb5f4f45ce-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Nov 14 2018 Patrick Uiterwijk - 20180815gitcb5f4f45ce-5 -- Add -qosb dependency on python3 - -* Fri Nov 9 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-4 -- Fix network boot via grub (bz 1648476) - -* Wed Sep 12 2018 Paolo Bonzini - 20180815gitcb5f4f45ce-3 -- Explicitly compile the scripts using py_byte_compile - -* Fri Aug 31 2018 Cole Robinson - 20180815gitcb5f4f45ce-2 -- Fix passing through RPM build flags (bz 1540244) - -* Tue Aug 21 2018 Cole Robinson - 20180815gitcb5f4f45ce-1 -- Update to edk2 git cb5f4f45ce, edk2-stable201808 -- Update to qemu-ovmf-secureboot-1.1.3 -- Enable TPM2 support - -* Mon Jul 23 2018 Paolo Bonzini - 20180529gitee3198e672e2-5 -- Fixes for AMD SEV on OVMF_CODE.fd -- Add Provides for bundled OpenSSL - -* Wed Jul 18 2018 Paolo Bonzini - 20180529gitee3198e672e2-4 -- Enable IPv6 - -* Thu Jul 12 2018 Fedora Release Engineering - 20180529gitee3198e672e2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Jun 20 2018 Paolo Bonzini - 20180529gitee3198e672e2-2 -- Backport two bug fixes from RHEL: connect again virtio-rng devices, and - connect consoles unconditionally in OVMF (ARM firmware already did it) - -* Tue May 29 2018 Paolo Bonzini - 20180529gitee3198e672e2-1 -- Rebase to ee3198e672e2 - -* Tue May 01 2018 Cole Robinson - 20171011git92d07e4-7 -- Bump release for new build - -* Fri Mar 30 2018 Patrick Uiterwijk - 20171011git92d07e4-6 -- Add qemu-ovmf-secureboot (qosb) -- Generate pre-enrolled Secure Boot OVMF VARS files - -* Wed Mar 07 2018 Paolo Bonzini - 20171011git92d07e4-5 -- Fix GCC 8 compilation -- Replace dosfstools and mtools with qemu-img vvfat - -* Wed Feb 07 2018 Fedora Release Engineering - 20171011git92d07e4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Fri Jan 19 2018 Paolo Bonzini - 20170209git296153c5-3 -- Add OpenSSL patches from Fedora -- Enable TLS_MODE - -* Fri Nov 17 2017 Paolo Bonzini - 20170209git296153c5-2 -- Backport patches 19-21 from RHEL -- Add patches 22-24 to fix SEV slowness -- Add fedora conditionals - -* Tue Nov 14 2017 Paolo Bonzini - 20171011git92d07e4-1 -- Import source and patches from RHEL version -- Update OpenSSL to 1.1.0e -- Refresh 0099-Tweak-the-tools_def-to-support-cross-compiling.patch - -* Mon Nov 13 2017 Paolo Bonzini - 20170209git296153c5-6 -- Allow non-cross builds -- Install /usr/share/OVMF and /usr/share/AAVMF - -* Wed Aug 02 2017 Fedora Release Engineering - 20170209git296153c5-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 20170209git296153c5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Mar 15 2017 Cole Robinson - 20170209git296153c5-3 -- Ship ovmf-ia32 package (bz 1424722) - -* Thu Feb 16 2017 Cole Robinson - 20170209git296153c5-2 -- Update EnrollDefaultKeys patch (bz #1398743) - -* Mon Feb 13 2017 Paolo Bonzini - 20170209git296153c5-1 -- Rebase to git master -- New patch 0010 fixes failure to build from source. - -* Fri Feb 10 2017 Fedora Release Engineering - 20161105git3b25ca8-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Sun Nov 06 2016 Cole Robinson - 20161105git3b25ca8-1 -- Rebase to git master - -* Fri Sep 9 2016 Tom Callaway - 20160418gita8c39ba-5 -- replace legally problematic openssl source with "hobbled" tarball - -* Thu Jul 21 2016 Gerd Hoffmann - 20160418gita8c39ba-4 -- Also build for armv7. - -* Tue Jul 19 2016 Gerd Hoffmann 20160418gita8c39ba-3 -- Update EnrollDefaultKeys patch. - -* Fri Jul 8 2016 Paolo Bonzini - 20160418gita8c39ba-2 -- Distribute edk2-ovmf on aarch64 - -* Sat May 21 2016 Cole Robinson - 20160418gita8c39ba-1 -- Distribute edk2-aarch64 on x86 (bz #1338027) - -* Mon Apr 18 2016 Gerd Hoffmann 20160418gita8c39ba-0 -- Update to latest git. -- Add firmware builds (FatPkg is free now). - -* Mon Feb 15 2016 Cole Robinson 20151127svn18975-3 -- Fix FTBFS gcc warning (bz 1307439) - -* Wed Feb 03 2016 Fedora Release Engineering - 20151127svn18975-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Nov 27 2015 Paolo Bonzini - 20151127svn18975-1 -- Rebase to 20151127svn18975-1 -- Linker script renamed to GccBase.lds - -* Wed Jun 17 2015 Fedora Release Engineering - 20150519svn17469-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue May 19 2015 Paolo Bonzini - 20150519svn17469-1 -- Rebase to 20150519svn17469-1 -- edk2-remove-tree-check.patch now upstream - -* Sat May 02 2015 Kalev Lember - 20140724svn2670-6 -- Rebuilt for GCC 5 C++11 ABI change - -* Sat Aug 16 2014 Fedora Release Engineering - 20140724svn2670-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Thu Jul 24 2014 Paolo Bonzini - 20140724svn2670-1 -- Rebase to 20140724svn2670-1 - -* Tue Jun 24 2014 Paolo Bonzini - 20140624svn2649-1 -- Use standalone .tar.xz from buildtools repo - -* Tue Jun 24 2014 Paolo Bonzini - 20140328svn15376-4 -- Install BuildTools/BaseEnv - -* Mon Jun 23 2014 Paolo Bonzini - 20140328svn15376-3 -- Rebase to get GCC48 configuration -- Package EDK_TOOLS_PATH as /usr/share/edk2 -- Package "build" and LzmaF86Compress too, as well as the new - tools Ecc and TianoCompress. - -* Sat Jun 07 2014 Fedora Release Engineering - 20131114svn14844-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Thu Nov 14 2013 Paolo Bonzini - 20131114svn14844-1 -- Upgrade to r14844. -- Remove upstreamed parts of patch 1. - -* Fri Nov 8 2013 Paolo Bonzini - 20130515svn14365-7 -- Make BaseTools compile on ARM. - -* Fri Aug 30 2013 Paolo Bonzini - 20130515svn14365-6 -- Revert previous change; firmware packages should be noarch, and building - BaseTools twice is simply wrong. - -* Mon Aug 19 2013 Kay Sievers - 20130515svn14365-5 -- Add sub-package with EFI shell - -* Sat Aug 03 2013 Fedora Release Engineering - 20130515svn14365-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Thu May 23 2013 Dan Horák 20130515svn14365-3 -- set ExclusiveArch - -* Thu May 16 2013 Paolo Bonzini 20130515svn14365-2 -- Fix edk2-tools-python Requires - -* Wed May 15 2013 Paolo Bonzini 20130515svn14365-1 -- Split edk2-tools-doc and edk2-tools-python -- Fix Python BuildRequires -- Remove FatBinPkg at package creation time. -- Use fully versioned dependency. -- Add comment on how to generate the sources. - -* Thu May 2 2013 Paolo Bonzini 20130502.g732d199-1 -- Create. diff --git a/SPECS/edk2/hvloader-target.txt b/SPECS/edk2/hvloader-target.txt deleted file mode 100644 index ebb9673410..0000000000 --- a/SPECS/edk2/hvloader-target.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2023, Microsoft Corporation. All rights reserved. -# -# SPDX-License-Identifier: MIT -# -# -# ALL Paths are Relative to WORKSPACE - -# Separate multiple LIST entries with a SINGLE SPACE character, do not use comma characters. -# Un-set an option by either commenting out the line, or not setting a value. - -# -# PROPERTY Type Use Description -# ---------------- -------- -------- ----------------------------------------------------------- -# ACTIVE_PLATFORM Filename Recommended Specify the WORKSPACE relative Path and Filename -# of the platform description file that will be used for the -# build. This line is required if and only if the current -# working directory does not contain one or more description -# files. -ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc - -# TARGET List Optional Zero or more of the following: DEBUG, RELEASE, NOOPT -# UserDefined; separated by a space character. -# If the line is missing or no value is specified, all -# valid targets specified in the platform description file -# will attempt to be built. The following line will build -# DEBUG platform target. -TARGET = RELEASE - -# TARGET_ARCH List Optional What kind of architecture is the binary being target for. -# One, or more, of the following, IA32, IPF, X64, EBC, ARM -# or AArch64. -# Multiple values can be specified on a single line, using -# space characters to separate the values. These are used -# during the parsing of a platform description file, -# restricting the build output target(s.) -# The Build Target ARCH is determined by (precedence high to low): -# Command-line: -a ARCH option -# target.txt: TARGET_ARCH values -# DSC file: [Defines] SUPPORTED_ARCHITECTURES tag -# If not specified, then all valid architectures specified -# in the platform file, for which tools are available, will be -# built. -TARGET_ARCH = X64 - -# TOOL_DEFINITION_FILE Filename Optional Specify the name of the filename to use for specifying -# the tools to use for the build. If not specified, -# WORKSPACE/Conf/tools_def.txt will be used for the build. -TOOL_CHAIN_CONF = Conf/tools_def.txt - -# TAGNAME List Optional Specify the name(s) of the tools_def.txt TagName to use. -# If not specified, all applicable TagName tools will be -# used for the build. The list uses space character separation. -TOOL_CHAIN_TAG = GCC5 - -# MAX_CONCURRENT_THREAD_NUMBER NUMBER Optional The number of concurrent threads. If not specified or set -# to zero, tool automatically detect number of processor -# threads. Recommend to set this value to one less than the -# number of your computer cores or CPUs. When value set to 1, -# means disable multi-thread build, value set to more than 1, -# means user specify the thread number to build. Not specify -# the default value in this file. -# MAX_CONCURRENT_THREAD_NUMBER = 1 - - -# BUILD_RULE_CONF Filename Optional Specify the file name to use for the build rules that are followed -# when generating Makefiles. If not specified, the file: -# WORKSPACE/Conf/build_rule.txt will be used -BUILD_RULE_CONF = Conf/build_rule.txt \ No newline at end of file diff --git a/SPECS/edk2/make-tarball.sh b/SPECS/edk2/make-tarball.sh deleted file mode 100755 index 702031020c..0000000000 --- a/SPECS/edk2/make-tarball.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# args -repo="${1%/}" -ref="${2-HEAD}" -ab="${3-12}" - -# check -if test ! -d "${repo}/.git"; then - echo "usage: $0 [ [ ] ]" - exit 1 -fi - -# get + print info -commit=$(cd $repo; git show --abbrev=$ab --pretty='format:%h' $ref | head -1) -date=$(cd $repo; git show --pretty='format:%cs' $ref | head -1 | tr -d '-') -echo "# $repo $ref -> commit $commit - date $date" - -# create tarball -name="${repo##*/}" -file="${name}-${commit}.tar.xz" -(cd $repo; git archive --format=tar --prefix=${name}-${commit}/ ${commit}) \ - | xz -9ev > "$file" -echo "# $file written" diff --git a/SPECS/edk2/ovmf-whitepaper-c770f8c.txt b/SPECS/edk2/ovmf-whitepaper-c770f8c.txt deleted file mode 100644 index ba727b4918..0000000000 --- a/SPECS/edk2/ovmf-whitepaper-c770f8c.txt +++ /dev/null @@ -1,2422 +0,0 @@ -Open Virtual Machine Firmware (OVMF) Status Report -July 2014 (with updates in August 2014 - January 2015) - -Author: Laszlo Ersek -Copyright (C) 2014-2015, Red Hat, Inc. -CC BY-SA 4.0 - -Abstract --------- - -The Unified Extensible Firmware Interface (UEFI) is a specification that -defines a software interface between an operating system and platform firmware. -UEFI is designed to replace the Basic Input/Output System (BIOS) firmware -interface. - -Hardware platform vendors have been increasingly adopting the UEFI -Specification to govern their boot firmware developments. OVMF (Open Virtual -Machine Firmware), a sub-project of Intel's EFI Development Kit II (edk2), -enables UEFI support for Ia32 and X64 Virtual Machines. - -This paper reports on the status of the OVMF project, treats features and -limitations, gives end-user hints, and examines some areas in-depth. - -Keywords: ACPI, boot options, CSM, edk2, firmware, flash, fw_cfg, KVM, memory -map, non-volatile variables, OVMF, PCD, QEMU, reset vector, S3, Secure Boot, -Smbios, SMM, TianoCore, UEFI, VBE shim, Virtio - -Table of Contents ------------------ - -- Motivation -- Scope -- Example qemu invocation -- Installation of OVMF guests with virt-manager and virt-install -- Supported guest operating systems -- Compatibility Support Module (CSM) -- Phases of the boot process -- Project structure -- Platform Configuration Database (PCD) -- Firmware image structure -- S3 (suspend to RAM and resume) -- A comprehensive memory map of OVMF -- Known Secure Boot limitations -- Variable store and LockBox in SMRAM -- Select features - - X64-specific reset vector for OVMF - - Client library for QEMU's firmware configuration interface - - Guest ACPI tables - - Guest SMBIOS tables - - Platform-specific boot policy - - Virtio drivers - - Platform Driver - - Video driver -- Afterword - -Motivation ----------- - -OVMF extends the usual benefits of virtualization to UEFI. Reasons to use OVMF -include: - -- Legacy-free guests. A UEFI-based environment eliminates dependencies on - legacy address spaces and devices. This is especially beneficial when used - with physically assigned devices where the legacy operating mode is - troublesome to support, ex. assigned graphics cards operating in legacy-free, - non-VGA mode in the guest. - -- Future proof guests. The x86 market is steadily moving towards a legacy-free - platform and guest operating systems may eventually require a UEFI - environment. OVMF provides that next generation firmware support for such - applications. - -- GUID partition tables (GPTs). MBR partition tables represent partition - offsets and sizes with 32-bit integers, in units of 512 byte sectors. This - limits the addressable portion of the disk to 2 TB. GPT represents logical - block addresses with 64 bits. - -- Liberating boot loader binaries from residing in contested and poorly defined - space between the partition table and the partitions. - -- Support for booting off disks (eg. pass-through physical SCSI devices) with a - 4kB physical and logical sector size, i.e. which don't have 512-byte block - emulation. - -- Development and testing of Secure Boot-related features in guest operating - systems. Although OVMF's Secure Boot implementation is currently not secure - against malicious UEFI drivers, UEFI applications, and guest kernels, - trusted guest code that only uses standard UEFI interfaces will find a valid - Secure Boot environment under OVMF, with working key enrollment and signature - validation. This enables development and testing of portable, Secure - Boot-related guest code. - -- Presence of non-volatile UEFI variables. This furthers development and - testing of OS installers, UEFI boot loaders, and unique, dependent guest OS - features. For example, an efivars-backed pstore (persistent storage) - file system works under Linux. - -- Altogether, a near production-level UEFI environment for virtual machines - when Secure Boot is not required. - -Scope ------ - -UEFI and especially Secure Boot have been topics fraught with controversy and -political activism. This paper sidesteps these aspects and strives to focus on -use cases, hands-on information for end users, and technical details. - -Unless stated otherwise, the expression "X supports Y" means "X is technically -compatible with interfaces provided or required by Y". It does not imply -support as an activity performed by natural persons or companies. - -We discuss the status of OVMF at a state no earlier than edk2 SVN revision -16158. The paper concentrates on upstream projects and communities, but -occasionally it pans out about OVMF as it is planned to be shipped (as -Technical Preview) in Red Hat Enterprise Linux 7.1. Such digressions are marked -with the [RHEL] margin notation. - -Although other VMMs and accelerators are known to support (or plan to support) -OVMF to various degrees -- for example, VirtualBox, Xen, BHyVe --, we'll -emphasize OVMF on qemu/KVM, because QEMU and KVM have always been Red Hat's -focus wrt. OVMF. - -The recommended upstream QEMU version is 2.1+. The recommended host Linux -kernel (KVM) version is 3.10+. The recommended QEMU machine type is -"qemu-system-x86_64 -M pc-i440fx-2.1" or later. - -The term "TianoCore" is used interchangeably with "edk2" in this paper. - -Example qemu invocation ------------------------ - -The following commands give a quick foretaste of installing a UEFI operating -system on OVMF, relying only on upstream edk2 and qemu. - -- Clone and build OVMF: - - git clone https://github.com/tianocore/edk2.git - cd edk2 - nice OvmfPkg/build.sh -a X64 -n $(getconf _NPROCESSORS_ONLN) - - (Note that this ad-hoc build will not include the Secure Boot feature.) - -- The build output file, "OVMF.fd", includes not only the executable firmware - code, but the non-volatile variable store as well. For this reason, make a - VM-specific copy of the build output (the variable store should be private to - the virtual machine): - - cp Build/OvmfX64/DEBUG_GCC4?/FV/OVMF.fd fedora.flash - - (The variable store and the firmware executable are also available in the - build output as separate files: "OVMF_VARS.fd" and "OVMF_CODE.fd". This - enables central management and updates of the firmware executable, while each - virtual machine can retain its own variable store.) - -- Download a Fedora LiveCD: - - wget https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Xfce-x86_64-20-1.iso - -- Create a virtual disk (qcow2 format, 20 GB in size): - - qemu-img create -f qcow2 fedora.img 20G - -- Create the following qemu wrapper script under the name "fedora.sh": - - # Basic virtual machine properties: a recent i440fx machine type, KVM - # acceleration, 2048 MB RAM, two VCPUs. - OPTS="-M pc-i440fx-2.1 -enable-kvm -m 2048 -smp 2" - - # The OVMF binary, including the non-volatile variable store, appears as a - # "normal" qemu drive on the host side, and it is exposed to the guest as a - # persistent flash device. - OPTS="$OPTS -drive if=pflash,format=raw,file=fedora.flash" - - # The hard disk is exposed to the guest as a virtio-block device. OVMF has a - # driver stack that supports such a disk. We specify this disk as first boot - # option. OVMF recognizes the boot order specification. - OPTS="$OPTS -drive id=disk0,if=none,format=qcow2,file=fedora.img" - OPTS="$OPTS -device virtio-blk-pci,drive=disk0,bootindex=0" - - # The Fedora installer disk appears as an IDE CD-ROM in the guest. This is - # the 2nd boot option. - OPTS="$OPTS -drive id=cd0,if=none,format=raw,readonly" - OPTS="$OPTS,file=Fedora-Live-Xfce-x86_64-20-1.iso" - OPTS="$OPTS -device ide-cd,bus=ide.1,drive=cd0,bootindex=1" - - # The following setting enables S3 (suspend to RAM). OVMF supports S3 - # suspend/resume. - OPTS="$OPTS -global PIIX4_PM.disable_s3=0" - - # OVMF emits a number of info / debug messages to the QEMU debug console, at - # ioport 0x402. We configure qemu so that the debug console is indeed - # available at that ioport. We redirect the host side of the debug console to - # a file. - OPTS="$OPTS -global isa-debugcon.iobase=0x402 -debugcon file:fedora.ovmf.log" - - # QEMU accepts various commands and queries from the user on the monitor - # interface. Connect the monitor with the qemu process's standard input and - # output. - OPTS="$OPTS -monitor stdio" - - # A USB tablet device in the guest allows for accurate pointer tracking - # between the host and the guest. - OPTS="$OPTS -device piix3-usb-uhci -device usb-tablet" - - # Provide the guest with a virtual network card (virtio-net). - # - # Normally, qemu provides the guest with a UEFI-conformant network driver - # from the iPXE project, in the form of a PCI expansion ROM. For this test, - # we disable the expansion ROM and allow OVMF's built-in virtio-net driver to - # take effect. - # - # On the host side, we use the SLIRP ("user") network backend, which has - # relatively low performance, but it doesn't require extra privileges from - # the user executing qemu. - OPTS="$OPTS -netdev id=net0,type=user" - OPTS="$OPTS -device virtio-net-pci,netdev=net0,romfile=" - - # A Spice QXL GPU is recommended as the primary VGA-compatible display - # device. It is a full-featured virtual video card, with great operating - # system driver support. OVMF supports it too. - OPTS="$OPTS -device qxl-vga" - - qemu-system-x86_64 $OPTS - -- Start the Fedora guest: - - sh fedora.sh - -- The above command can be used for both installation and later boots of the - Fedora guest. - -- In order to verify basic OVMF network connectivity: - - - Assuming that the non-privileged user running qemu belongs to group G - (where G is a numeric identifier), ensure as root on the host that the - group range in file "/proc/sys/net/ipv4/ping_group_range" includes G. - - - As the non-privileged user, boot the guest as usual. - - - On the TianoCore splash screen, press ESC. - - - Navigate to Boot Manager | EFI Internal Shell - - - In the UEFI Shell, issue the following commands: - - ifconfig -s eth0 dhcp - ping A.B.C.D - - where A.B.C.D is a public IPv4 address in dotted decimal notation that your - host can reach. - - - Type "quit" at the (qemu) monitor prompt. - -Installation of OVMF guests with virt-manager and virt-install --------------------------------------------------------------- - -(1) Assuming OVMF has been installed on the host with the following files: - - /usr/share/OVMF/OVMF_CODE.fd - - /usr/share/OVMF/OVMF_VARS.fd - - locate the "nvram" stanza in "/etc/libvirt/qemu.conf", and edit it as - follows: - - nvram = [ "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" ] - -(2) Restart libvirtd with your Linux distribution's service management tool; - for example, - - systemctl restart libvirtd - -(3) In virt-manager, proceed with the guest installation as usual: - - select File | New Virtual Machine, - - advance to Step 5 of 5, - - in Step 5, check "Customize configuration before install", - - click Finish; - - in the customization dialog, select Overview | Firmware, and choose UEFI, - - click Apply and Begin Installation. - -(4) With virt-install: - - LDR="loader=/usr/share/OVMF/OVMF_CODE.fd,loader_ro=yes,loader_type=pflash" - virt-install \ - --name fedora20 \ - --memory 2048 \ - --vcpus 2 \ - --os-variant fedora20 \ - --boot hd,cdrom,$LDR \ - --disk size=20 \ - --disk path=Fedora-Live-Xfce-x86_64-20-1.iso,device=cdrom,bus=scsi - -(5) A popular, distribution-independent, bleeding-edge OVMF package is - available under , courtesy of Gerd Hoffmann. - - The "edk2.git-ovmf-x64" package provides the following files, among others: - - /usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd - - /usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd - - When using this package, adapt steps (1) and (4) accordingly. - -(6) Additionally, the "edk2.git-ovmf-x64" package seeks to simplify the - enablement of Secure Boot in a virtual machine (strictly for development - and testing purposes). - - - Boot the virtual machine off the CD-ROM image called - "/usr/share/edk2.git/ovmf-x64/UefiShell.iso"; before or after installing - the main guest operating system. - - - When the UEFI shell appears, issue the following commands: - - EnrollDefaultKeys.efi - reset -s - - - The EnrollDefaultKeys.efi utility enrolls the following keys: - - - A static example X.509 certificate (CN=TestCommonName) as Platform Key - and first Key Exchange Key. - - The private key matching this certificate has been destroyed (but you - shouldn't trust this statement). - - - "Microsoft Corporation KEK CA 2011" as second Key Exchange Key - (SHA1: 31:59:0b:fd:89:c9:d7:4e:d0:87:df:ac:66:33:4b:39:31:25:4b:30). - - - "Microsoft Windows Production PCA 2011" as first DB entry - (SHA1: 58:0a:6f:4c:c4:e4:b6:69:b9:eb:dc:1b:2b:3e:08:7b:80:d0:67:8d). - - - "Microsoft Corporation UEFI CA 2011" as second DB entry - (SHA1: 46:de:f6:3b:5c:e6:1c:f8:ba:0d:e2:e6:63:9c:10:19:d0:ed:14:f3). - - These keys suffice to boot released versions of popular Linux - distributions (through the shim.efi utility), and Windows 8 and Windows - Server 2012 R2, in Secure Boot mode. - -Supported guest operating systems ---------------------------------- - -Upstream OVMF does not favor some guest operating systems over others for -political or ideological reasons. However, some operating systems are harder to -obtain and/or technically more difficult to support. The general expectation is -that recent UEFI OSes should just work. Please consult the "OvmfPkg/README" -file. - -The following guest OSes were tested with OVMF: -- Red Hat Enterprise Linux 6 -- Red Hat Enterprise Linux 7 -- Fedora 18 -- Fedora 19 -- Fedora 20 -- Windows Server 2008 R2 SP1 -- Windows Server 2012 -- Windows 8 - -Notes about Windows Server 2008 R2 (paraphrasing the "OvmfPkg/README" file): - -- QEMU should be started with one of the "-device qxl-vga" and "-device VGA" - options. - -- Only one video mode, 1024x768x32, is supported at OS runtime. - - Please refer to the section about QemuVideoDxe (OVMF's built-in video driver) - for more details on this limitation. - -- The qxl-vga video card is recommended ("-device qxl-vga"). After booting the - installed guest OS, select the video card in Device Manager, and upgrade the - video driver to the QXL XDDM one. - - The QXL XDDM driver can be downloaded from - , under Guest | Windows binaries. - - This driver enables additional graphics resolutions at OS runtime, and - provides S3 (suspend/resume) capability. - -Notes about Windows Server 2012 and Windows 8: - -- QEMU should be started with the "-device qxl-vga,revision=4" option (or a - later revision, if available). - -- The guest OS's builtin video driver inherits the video mode / frame buffer - from OVMF. There's no way to change the resolution at OS runtime. - - For this reason, a platform driver has been developed for OVMF, which allows - users to change the preferred video mode in the firmware. Please refer to the - section about PlatformDxe for details. - -- It is recommended to upgrade the guest OS's video driver to the QXL WDDM one, - via Device Manager. - - Binaries for the QXL WDDM driver can be found at - (pick a version greater than or - equal to 0.6), while the source code resides at - . - - This driver enables additional graphics resolutions at OS runtime, and - provides S3 (suspend/resume) capability. - -Compatibility Support Module (CSM) ----------------------------------- - -Collaboration between SeaBIOS and OVMF developers has enabled SeaBIOS to be -built as a Compatibility Support Module, and OVMF to embed and use it. - -Benefits of a SeaBIOS CSM include: - -- The ability to boot legacy (non-UEFI) operating systems, such as legacy Linux - systems, Windows 7, OpenBSD 5.2, FreeBSD 8/9, NetBSD, DragonflyBSD, Solaris - 10/11. - -- Legacy (non-UEFI-compliant) PCI expansion ROMs, such as a VGA BIOS, mapped by - QEMU in emulated devices' ROM BARs, are loaded and executed by OVMF. - - For example, this grants the Windows Server 2008 R2 SP1 guest's native, - legacy video driver access to all modes of all QEMU video cards. - -Building the CSM target of the SeaBIOS source tree is out of scope for this -report. Additionally, upstream OVMF does not enable the CSM by default. - -Interested users and developers should look for OVMF's "-D CSM_ENABLE" -build-time option, and check out the continuous -integration repository, which provides CSM-enabled OVMF builds. - -[RHEL] The "OVMF_CODE.fd" firmware image made available on the Red Hat - Enterprise Linux 7.1 host does not include a Compatibility Support - Module, for the following reasons: - - - Virtual machines running officially supported, legacy guest operating - systems should just use the standalone SeaBIOS firmware. Firmware - selection is flexible in virtualization, see eg. "Installation of OVMF - guests with virt-manager and virt-install" above. - - - The 16-bit thunking interface between OVMF and SeaBIOS is very complex - and presents a large debugging and support burden, based on past - experience. - - - Secure Boot is incompatible with CSM. - - - Inter-project dependencies should be minimized whenever possible. - - - Using the default QXL video card, the Windows 2008 R2 SP1 guest can be - installed with its built-in, legacy video driver. Said driver will - select the only available video mode, 1024x768x32. After installation, - the video driver can be upgraded to the full-featured QXL XDDM driver. - -Phases of the boot process --------------------------- - -The PI and UEFI specifications, and Intel's UEFI and EDK II Learning and -Development materials provide ample information on PI and UEFI concepts. The -following is an absolutely minimal, rough glossary that is included only to -help readers new to PI and UEFI understand references in later, OVMF-specific -sections. We defer heavily to the official specifications and the training -materials, and frequently quote them below. - -A central concept to mention early is the GUID -- globally unique identifier. A -GUID is a 128-bit number, written as XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, -where each X stands for a hexadecimal nibble. GUIDs are used to name everything -in PI and in UEFI. Programmers introduce new GUIDs with the "uuidgen" utility, -and standards bodies standardize well-known services by positing their GUIDs. - -The boot process is roughly divided in the following phases: - -- Reset vector code. - -- SEC: Security phase. This phase is the root of firmware integrity. - -- PEI: Pre-EFI Initialization. This phase performs "minimal processor, chipset - and platform configuration for the purpose of discovering memory". Modules in - PEI collectively save their findings about the platform in a list of HOBs - (hand-off blocks). - - When developing PEI code, the Platform Initialization (PI) specification - should be consulted. - -- DXE: Driver eXecution Environment, pronounced as "Dixie". This "is the phase - where the bulk of the booting occurs: devices are enumerated and initialized, - UEFI services are supported, and protocols and drivers are implemented. Also, - the tables that create the UEFI interface are produced". - - On the PEI/DXE boundary, the HOBs produced by PEI are consumed. For example, - this is how the memory space map is configured initially. - -- BDS: Boot Device Selection. It is "responsible for determining how and where - you want to boot the operating system". - - When developing DXE and BDS code, it is mainly the UEFI specification that - should be consulted. When speaking about DXE, BDS is frequently considered to - be a part of it. - -The following concepts are tied to specific boot process phases: - -- PEIM: a PEI Module (pronounced "PIM"). A binary module running in the PEI - phase, consuming some PPIs and producing other PPIs, and producing HOBs. - -- PPI: PEIM-to-PEIM interface. A structure of function pointers and related - data members that establishes a PEI service, or an instance of a PEI service. - PPIs are identified by GUID. - - An example is EFI_PEI_S3_RESUME2_PPI (6D582DBC-DB85-4514-8FCC-5ADF6227B147). - -- DXE driver: a binary module running in the DXE and BDS phases, consuming some - protocols and producing other protocols. - -- Protocol: A structure of function pointers and related data members that - establishes a DXE service, or an instance of a DXE service. Protocols are - identified by GUID. - - An example is EFI_BLOCK_IO_PROTOCOL (964E5B21-6459-11D2-8E39-00A0C969723B). - -- Architectural protocols: a set of standard protocols that are foundational to - the working of a UEFI system. Each architectural protocol has at most one - instance. Architectural protocols are implemented by a subset of DXE drivers. - DXE drivers explicitly list the set of protocols (including architectural - protocols) that they need to work. UEFI drivers can only be loaded once all - architectural protocols have become available during the DXE phase. - - An example is EFI_VARIABLE_WRITE_ARCH_PROTOCOL - (6441F818-6362-4E44-B570-7DBA31DD2453). - -Project structure ------------------ - -The term "OVMF" usually denotes the project (community and development effort) -that provide and maintain the subject matter UEFI firmware for virtual -machines. However the term is also frequently applied to the firmware binary -proper that a virtual machine executes. - -OVMF emerges as a compilation of several modules from the edk2 source -repository. "edk2" stands for EFI Development Kit II; it is a "modern, -feature-rich, cross-platform firmware development environment for the UEFI and -PI specifications". - -The composition of OVMF is dictated by the following build control files: - - OvmfPkg/OvmfPkgIa32.dsc - OvmfPkg/OvmfPkgIa32.fdf - - OvmfPkg/OvmfPkgIa32X64.dsc - OvmfPkg/OvmfPkgIa32X64.fdf - - OvmfPkg/OvmfPkgX64.dsc - OvmfPkg/OvmfPkgX64.fdf - -The format of these files is described in the edk2 DSC and FDF specifications. -Roughly, the DSC file determines: -- library instance resolutions for library class requirements presented by the - modules to be compiled, -- the set of modules to compile. - -The FDF file roughly determines: -- what binary modules (compilation output files, precompiled binaries, graphics - image files, verbatim binary sections) to include in the firmware image, -- how to lay out the firmware image. - -The Ia32 flavor of these files builds a firmware where both PEI and DXE phases -are 32-bit. The Ia32X64 flavor builds a firmware where the PEI phase consists -of 32-bit modules, and the DXE phase is 64-bit. The X64 flavor builds a purely -64-bit firmware. - -The word size of the DXE phase must match the word size of the runtime OS -- a -32-bit DXE can't cooperate with a 64-bit OS, and a 64-bit DXE can't work a -32-bit OS. - -OVMF pulls together modules from across the edk2 tree. For example: - -- common drivers and libraries that are platform independent are usually - located under MdeModulePkg and MdePkg, - -- common but hardware-specific drivers and libraries that match QEMU's - pc-i440fx-* machine type are pulled in from IntelFrameworkModulePkg, - PcAtChipsetPkg and UefiCpuPkg, - -- the platform independent UEFI Shell is built from ShellPkg, - -- OvmfPkg includes drivers and libraries that are useful for virtual machines - and may or may not be specific to QEMU's pc-i440fx-* machine type. - -Platform Configuration Database (PCD) -------------------------------------- - -Like the "Phases of the boot process" section, this one introduces a concept in -very raw form. We defer to the PCD related edk2 specifications, and we won't -discuss implementation details here. Our purpose is only to offer the reader a -usable (albeit possibly inaccurate) definition, so that we can refer to PCDs -later on. - -Colloquially, when we say "PCD", we actually mean "PCD entry"; that is, an -entry stored in the Platform Configuration Database. - -The Platform Configuration Database is -- a firmware-wide -- name-value store -- of scalars and buffers -- where each entry may be - - build-time constant, or - - run-time dynamic, or - - theoretically, a middle option: patchable in the firmware file itself, - using a dedicated tool. (OVMF does not utilize externally patchable - entries.) - -A PCD entry is declared in the DEC file of the edk2 top-level Package directory -whose modules (drivers and libraries) are the primary consumers of the PCD -entry. (See for example OvmfPkg/OvmfPkg.dec). Basically, a PCD in a DEC file -exposes a simple customization point. - -Interest in a PCD entry is communicated to the build system by naming the PCD -entry in the INF file of the interested module (application, driver or -library). The module may read and -- dependent on the PCD entry's category -- -write the PCD entry. - -Let's investigate the characteristics of the Database and the PCD entries. - -- Firmware-wide: technically, all modules may access all entries they are - interested in, assuming they advertise their interest in their INF files. - With careful design, PCDs enable inter-driver propagation of (simple) system - configuration. PCDs are available in both PEI and DXE. - - (UEFI drivers meant to be portable (ie. from third party vendors) are not - supposed to use PCDs, since PCDs qualify internal to the specific edk2 - firmware in question.) - -- Name-value store of scalars and buffers: each PCD has a symbolic name, and a - fixed scalar type (UINT16, UINT32 etc), or VOID* for buffers. Each PCD entry - belongs to a namespace, where a namespace is (obviously) a GUID, defined in - the DEC file. - -- A DEC file can permit several categories for a PCD: - - build-time constant ("FixedAtBuild"), - - patchable in the firmware image ("PatchableInModule", unused in OVMF), - - runtime modifiable ("Dynamic"). - -The platform description file (DSC) of a top-level Package directory may choose -the exact category for a given PCD entry that its modules wish to use, and -assign a default (or constant) initial value to it. - -In addition, the edk2 build system too can initialize PCD entries to values -that it calculates while laying out the flash device image. Such PCD -assignments are described in the FDF control file. - -Firmware image structure ------------------------- - -(We assume the common X64 choice for both PEI and DXE, and the default DEBUG -build target.) - -The OvmfPkg/OvmfPkgX64.fdf file defines the following layout for the flash -device image "OVMF.fd": - - Description Compression type Size - ------------------------------ ---------------------- ------- - Non-volatile data storage open-coded binary data 128 KB - Variable store 56 KB - Event log 4 KB - Working block 4 KB - Spare area 64 KB - - FVMAIN_COMPACT uncompressed 1712 KB - FV Firmware File System file LZMA compressed - PEIFV uncompressed 896 KB - individual PEI modules uncompressed - DXEFV uncompressed 8192 KB - individual DXE modules uncompressed - - SECFV uncompressed 208 KB - SEC driver - reset vector code - -The top-level image consists of three regions (three firmware volumes): -- non-volatile data store (128 KB), -- main firmware volume (FVMAIN_COMPACT, 1712 KB), -- firmware volume containing the reset vector code and the SEC phase code (208 - KB). - -In total, the OVMF.fd file has size 128 KB + 1712 KB + 208 KB == 2 MB. - -(1) The firmware volume with non-volatile data store (128 KB) has the following - internal structure, in blocks of 4 KB: - - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ L: event log - LIVE | varstore |L|W| W: working block - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - SPARE | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - The first half of this firmware volume is "live", while the second half is - "spare". The spare half is important when the variable driver reclaims - unused storage and reorganizes the variable store. - - The live half dedicates 14 blocks (56 KB) to the variable store itself. On - top of those, one block is set aside for an event log, and one block is - used as the working block of the fault tolerant write protocol. Fault - tolerant writes are used to recover from an occasional (virtual) power loss - during variable updates. - - The blocks in this firmware volume are accessed, in stacking order from - least abstract to most abstract, by: - - - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL (provided by - OvmfPkg/QemuFlashFvbServicesRuntimeDxe), - - - EFI_FAULT_TOLERANT_WRITE_PROTOCOL (provided by - MdeModulePkg/Universal/FaultTolerantWriteDxe), - - - architectural protocols instrumental to the runtime UEFI variable - services: - - EFI_VARIABLE_ARCH_PROTOCOL, - - EFI_VARIABLE_WRITE_ARCH_PROTOCOL. - - In a non-secure boot build, the DXE driver providing these architectural - protocols is MdeModulePkg/Universal/Variable/RuntimeDxe. In a secure boot - build, where authenticated variables are available, the DXE driver - offering these protocols is SecurityPkg/VariableAuthenticated/RuntimeDxe. - -(2) The main firmware volume (FVMAIN_COMPACT, 1712 KB) embeds further firmware - volumes. The outermost layer is a Firmware File System (FFS), carrying a - single file. This file holds an LZMA-compressed section, which embeds two - firmware volumes: PEIFV (896 KB) with PEIMs, and DXEFV (8192 KB) with DXE - and UEFI drivers. - - This scheme enables us to build 896 KB worth of PEI drivers and 8192 KB - worth of DXE and UEFI drivers, compress them all with LZMA in one go, and - store the compressed result in 1712 KB, saving room in the flash device. - -(3) The SECFV firmware volume (208 KB) is not compressed. It carries the - "volume top file" with the reset vector code, to end at 4 GB in - guest-physical address space, and the SEC phase driver (OvmfPkg/Sec). - - The last 16 bytes of the volume top file (mapped directly under 4 GB) - contain a NOP slide and a jump instruction. This is where QEMU starts - executing the firmware, at address 0xFFFF_FFF0. The reset vector and the - SEC driver run from flash directly. - - The SEC driver locates FVMAIN_COMPACT in the flash, and decompresses the - main firmware image to RAM. The rest of OVMF (PEI, DXE, BDS phases) run - from RAM. - -As already mentioned, the OVMF.fd file is mapped by qemu's -"hw/block/pflash_cfi01.c" device just under 4 GB in guest-physical address -space, according to the command line option - - -drive if=pflash,format=raw,file=fedora.flash - -(refer to the Example qemu invocation). This is a "ROMD device", which can -switch out of "ROMD mode" and back into it. - -Namely, in the default ROMD mode, the guest-physical address range backed by -the flash device reads and executes as ROM (it does not trap from KVM to QEMU). -The first write access in this mode traps to QEMU, and flips the device out of -ROMD mode. - -In non-ROMD mode, the flash chip is programmed by storing CFI (Common Flash -Interface) command values at the flash-covered addresses; both reads and writes -trap to QEMU, and the flash contents are modified and synchronized to the -host-side file. A special CFI command flips the flash device back to ROMD mode. - -Qemu implements the above based on the KVM_CAP_READONLY_MEM / KVM_MEM_READONLY -KVM features, and OVMF puts it to use in its EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL -implementation, under "OvmfPkg/QemuFlashFvbServicesRuntimeDxe". - -IMPORTANT: Never pass OVMF.fd to qemu with the -bios option. That option maps -the firmware image as ROM into the guest's address space, and forces OVMF to -emulate non-volatile variables with a fallback driver that is bound to have -insufficient and confusing semantics. - -The 128 KB firmware volume with the variable store, discussed under (1), is -also built as a separate host-side file, named "OVMF_VARS.fd". The "rest" is -built into a third file, "OVMF_CODE.fd", which is only 1920 KB in size. The -variable store is mapped into its usual location, at 4 GB - 2 MB = 0xFFE0_0000, -through the following qemu options: - - -drive if=pflash,format=raw,readonly,file=OVMF_CODE.fd \ - -drive if=pflash,format=raw,file=fedora.varstore.fd - -This way qemu configures two flash chips consecutively, with start addresses -growing downwards, which is transparent to OVMF. - -[RHEL] Red Hat Enterprise Linux 7.1 ships a Secure Boot-enabled, X64, DEBUG - firmware only. Furthermore, only the split files ("OVMF_VARS.fd" and - "OVMF_CODE.fd") are available. - -S3 (suspend to RAM and resume) ------------------------------- - -As noted in Example qemu invocation, the - - -global PIIX4_PM.disable_s3=0 - -command line option tells qemu and OVMF if the user would like to enable S3 -support. (This is corresponds to the /domain/pm/suspend-to-mem/@enabled libvirt -domain XML attribute.) - -Implementing / orchestrating S3 was a considerable community effort in OVMF. A -detailed description exceeds the scope of this report; we only make a few -statements. - -(1) S3-related PPIs and protocols are well documented in the PI specification. - -(2) Edk2 contains most modules that are needed to implement S3 on a given - platform. One abstraction that is central to the porting / extending of the - S3-related modules to a new platform is the LockBox library interface, - which a specific platform can fill in by implementing its own LockBox - library instance. - - The LockBox library provides a privileged name-value store (to be addressed - by GUIDs). The privilege separation stretches between the firmware and the - operating system. That is, the S3-related machinery of the firmware saves - some items in the LockBox securely, under well-known GUIDs, before booting - the operating system. During resume (which is a form of warm reset), the - firmware is activated again, and retrieves items from the LockBox. Before - jumping to the OS's resume vector, the LockBox is secured again. - - We'll return to this later when we separately discuss SMRAM and SMM. - -(3) During resume, the DXE and later phases are never reached; only the reset - vector, and the SEC and PEI phases of the firmware run. The platform is - supposed to detect a resume in progress during PEI, and to store that fact - in the BootMode field of the Phase Handoff Information Table (PHIT) HOB. - OVMF keys this off the CMOS, see OvmfPkg/PlatformPei. - - At the end of PEI, the DXE IPL PEIM (Initial Program Load PEI Module, see - MdeModulePkg/Core/DxeIplPeim) examines the Boot Mode, and if it says "S3 - resume in progress", then the IPL branches to the PEIM that exports - EFI_PEI_S3_RESUME2_PPI (provided by UefiCpuPkg/Universal/Acpi/S3Resume2Pei) - rather than loading the DXE core. - - S3Resume2Pei executes the technical steps of the resumption, relying on the - contents of the LockBox. - -(4) During first boot (or after a normal platform reset), when DXE does run, - hardware drivers in the DXE phase are encouraged to "stash" their hardware - configuration steps (eg. accesses to PCI config space, I/O ports, memory - mapped addresses, and so on) in a centrally maintained, so called "S3 boot - script". Hardware accesses are represented with opcodes of a special binary - script language. - - This boot script is to be replayed during resume, by S3Resume2Pei. The - general goal is to bring back hardware devices -- which have been powered - off during suspend -- to their original after-first-boot state, and in - particular, to do so quickly. - - At the moment, OVMF saves only one opcode in the S3 resume boot script: an - INFORMATION opcode, with contents 0xDEADBEEF (in network byte order). The - consensus between Linux developers seems to be that boot firmware is only - responsible for restoring basic chipset state, which OVMF does during PEI - anyway, independently of S3 vs. normal reset. (One example is the power - management registers of the i440fx chipset.) Device and peripheral state is - the responsibility of the runtime operating system. - - Although an experimental OVMF S3 boot script was at one point captured for - the virtual Cirrus VGA card, such a boot script cannot follow eg. video - mode changes effected by the OS. Hence the operating system can never avoid - restoring device state, and most Linux display drivers (eg. stdvga, QXL) - already cover S3 resume fully. - - The XDDM and WDDM driver models used under Windows OSes seem to recognize - this notion of runtime OS responsibility as well. (See the list of OSes - supported by OVMF in a separate section.) - -(5) The S3 suspend/resume data flow in OVMF is included here tersely, for - interested developers. - - (a) BdsLibBootViaBootOption() - EFI_ACPI_S3_SAVE_PROTOCOL [AcpiS3SaveDxe] - - saves ACPI S3 Context to LockBox ---------------------+ - (including FACS address -- FACS ACPI table | - contains OS waking vector) | - | - - prepares boot script: | - EFI_S3_SAVE_STATE_PROTOCOL.Write() [S3SaveStateDxe] | - S3BootScriptLib [PiDxeS3BootScriptLib] | - - opcodes & arguments are saved in NVS. --+ | - | | - - issues a notification by installing | | - EFI_DXE_SMM_READY_TO_LOCK_PROTOCOL | | - | | - (b) EFI_S3_SAVE_STATE_PROTOCOL [S3SaveStateDxe] | | - S3BootScriptLib [PiDxeS3BootScriptLib] | | - - closes script with special opcode <---------+ | - - script is available in non-volatile memory | - via PcdS3BootScriptTablePrivateDataPtr --+ | - | | - BootScriptExecutorDxe | | - S3BootScriptLib [PiDxeS3BootScriptLib] | | - - Knows about boot script location by <----+ | - synchronizing with the other library | - instance via | - PcdS3BootScriptTablePrivateDataPtr. | - - Copies relocated image of itself to | - reserved memory. --------------------------------+ | - - Saved image contains pointer to boot script. ---|--+ | - | | | - Runtime: | | | - | | | - (c) OS is booted, writes OS waking vector to FACS, | | | - suspends machine | | | - | | | - S3 Resume (PEI): | | | - | | | - (d) PlatformPei sets S3 Boot Mode based on CMOS | | | - | | | - (e) DXE core is skipped and EFI_PEI_S3_RESUME2 is | | | - called as last step of PEI | | | - | | | - (f) S3Resume2Pei retrieves from LockBox: | | | - - ACPI S3 Context (path to FACS) <------------------|--|--+ - | | | - +------------------|--|--+ - - Boot Script Executor Image <----------------------+ | | - | | - (g) BootScriptExecutorDxe | | - S3BootScriptLib [PiDxeS3BootScriptLib] | | - - executes boot script <-----------------------------+ | - | - (h) OS waking vector available from ACPI S3 Context / FACS <--+ - is called - -A comprehensive memory map of OVMF ----------------------------------- - -The following section gives a detailed analysis of memory ranges below 4 GB -that OVMF statically uses. - -In the rightmost column, the PCD entry is identified by which the source refers -to the address or size in question. - -The flash-covered range has been discussed previously in "Firmware image -structure", therefore we include it only for completeness. Due to the fact that -this range is always backed by a memory mapped device (and never RAM), it is -unaffected by S3 (suspend to RAM and resume). - -+--------------------------+ 4194304 KB -| | -| SECFV | size: 208 KB -| | -+--------------------------+ 4194096 KB -| | -| FVMAIN_COMPACT | size: 1712 KB -| | -+--------------------------+ 4192384 KB -| | -| variable store | size: 64 KB PcdFlashNvStorageFtwSpareSize -| spare area | -| | -+--------------------------+ 4192320 KB PcdOvmfFlashNvStorageFtwSpareBase -| | -| FTW working block | size: 4 KB PcdFlashNvStorageFtwWorkingSize -| | -+--------------------------+ 4192316 KB PcdOvmfFlashNvStorageFtwWorkingBase -| | -| Event log of | size: 4 KB PcdOvmfFlashNvStorageEventLogSize -| non-volatile storage | -| | -+--------------------------+ 4192312 KB PcdOvmfFlashNvStorageEventLogBase -| | -| variable store | size: 56 KB PcdFlashNvStorageVariableSize -| | -+--------------------------+ 4192256 KB PcdOvmfFlashNvStorageVariableBase - -The flash-mapped image of OVMF.fd covers the entire structure above (2048 KB). - -When using the split files, the address 4192384 KB -(PcdOvmfFlashNvStorageFtwSpareBase + PcdFlashNvStorageFtwSpareSize) is the -boundary between the mapped images of OVMF_VARS.fd (56 KB + 4 KB + 4 KB + 64 KB -= 128 KB) and OVMF_CODE.fd (1712 KB + 208 KB = 1920 KB). - -With regard to RAM that is statically used by OVMF, S3 (suspend to RAM and -resume) complicates matters. Many ranges have been introduced only to support -S3, hence for all ranges below, the following questions will be audited: - -(a) when and how a given range is initialized after first boot of the VM, -(b) how it is protected from memory allocations during DXE, -(c) how it is protected from the OS, -(d) how it is accessed on the S3 resume path, -(e) how it is accessed on the warm reset path. - -Importantly, the term "protected" is meant as protection against inadvertent -reallocations and overwrites by co-operating DXE and OS modules. It does not -imply security against malicious code. - -+--------------------------+ 17408 KB -| | -|DXEFV from FVMAIN_COMPACT | size: 8192 KB PcdOvmfDxeMemFvSize -| decompressed firmware | -| volume with DXE modules | -| | -+--------------------------+ 9216 KB PcdOvmfDxeMemFvBase -| | -|PEIFV from FVMAIN_COMPACT | size: 896 KB PcdOvmfPeiMemFvSize -| decompressed firmware | -| volume with PEI modules | -| | -+--------------------------+ 8320 KB PcdOvmfPeiMemFvBase -| | -| permanent PEI memory for | size: 32 KB PcdS3AcpiReservedMemorySize -| the S3 resume path | -| | -+--------------------------+ 8288 KB PcdS3AcpiReservedMemoryBase -| | -| temporary SEC/PEI heap | size: 32 KB PcdOvmfSecPeiTempRamSize -| and stack | -| | -+--------------------------+ 8256 KB PcdOvmfSecPeiTempRamBase -| | -| unused | size: 32 KB -| | -+--------------------------+ 8224 KB -| | -| SEC's table of | size: 4 KB PcdGuidedExtractHandlerTableSize -| GUIDed section handlers | -| | -+--------------------------+ 8220 KB PcdGuidedExtractHandlerTableAddress -| | -| LockBox storage | size: 4 KB PcdOvmfLockBoxStorageSize -| | -+--------------------------+ 8216 KB PcdOvmfLockBoxStorageBase -| | -| early page tables on X64 | size: 24 KB PcdOvmfSecPageTablesSize -| | -+--------------------------+ 8192 KB PcdOvmfSecPageTablesBase - -(1) Early page tables on X64: - - (a) when and how it is initialized after first boot of the VM - - The range is filled in during the SEC phase - [OvmfPkg/ResetVector/Ia32/PageTables64.asm]. The CR3 register is verified - against the base address in SecCoreStartupWithStack() - [OvmfPkg/Sec/SecMain.c]. - - (b) how it is protected from memory allocations during DXE - - If S3 was enabled on the QEMU command line (see "-global - PIIX4_PM.disable_s3=0" earlier), then InitializeRamRegions() - [OvmfPkg/PlatformPei/MemDetect.c] protects the range with an AcpiNVS memory - allocation HOB, in PEI. - - If S3 was disabled, then this range is not protected. DXE's own page tables - are first built while still in PEI (see HandOffToDxeCore() - [MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c]). Those tables are located - in permanent PEI memory. After CR3 is switched over to them (which occurs - before jumping to the DXE core entry point), we don't have to preserve the - initial tables. - - (c) how it is protected from the OS - - If S3 is enabled, then (1b) reserves it from the OS too. - - If S3 is disabled, then the range needs no protection. - - (d) how it is accessed on the S3 resume path - - It is rewritten same as in (1a), which is fine because (1c) reserved it. - - (e) how it is accessed on the warm reset path - - It is rewritten same as in (1a). - -(2) LockBox storage: - - (a) when and how it is initialized after first boot of the VM - - InitializeRamRegions() [OvmfPkg/PlatformPei/MemDetect.c] zeroes out the - area during PEI. This is correct but not strictly necessary, since on first - boot the area is zero-filled anyway. - - The LockBox signature of the area is filled in by the PEI module or DXE - driver that has been linked against OVMF's LockBoxLib and is run first. The - signature is written in LockBoxLibInitialize() - [OvmfPkg/Library/LockBoxLib/LockBoxLib.c]. - - Any module calling SaveLockBox() [OvmfPkg/Library/LockBoxLib/LockBoxLib.c] - will co-populate this area. - - (b) how it is protected from memory allocations during DXE - - If S3 is enabled, then InitializeRamRegions() - [OvmfPkg/PlatformPei/MemDetect.c] protects the range as AcpiNVS. - - Otherwise, the range is covered with a BootServicesData memory allocation - HOB. - - (c) how it is protected from the OS - - If S3 is enabled, then (2b) protects it sufficiently. - - Otherwise the range requires no runtime protection, and the - BootServicesData allocation type from (2b) ensures that the range will be - released to the OS. - - (d) how it is accessed on the S3 resume path - - The S3 Resume PEIM restores data from the LockBox, which has been correctly - protected in (2c). - - (e) how it is accessed on the warm reset path - - InitializeRamRegions() [OvmfPkg/PlatformPei/MemDetect.c] zeroes out the - range during PEI, effectively emptying the LockBox. Modules will - re-populate the LockBox as described in (2a). - -(3) SEC's table of GUIDed section handlers - - (a) when and how it is initialized after first boot of the VM - - The following two library instances are linked into SecMain: - - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib, - - MdePkg/Library/BaseExtractGuidedSectionLib. - - The first library registers its LZMA decompressor plugin (which is a called - a "section handler") by calling the second library: - - LzmaDecompressLibConstructor() [GuidedSectionExtraction.c] - ExtractGuidedSectionRegisterHandlers() [BaseExtractGuidedSectionLib.c] - - The second library maintains its table of registered "section handlers", to - be indexed by GUID, in this fixed memory area, independently of S3 - enablement. - - (The decompression of FVMAIN_COMPACT's FFS file section that contains the - PEIFV and DXEFV firmware volumes occurs with the LZMA decompressor - registered above. See (6) and (7) below.) - - (b) how it is protected from memory allocations during DXE - - There is no need to protect this area from DXE: because nothing else in - OVMF links against BaseExtractGuidedSectionLib, the area loses its - significance as soon as OVMF progresses from SEC to PEI, therefore DXE is - allowed to overwrite the region. - - (c) how it is protected from the OS - - When S3 is enabled, we cover the range with an AcpiNVS memory allocation - HOB in InitializeRamRegions(). - - When S3 is disabled, the range is not protected. - - (d) how it is accessed on the S3 resume path - - The table of registered section handlers is again managed by - BaseExtractGuidedSectionLib linked into SecMain exclusively. Section - handler registrations update the table in-place (based on GUID matches). - - (e) how it is accessed on the warm reset path - - If S3 is enabled, then the OS won't damage the table (due to (3c)), thus - see (3d). - - If S3 is disabled, then the OS has most probably overwritten the range with - its own data, hence (3a) -- complete reinitialization -- will come into - effect, based on the table signature check in BaseExtractGuidedSectionLib. - -(4) temporary SEC/PEI heap and stack - - (a) when and how it is initialized after first boot of the VM - - The range is configured in [OvmfPkg/Sec/X64/SecEntry.S] and - SecCoreStartupWithStack() [OvmfPkg/Sec/SecMain.c]. The stack half is read & - written by the CPU transparently. The heap half is used for memory - allocations during PEI. - - Data is migrated out (to permanent PEI stack & memory) in (or soon after) - PublishPeiMemory() [OvmfPkg/PlatformPei/MemDetect.c]. - - (b) how it is protected from memory allocations during DXE - - It is not necessary to protect this range during DXE because its use ends - still in PEI. - - (c) how it is protected from the OS - - If S3 is enabled, then InitializeRamRegions() - [OvmfPkg/PlatformPei/MemDetect.c] reserves it as AcpiNVS. - - If S3 is disabled, then the range doesn't require protection. - - (d) how it is accessed on the S3 resume path - - Same as in (4a), except the target area of the migration triggered by - PublishPeiMemory() [OvmfPkg/PlatformPei/MemDetect.c] is different -- see - (5). - - (e) how it is accessed on the warm reset path - - Same as in (4a). The stack and heap halves both may contain garbage, but it - doesn't matter. - -(5) permanent PEI memory for the S3 resume path - - (a) when and how it is initialized after first boot of the VM - - No particular initialization or use. - - (b) how it is protected from memory allocations during DXE - - We don't need to protect this area during DXE. - - (c) how it is protected from the OS - - When S3 is enabled, InitializeRamRegions() - [OvmfPkg/PlatformPei/MemDetect.c] makes sure the OS stays away by covering - the range with an AcpiNVS memory allocation HOB. - - When S3 is disabled, the range needs no protection. - - (d) how it is accessed on the S3 resume path - - PublishPeiMemory() installs the range as permanent RAM for PEI. The range - will serve as stack and will satisfy allocation requests during the rest of - PEI. OS data won't overlap due to (5c). - - (e) how it is accessed on the warm reset path - - Same as (5a). - -(6) PEIFV -- decompressed firmware volume with PEI modules - - (a) when and how it is initialized after first boot of the VM - - DecompressMemFvs() [OvmfPkg/Sec/SecMain.c] populates the area, by - decompressing the flash-mapped FVMAIN_COMPACT volume's contents. (Refer to - "Firmware image structure".) - - (b) how it is protected from memory allocations during DXE - - When S3 is disabled, PeiFvInitialization() [OvmfPkg/PlatformPei/Fv.c] - covers the range with a BootServicesData memory allocation HOB. - - When S3 is enabled, the same is coverage is ensured, just with the stronger - AcpiNVS memory allocation type. - - (c) how it is protected from the OS - - When S3 is disabled, it is not necessary to keep the range from the OS. - - Otherwise the AcpiNVS type allocation from (6b) provides coverage. - - (d) how it is accessed on the S3 resume path - - Rather than decompressing it again from FVMAIN_COMPACT, GetS3ResumePeiFv() - [OvmfPkg/Sec/SecMain.c] reuses the protected area for parsing / execution - from (6c). - - (e) how it is accessed on the warm reset path - - Same as (6a). - -(7) DXEFV -- decompressed firmware volume with DXE modules - - (a) when and how it is initialized after first boot of the VM - - Same as (6a). - - (b) how it is protected from memory allocations during DXE - - PeiFvInitialization() [OvmfPkg/PlatformPei/Fv.c] covers the range with a - BootServicesData memory allocation HOB. - - (c) how it is protected from the OS - - The OS is allowed to release and reuse this range. - - (d) how it is accessed on the S3 resume path - - It's not; DXE never runs during S3 resume. - - (e) how it is accessed on the warm reset path - - Same as in (7a). - -Known Secure Boot limitations ------------------------------ - -Under "Motivation" we've mentioned that OVMF's Secure Boot implementation is -not suitable for production use yet -- it's only good for development and -testing of standards-conformant, non-malicious guest code (UEFI and operating -system alike). - -Now that we've examined the persistent flash device, the workings of S3, and -the memory map, we can discuss two currently known shortcomings of OVMF's -Secure Boot that in fact make it insecure. (Clearly problems other than these -two might exist; the set of issues considered here is not meant to be -exhaustive.) - -One trait of Secure Boot is tamper-evidence. Secure Boot may not prevent -malicious modification of software components (for example, operating system -drivers), but by being the root of integrity on a platform, it can catch (or -indirectly contribute to catching) unauthorized changes, by way of signature -and certificate checks at the earliest phases of boot. - -If an attacker can tamper with key material stored in authenticated and/or -boot-time only persistent variables (for example, PK, KEK, db, dbt, dbx), then -the intended security of this scheme is compromised. The UEFI 2.4A -specification says - -- in section 28.3.4: - - Platform Keys: - - The public key must be stored in non-volatile storage which is tamper and - delete resistant. - - Key Exchange Keys: - - The public key must be stored in non-volatile storage which is tamper - resistant. - -- in section 28.6.1: - - The signature database variables db, dbt, and dbx must be stored in - tamper-resistant non-volatile storage. - -(1) The combination of QEMU, KVM, and OVMF does not provide this kind of - resistance. The variable store in the emulated flash chip is directly - accessible to, and reprogrammable by, UEFI drivers, applications, and - operating systems. - -(2) Under "S3 (suspend to RAM and resume)" we pointed out that the LockBox - storage must be similarly secure and tamper-resistant. - - On the S3 resume path, the PEIM providing EFI_PEI_S3_RESUME2_PPI - (UefiCpuPkg/Universal/Acpi/S3Resume2Pei) restores and interprets data from - the LockBox that has been saved there during boot. This PEIM, being part of - the firmware, has full access to the platform. If an operating system can - tamper with the contents of the LockBox, then at the next resume the - platform's integrity might be subverted. - - OVMF stores the LockBox in normal guest RAM (refer to the memory map - section above). Operating systems and third party UEFI drivers and UEFI - applications that respect the UEFI memory map will not inadvertently - overwrite the LockBox storage, but there's nothing to prevent eg. a - malicious kernel from modifying the LockBox. - -One means to address these issues is SMM and SMRAM (System Management Mode and -System Management RAM). - -During boot and resume, the firmware can enter and leave SMM and access SMRAM. -Before the DXE phase is left, and control is transferred to the BDS phase (when -third party UEFI drivers and applications can be loaded, and an operating -system can be loaded), SMRAM is locked in hardware, and subsequent modules -cannot access it directly. (See EFI_DXE_SMM_READY_TO_LOCK_PROTOCOL.) - -Once SMRAM has been locked, UEFI drivers and the operating system can enter SMM -by raising a System Management Interrupt (SMI), at which point trusted code -(part of the platform firmware) takes control. SMRAM is also unlocked by -platform reset, at which point the boot firmware takes control again. - -Variable store and LockBox in SMRAM ------------------------------------ - -Edk2 provides almost all components to implement the variable store and the -LockBox in SMRAM. In this section we summarize ideas for utilizing those -facilities. - -The SMRAM and SMM infrastructure in edk2 is built up as follows: - -(1) The platform hardware provides SMM / SMI / SMRAM. - - Qemu/KVM doesn't support these features currently and should implement them - in the longer term. - -(2) The platform vendor (in this case, OVMF developers) implement device - drivers for the platform's System Management Mode: - - - EFI_SMM_CONTROL2_PROTOCOL: for raising a synchronous (and/or) periodic - SMI(s); that is, for entering SMM. - - - EFI_SMM_ACCESS2_PROTOCOL: for describing and accessing SMRAM. - - These protocols are documented in the PI Specification, Volume 4. - -(3) The platform DSC file is to include the following platform-independent - modules: - - - MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf: SMM Initial Program Load - - MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf: SMM Core - -(4) At this point, modules of type DXE_SMM_DRIVER can be loaded. - - Such drivers are privileged. They run in SMM, have access to SMRAM, and are - separated and switched from other drivers through SMIs. Secure - communication between unprivileged (non-SMM) and privileged (SMM) drivers - happens through EFI_SMM_COMMUNICATION_PROTOCOL (implemented by the SMM - Core, see (3)). - - DXE_SMM_DRIVER modules must sanitize their input (coming from unprivileged - drivers) carefully. - -(5) The authenticated runtime variable services driver (for Secure Boot builds) - is located under "SecurityPkg/VariableAuthenticated/RuntimeDxe". OVMF - currently builds the driver (a DXE_RUNTIME_DRIVER module) with the - "VariableRuntimeDxe.inf" control file (refer to "OvmfPkg/OvmfPkgX64.dsc"), - which does not use SMM. - - The directory includes two more INF files: - - - VariableSmm.inf -- module type: DXE_SMM_DRIVER. A privileged driver that - runs in SMM and has access to SMRAM. - - - VariableSmmRuntimeDxe.inf -- module type: DXE_RUNTIME_DRIVER. A - non-privileged driver that implements the variable runtime services - (replacing the current "VariableRuntimeDxe.inf" file) by communicating - with the above privileged SMM half via EFI_SMM_COMMUNICATION_PROTOCOL. - -(6) An SMRAM-based LockBox implementation needs to be discussed in two parts, - because the LockBox is accessed in both PEI and DXE. - - (a) During DXE, drivers save data in the LockBox. A save operation is - layered as follows: - - - The unprivileged driver wishing to store data in the LockBox links - against the "MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf" - library instance. - - The library allows the unprivileged driver to format requests for the - privileged SMM LockBox driver (see below), and to parse responses. - - - The privileged SMM LockBox driver is built from - "MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf". This - driver has module type DXE_SMM_DRIVER and can access SMRAM. - - The driver delegates command parsing and response formatting to - "MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf". - - - The above two halves (unprivileged and privileged) mirror what we've - seen in case of the variable service drivers, under (5). - - (b) In PEI, the S3 Resume PEIM (UefiCpuPkg/Universal/Acpi/S3Resume2Pei) - retrieves data from the LockBox. - - Presumably, S3Resume2Pei should be considered an "unprivileged PEIM", - and the SMRAM access should be layered as seen in DXE. Unfortunately, - edk2 does not implement all of the layers in PEI -- the code either - doesn't exist, or it is not open source: - - role | DXE: protocol/module | PEI: PPI/module - -------------+--------------------------------+------------------------------ - unprivileged | any | S3Resume2Pei.inf - driver | | - -------------+--------------------------------+------------------------------ - command | LIBRARY_CLASS = LockBoxLib | LIBRARY_CLASS = LockBoxLib - formatting | | - and response | SmmLockBoxDxeLib.inf | SmmLockBoxPeiLib.inf - parsing | | - -------------+--------------------------------+------------------------------ - privilege | EFI_SMM_COMMUNICATION_PROTOCOL | EFI_PEI_SMM_COMMUNICATION_PPI - separation | | - | PiSmmCore.inf | missing! - -------------+--------------------------------+------------------------------ - platform SMM | EFI_SMM_CONTROL2_PROTOCOL | PEI_SMM_CONTROL_PPI - and SMRAM | EFI_SMM_ACCESS2_PROTOCOL | PEI_SMM_ACCESS_PPI - access | | - | to be done in OVMF | to be done in OVMF - -------------+--------------------------------+------------------------------ - command | LIBRARY_CLASS = LockBoxLib | LIBRARY_CLASS = LockBoxLib - parsing and | | - response | SmmLockBoxSmmLib.inf | missing! - formatting | | - -------------+--------------------------------+------------------------------ - privileged | SmmLockBox.inf | missing! - LockBox | | - driver | | - - Alternatively, in the future OVMF might be able to provide a LockBoxLib - instance (an SmmLockBoxPeiLib substitute) for S3Resume2Pei that - accesses SMRAM directly, eliminating the need for deeper layers in the - stack (that is, EFI_PEI_SMM_COMMUNICATION_PPI and deeper). - - In fact, a "thin" EFI_PEI_SMM_COMMUNICATION_PPI implementation whose - sole Communicate() member invariably returns EFI_NOT_STARTED would - cause the current SmmLockBoxPeiLib library instance to directly perform - full-depth SMRAM access and LockBox search, obviating the "missing" - cells. (With reference to A Tour Beyond BIOS: Implementing S3 Resume - with EDK2, by Jiewen Yao and Vincent Zimmer, October 2014.) - -Select features ---------------- - -In this section we'll browse the top-level "OvmfPkg" package directory, and -discuss the more interesting drivers and libraries that have not been mentioned -thus far. - -X64-specific reset vector for OVMF -.................................. - -The "OvmfPkg/ResetVector" directory customizes the reset vector (found in -"UefiCpuPkg/ResetVector/Vtf0") for "OvmfPkgX64.fdf", that is, when the SEC/PEI -phases run in 64-bit (ie. long) mode. - -The reset vector's control flow looks roughly like: - - resetVector [Ia16/ResetVectorVtf0.asm] - EarlyBspInitReal16 [Ia16/Init16.asm] - Main16 [Main.asm] - EarlyInit16 [Ia16/Init16.asm] - - ; Transition the processor from - ; 16-bit real mode to 32-bit flat mode - TransitionFromReal16To32BitFlat [Ia16/Real16ToFlat32.asm] - - ; Search for the - ; Boot Firmware Volume (BFV) - Flat32SearchForBfvBase [Ia32/SearchForBfvBase.asm] - - ; Search for the SEC entry point - Flat32SearchForSecEntryPoint [Ia32/SearchForSecEntry.asm] - - %ifdef ARCH_IA32 - ; Jump to the 32-bit SEC entry point - %else - ; Transition the processor - ; from 32-bit flat mode - ; to 64-bit flat mode - Transition32FlatTo64Flat [Ia32/Flat32ToFlat64.asm] - - SetCr3ForPageTables64 [Ia32/PageTables64.asm] - ; set CR3 to page tables - ; built into the ROM image - - ; enable PAE - ; set LME - ; enable paging - - ; Jump to the 64-bit SEC entry point - %endif - -On physical platforms, the initial page tables referenced by -SetCr3ForPageTables64 are built statically into the flash device image, and are -present in ROM at runtime. This is fine on physical platforms because the -pre-built page table entries have the Accessed and Dirty bits set from the -start. - -Accordingly, for OVMF running in long mode on qemu/KVM, the initial page tables -were mapped as a KVM_MEM_READONLY slot, as part of QEMU's pflash device (refer -to "Firmware image structure" above). - -In spite of the Accessed and Dirty bits being pre-set in the read-only, -in-flash PTEs, in a virtual machine attempts are made to update said PTE bits, -differently from physical hardware. The component attempting to update the -read-only PTEs can be one of the following: - -- The processor itself, if it supports nested paging, and the user enables that - processor feature, - -- KVM code implementing shadow paging, otherwise. - -The first case presents no user-visible symptoms, but the second case (KVM, -shadow paging) used to cause a triple fault, prior to Linux commit ba6a354 -("KVM: mmu: allow page tables to be in read-only slots"). - -For compatibility with earlier KVM versions, the OvmfPkg/ResetVector directory -adapts the generic reset vector code as follows: - - Transition32FlatTo64Flat [UefiCpuPkg/.../Ia32/Flat32ToFlat64.asm] - - SetCr3ForPageTables64 [OvmfPkg/ResetVector/Ia32/PageTables64.asm] - - ; dynamically build the initial page tables in RAM, at address - ; PcdOvmfSecPageTablesBase (refer to the memory map above), - ; identity-mapping the first 4 GB of address space - - ; set CR3 to PcdOvmfSecPageTablesBase - - ; enable PAE - ; set LME - ; enable paging - -This way the PTEs that earlier KVM versions try to update (during shadow -paging) are located in a read-write memory slot, and the write attempts -succeed. - -Client library for QEMU's firmware configuration interface -.......................................................... - -QEMU provides a write-only, 16-bit wide control port, and a read-write, 8-bit -wide data port for exchanging configuration elements with the firmware. - -The firmware writes a selector (a key) to the control port (0x510), and then -reads the corresponding configuration data (produced by QEMU) from the data -port (0x511). - -If the selected entry is writable, the firmware may overwrite it. If QEMU has -associated a callback with the entry, then when the entry is completely -rewritten, QEMU runs the callback. (OVMF does not rewrite any entries at the -moment.) - -A number of selector values (keys) are predefined. In particular, key 0x19 -selects (returns) a directory of { name, selector, size } triplets, roughly -speaking. - -The firmware can request configuration elements by well-known name as well, by -looking up the selector value first in the directory, by name, and then writing -the selector to the control port. The number of bytes to read subsequently from -the data port is known from the directory entry's "size" field. - -By convention, directory entries (well-known symbolic names of configuration -elements) are formatted as POSIX pathnames. For example, the array selected by -the "etc/system-states" name indicates (among other things) whether the user -enabled S3 support in QEMU. - -The above interface is called "fw_cfg". - -The binary data associated with a symbolic name is called an "fw_cfg file". - -OVMF's fw_cfg client library is found in "OvmfPkg/Library/QemuFwCfgLib". OVMF -discovers many aspects of the virtual system with it; we refer to a few -examples below. - -Guest ACPI tables -................. - -An operating system discovers a good amount of its hardware by parsing ACPI -tables, and by interpreting ACPI objects and methods. On physical hardware, the -platform vendor's firmware installs ACPI tables in memory that match both the -hardware present in the system and the user's firmware configuration ("BIOS -setup"). - -Under qemu/KVM, the owner of the (virtual) hardware configuration is QEMU. -Hardware can easily be reconfigured on the command line. Furthermore, features -like CPU hotplug, PCI hotplug, memory hotplug are continuously developed for -QEMU, and operating systems need direct ACPI support to exploit these features. - -For this reason, QEMU builds its own ACPI tables dynamically, in a -self-descriptive manner, and exports them to the firmware through a complex, -multi-file fw_cfg interface. It is rooted in the "etc/table-loader" fw_cfg -file. (Further details of this interface are out of scope for this report.) - -OVMF's AcpiPlatformDxe driver fetches the ACPI tables, and installs them for -the guest OS with the EFI_ACPI_TABLE_PROTOCOL (which is in turn provided by the -generic "MdeModulePkg/Universal/Acpi/AcpiTableDxe" driver). - -For earlier QEMU versions and machine types (which we generally don't recommend -for OVMF; see "Scope"), the "OvmfPkg/AcpiTables" directory contains a few -static ACPI table templates. When the "etc/table-loader" fw_cfg file is -unavailable, AcpiPlatformDxe installs these default tables (with a little bit -of dynamic patching). - -When OVMF runs in a Xen domU, AcpiTableDxe also installs ACPI tables that -originate from the hypervisor's environment. - -Guest SMBIOS tables -................... - -Quoting the SMBIOS Reference Specification, - - [...] the System Management BIOS Reference Specification addresses how - motherboard and system vendors present management information about their - products in a standard format [...] - -In practice SMBIOS tables are just another set of tables that the platform -vendor's firmware installs in RAM for the operating system, and, importantly, -for management applications running on the OS. Without rehashing the "Guest -ACPI tables" section in full, let's map the OVMF roles seen there from ACPI to -SMBIOS: - - role | ACPI | SMBIOS - -------------------------+-------------------------+------------------------- - fw_cfg file | etc/table-loader | etc/smbios/smbios-tables - -------------------------+-------------------------+------------------------- - OVMF driver | AcpiPlatformDxe | SmbiosPlatformDxe - under "OvmfPkg" | | - -------------------------+-------------------------+------------------------- - Underlying protocol, | EFI_ACPI_TABLE_PROTOCOL | EFI_SMBIOS_PROTOCOL - implemented by generic | | - driver under | Acpi/AcpiTableDxe | SmbiosDxe - "MdeModulePkg/Universal" | | - -------------------------+-------------------------+------------------------- - default tables available | yes | [RHEL] yes, Type0 and - for earlier QEMU machine | | Type1 tables - types, with hot-patching | | - -------------------------+-------------------------+------------------------- - tables fetched in Xen | yes | yes - domUs | | - -Platform-specific boot policy -............................. - -OVMF's BDS (Boot Device Selection) phase is implemented by -IntelFrameworkModulePkg/Universal/BdsDxe. Roughly speaking, this large driver: - -- provides the EFI BDS architectural protocol (which DXE transfers control to - after dispatching all DXE drivers), - -- connects drivers to devices, - -- enumerates boot devices, - -- auto-generates boot options, - -- provides "BIOS setup" screens, such as: - - - Boot Manager, for booting an option, - - - Boot Maintenance Manager, for adding, deleting, and reordering boot - options, changing console properties etc, - - - Device Manager, where devices can register configuration forms, including - - - Secure Boot configuration forms, - - - OVMF's Platform Driver form (see under PlatformDxe). - -Firmware that includes the "IntelFrameworkModulePkg/Universal/BdsDxe" driver -can customize its behavior by providing an instance of the PlatformBdsLib -library class. The driver links against this platform library, and the -platform library can call Intel's BDS utility functions from -"IntelFrameworkModulePkg/Library/GenericBdsLib". - -OVMF's PlatformBdsLib instance can be found in -"OvmfPkg/Library/PlatformBdsLib". The main function where the BdsDxe driver -enters the library is PlatformBdsPolicyBehavior(). We mention two OVMF -particulars here. - -(1) OVMF is capable of loading kernel images directly from fw_cfg, matching - QEMU's -kernel, -initrd, and -append command line options. This feature is - useful for rapid, repeated Linux kernel testing, and is implemented in the - following call tree: - - PlatformBdsPolicyBehavior() [OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c] - TryRunningQemuKernel() [OvmfPkg/Library/PlatformBdsLib/QemuKernel.c] - LoadLinux*() [OvmfPkg/Library/LoadLinuxLib/Linux.c] - - OvmfPkg/Library/LoadLinuxLib ports the efilinux bootloader project into - OvmfPkg. - -(2) OVMF seeks to comply with the boot order specification passed down by QEMU - over fw_cfg. - - (a) About Boot Modes - - During the PEI phase, OVMF determines and stores the Boot Mode in the - PHIT HOB (already mentioned in "S3 (suspend to RAM and resume)"). The - boot mode is supposed to influence the rest of the system, for example it - distinguishes S3 resume (BOOT_ON_S3_RESUME) from a "normal" boot. - - In general, "normal" boots can be further differentiated from each other; - for example for speed reasons. When the firmware can tell during PEI that - the chassis has not been opened since last power-up, then it might want - to save time by not connecting all devices and not enumerating all boot - options from scratch; it could just rely on the stored results of the - last enumeration. The matching BootMode value, to be set during PEI, - would be BOOT_ASSUMING_NO_CONFIGURATION_CHANGES. - - OVMF only sets one of the following two boot modes, based on CMOS - contents: - - BOOT_ON_S3_RESUME, - - BOOT_WITH_FULL_CONFIGURATION. - - For BOOT_ON_S3_RESUME, please refer to "S3 (suspend to RAM and resume)". - The other boot mode supported by OVMF, BOOT_WITH_FULL_CONFIGURATION, is - an appropriate "catch-all" for a virtual machine, where hardware can - easily change from boot to boot. - - (b) Auto-generation of boot options - - Accordingly, when not resuming from S3 sleep (*), OVMF always connects - all devices, and enumerates all bootable devices as new boot options - (non-volatile variables called Boot####). - - (*) During S3 resume, DXE is not reached, hence BDS isn't either. - - The auto-enumerated boot options are stored in the BootOrder non-volatile - variable after any preexistent options. (Boot options may exist before - auto-enumeration eg. because the user added them manually with the Boot - Maintenance Manager or the efibootmgr utility. They could also originate - from an earlier auto-enumeration.) - - PlatformBdsPolicyBehavior() [OvmfPkg/.../BdsPlatform.c] - TryRunningQemuKernel() [OvmfPkg/.../QemuKernel.c] - BdsLibConnectAll() [IntelFrameworkModulePkg/.../BdsConnect.c] - BdsLibEnumerateAllBootOption() [IntelFrameworkModulePkg/.../BdsBoot.c] - BdsLibBuildOptionFromHandle() [IntelFrameworkModulePkg/.../BdsBoot.c] - BdsLibRegisterNewOption() [IntelFrameworkModulePkg/.../BdsMisc.c] - // - // Append the new option number to the original option order - // - - (c) Relative UEFI device paths in boot options - - The handling of relative ("short-form") UEFI device paths is best - demonstrated through an example, and by quoting the UEFI 2.4A - specification. - - A short-form hard drive UEFI device path could be (displaying each device - path node on a separate line for readability): - - HD(1,GPT,14DD1CC5-D576-4BBF-8858-BAF877C8DF61,0x800,0x64000)/ - \EFI\fedora\shim.efi - - This device path lacks prefix nodes (eg. hardware or messaging type - nodes) that would lead to the hard drive. During load option processing, - the above short-form or relative device path could be matched against the - following absolute device path: - - PciRoot(0x0)/ - Pci(0x4,0x0)/ - HD(1,GPT,14DD1CC5-D576-4BBF-8858-BAF877C8DF61,0x800,0x64000)/ - \EFI\fedora\shim.efi - - The motivation for this type of device path matching / completion is to - allow the user to move around the hard drive (for example, to plug a - controller in a different PCI slot, or to expose the block device on a - different iSCSI path) and still enable the firmware to find the hard - drive. - - The UEFI specification says, - - 9.3.6 Media Device Path - 9.3.6.1 Hard Drive - - [...] Section 3.1.2 defines special rules for processing the Hard - Drive Media Device Path. These special rules enable a disk's location - to change and still have the system boot from the disk. [...] - - 3.1.2 Load Option Processing - - [...] The boot manager must [...] support booting from a short-form - device path that starts with the first element being a hard drive - media device path [...]. The boot manager must use the GUID or - signature and partition number in the hard drive device path to match - it to a device in the system. If the drive supports the GPT - partitioning scheme the GUID in the hard drive media device path is - compared with the UniquePartitionGuid field of the GUID Partition - Entry [...]. If the drive supports the PC-AT MBR scheme the signature - in the hard drive media device path is compared with the - UniqueMBRSignature in the Legacy Master Boot Record [...]. If a - signature match is made, then the partition number must also be - matched. The hard drive device path can be appended to the matching - hardware device path and normal boot behavior can then be used. If - more than one device matches the hard drive device path, the boot - manager will pick one arbitrarily. Thus the operating system must - ensure the uniqueness of the signatures on hard drives to guarantee - deterministic boot behavior. - - Edk2 implements and exposes the device path completion logic in the - already referenced "IntelFrameworkModulePkg/Library/GenericBdsLib" - library, in the BdsExpandPartitionPartialDevicePathToFull() function. - - (d) Filtering and reordering the boot options based on fw_cfg - - Once we have an "all-inclusive", partly preexistent, partly freshly - auto-generated boot option list from bullet (b), OVMF loads QEMU's - requested boot order from fw_cfg, and filters and reorders the list from - (b) with it: - - PlatformBdsPolicyBehavior() [OvmfPkg/.../BdsPlatform.c] - TryRunningQemuKernel() [OvmfPkg/.../QemuKernel.c] - BdsLibConnectAll() [IntelFrameworkModulePkg/.../BdsConnect.c] - BdsLibEnumerateAllBootOption() [IntelFrameworkModulePkg/.../BdsBoot.c] - SetBootOrderFromQemu() [OvmfPkg/.../QemuBootOrder.c] - - According to the (preferred) "-device ...,bootindex=N" and the (legacy) - '-boot order=drives' command line options, QEMU requests a boot order - from the firmware through the "bootorder" fw_cfg file. (For a bootindex - example, refer to the "Example qemu invocation" section.) - - This fw_cfg file consists of OpenFirmware (OFW) device paths -- note: not - UEFI device paths! --, one per line. An example list is: - - /pci@i0cf8/scsi@4/disk@0,0 - /pci@i0cf8/ide@1,1/drive@1/disk@0 - /pci@i0cf8/ethernet@3/ethernet-phy@0 - - OVMF filters and reorders the boot option list from bullet (b) with the - following nested loops algorithm: - - new_uefi_order := - for each qemu_ofw_path in QEMU's OpenFirmware device path list: - qemu_uefi_path_prefix := translate(qemu_ofw_path) - - for each boot_option in current_uefi_order: - full_boot_option := complete(boot_option) - - if match(qemu_uefi_path_prefix, full_boot_option): - append(new_uefi_order, boot_option) - break - - for each unmatched boot_option in current_uefi_order: - if survives(boot_option): - append(new_uefi_order, boot_option) - - current_uefi_order := new_uefi_order - - OVMF iterates over QEMU's OFW device paths in order, translates each to a - UEFI device path prefix, tries to match the translated prefix against the - UEFI boot options (which are completed from relative form to absolute - form for the purpose of prefix matching), and if there's a match, the - matching boot option is appended to the new boot order (which starts out - empty). - - (We elaborate on the translate() function under bullet (e). The - complete() function has been explained in bullet (c).) - - In addition, UEFI boot options that remain unmatched after filtering and - reordering are post-processed, and some of them "survive". Due to the - fact that OpenFirmware device paths have less expressive power than their - UEFI counterparts, some UEFI boot options are simply inexpressible (hence - unmatchable) by the nested loops algorithm. - - An important example is the memory-mapped UEFI shell, whose UEFI device - path is inexpressible by QEMU's OFW device paths: - - MemoryMapped(0xB,0x900000,0x10FFFFF)/ - FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1) - - (Side remark: notice that the address range visible in the MemoryMapped() - node corresponds to DXEFV under "comprehensive memory map of OVMF"! In - addition, the FvFile() node's GUID originates from the FILE_GUID entry of - "ShellPkg/Application/Shell/Shell.inf".) - - The UEFI shell can be booted by pressing ESC in OVMF on the TianoCore - splash screen, and navigating to Boot Manager | EFI Internal Shell. If - the "survival policy" was not implemented, the UEFI shell's boot option - would always be filtered out. - - The current "survival policy" preserves all boot options that start with - neither PciRoot() nor HD(). - - (e) Translating QEMU's OpenFirmware device paths to UEFI device path - prefixes - - In this section we list the (strictly heuristical) mappings currently - performed by OVMF. - - The "prefix only" nature of the translation output is rooted minimally in - the fact that QEMU's OpenFirmware device paths cannot carry pathnames - within filesystems. There's no way to specify eg. - - \EFI\fedora\shim.efi - - in an OFW device path, therefore a UEFI device path translated from an - OFW device path can at best be a prefix (not a full match) of a UEFI - device path that ends with "\EFI\fedora\shim.efi". - - - IDE disk, IDE CD-ROM: - - OpenFirmware device path: - - /pci@i0cf8/ide@1,1/drive@0/disk@0 - ^ ^ ^ ^ ^ - | | | | master or slave - | | | primary or secondary - | PCI slot & function holding IDE controller - PCI root at system bus port, PIO - - UEFI device path prefix: - - PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master,0x0) - ^ - fixed LUN - - - Floppy disk: - - OpenFirmware device path: - - /pci@i0cf8/isa@1/fdc@03f0/floppy@0 - ^ ^ ^ ^ - | | | A: or B: - | | ISA controller io-port (hex) - | PCI slot holding ISA controller - PCI root at system bus port, PIO - - UEFI device path prefix: - - PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0) - ^ - ACPI UID (A: or B:) - - - Virtio-block disk: - - OpenFirmware device path: - - /pci@i0cf8/scsi@6[,3]/disk@0,0 - ^ ^ ^ ^ ^ - | | | fixed - | | PCI function corresponding to disk (optional) - | PCI slot holding disk - PCI root at system bus port, PIO - - UEFI device path prefixes (dependent on the presence of a nonzero PCI - function in the OFW device path): - - PciRoot(0x0)/Pci(0x6,0x0)/HD( - PciRoot(0x0)/Pci(0x6,0x3)/HD( - - - Virtio-scsi disk and virtio-scsi passthrough: - - OpenFirmware device path: - - /pci@i0cf8/scsi@7[,3]/channel@0/disk@2,3 - ^ ^ ^ ^ ^ - | | | | LUN - | | | target - | | channel (unused, fixed 0) - | PCI slot[, function] holding SCSI controller - PCI root at system bus port, PIO - - UEFI device path prefixes (dependent on the presence of a nonzero PCI - function in the OFW device path): - - PciRoot(0x0)/Pci(0x7,0x0)/Scsi(0x2,0x3) - PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3) - - - Emulated and passed-through (physical) network cards: - - OpenFirmware device path: - - /pci@i0cf8/ethernet@3[,2] - ^ ^ - | PCI slot[, function] holding Ethernet card - PCI root at system bus port, PIO - - UEFI device path prefixes (dependent on the presence of a nonzero PCI - function in the OFW device path): - - PciRoot(0x0)/Pci(0x3,0x0) - PciRoot(0x0)/Pci(0x3,0x2) - -Virtio drivers -.............. - -UEFI abstracts various types of hardware resources into protocols, and allows -firmware developers to implement those protocols in device drivers. The Virtio -Specification defines various types of virtual hardware for virtual machines. -Connecting the two specifications, OVMF provides UEFI drivers for QEMU's -virtio-block, virtio-scsi, and virtio-net devices. - -The following diagram presents the protocol and driver stack related to Virtio -devices in edk2 and OVMF. Each node in the graph identifies a protocol and/or -the edk2 driver that produces it. Nodes on the top are more abstract. - - EFI_BLOCK_IO_PROTOCOL EFI_SIMPLE_NETWORK_PROTOCOL - [OvmfPkg/VirtioBlkDxe] [OvmfPkg/VirtioNetDxe] - | | - | EFI_EXT_SCSI_PASS_THRU_PROTOCOL | - | [OvmfPkg/VirtioScsiDxe] | - | | | - +------------------------+--------------------------+ - | - VIRTIO_DEVICE_PROTOCOL - | - +---------------------+---------------------+ - | | - [OvmfPkg/VirtioPciDeviceDxe] [custom platform drivers] - | | - | | - EFI_PCI_IO_PROTOCOL [OvmfPkg/Library/VirtioMmioDeviceLib] - [MdeModulePkg/Bus/Pci/PciBusDxe] direct MMIO register access - -The top three drivers produce standard UEFI abstractions: the Block IO -Protocol, the Extended SCSI Pass Thru Protocol, and the Simple Network -Protocol, for virtio-block, virtio-scsi, and virtio-net devices, respectively. - -Comparing these device-specific virtio drivers to each other, we can determine: - -- They all conform to the UEFI Driver Model. This means that their entry point - functions don't immediately start to search for devices and to drive them, - they only register instances of the EFI_DRIVER_BINDING_PROTOCOL. The UEFI - Driver Model then enumerates devices and chains matching drivers - automatically. - -- They are as minimal as possible, while remaining correct (refer to source - code comments for details). For example, VirtioBlkDxe and VirtioScsiDxe both - support only one request in flight. - - In theory, VirtioBlkDxe could implement EFI_BLOCK_IO2_PROTOCOL, which allows - queueing. Similarly, VirtioScsiDxe does not support the non-blocking mode of - EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru(). (Which is permitted by the UEFI - specification.) Both VirtioBlkDxe and VirtioScsiDxe delegate synchronous - request handling to "OvmfPkg/Library/VirtioLib". This limitation helps keep - the implementation simple, and testing thus far seems to imply satisfactory - performance, for a virtual boot firmware. - - VirtioNetDxe cannot avoid queueing, because EFI_SIMPLE_NETWORK_PROTOCOL - requires it on the interface level. Consequently, VirtioNetDxe is - significantly more complex than VirtioBlkDxe and VirtioScsiDxe. Technical - notes are provided in "OvmfPkg/VirtioNetDxe/TechNotes.txt". - -- None of these drivers access hardware directly. Instead, the Virtio Device - Protocol (OvmfPkg/Include/Protocol/VirtioDevice.h) collects / extracts virtio - operations defined in the Virtio Specification, and these backend-independent - virtio device drivers go through the abstract VIRTIO_DEVICE_PROTOCOL. - - IMPORTANT: the VIRTIO_DEVICE_PROTOCOL is not a standard UEFI protocol. It is - internal to edk2 and not described in the UEFI specification. It should only - be used by drivers and applications that live inside the edk2 source tree. - -Currently two providers exist for VIRTIO_DEVICE_PROTOCOL: - -- The first one is the "more traditional" virtio-pci backend, implemented by - OvmfPkg/VirtioPciDeviceDxe. This driver also complies with the UEFI Driver - Model. It consumes an instance of the EFI_PCI_IO_PROTOCOL, and, if the PCI - device/function under probing appears to be a virtio device, it produces a - Virtio Device Protocol instance for it. The driver translates abstract virtio - operations to PCI accesses. - -- The second provider, the virtio-mmio backend, is a library, not a driver, - living in OvmfPkg/Library/VirtioMmioDeviceLib. This library translates - abstract virtio operations to MMIO accesses. - - The virtio-mmio backend is only a library -- rather than a standalone, UEFI - Driver Model-compliant driver -- because the type of resource it consumes, an - MMIO register block base address, is not enumerable. - - In other words, while the PCI root bridge driver and the PCI bus driver - produce instances of EFI_PCI_IO_PROTOCOL automatically, thereby enabling the - UEFI Driver Model to probe devices and stack up drivers automatically, no - such enumeration exists for MMIO register blocks. - - For this reason, VirtioMmioDeviceLib needs to be linked into thin, custom - platform drivers that dispose over this kind of information. As soon as a - driver knows about the MMIO register block base addresses, it can pass each - to the library, and then the VIRTIO_DEVICE_PROTOCOL will be instantiated - (assuming a valid virtio-mmio register block of course). From that point on - the UEFI Driver Model again takes care of the chaining. - - Typically, such a custom driver does not conform to the UEFI Driver Model - (because that would presuppose auto-enumeration for MMIO register blocks). - Hence it has the following responsibilities: - - - it shall behave as a "wrapper" UEFI driver around the library, - - - it shall know virtio-mmio base addresses, - - - in its entry point function, it shall create a new UEFI handle with an - instance of the EFI_DEVICE_PATH_PROTOCOL for each virtio-mmio device it - knows the base address for, - - - it shall call VirtioMmioInstallDevice() on those handles, with the - corresponding base addresses. - - OVMF itself does not employ VirtioMmioDeviceLib. However, the library is used - (or has been tested as Proof-of-Concept) in the following 64-bit and 32-bit - ARM emulator setups: - - - in "RTSM_VE_FOUNDATIONV8_EFI.fd" and "FVP_AARCH64_EFI.fd", on ARM Holdings' - ARM(R) v8-A Foundation Model and ARM(R) AEMv8-A Base Platform FVP - emulators, respectively: - - EFI_BLOCK_IO_PROTOCOL - [OvmfPkg/VirtioBlkDxe] - | - VIRTIO_DEVICE_PROTOCOL - [ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf] - | - [OvmfPkg/Library/VirtioMmioDeviceLib] - direct MMIO register access - - - in "RTSM_VE_CORTEX-A15_EFI.fd" and "RTSM_VE_CORTEX-A15_MPCORE_EFI.fd", on - "qemu-system-arm -M vexpress-a15": - - EFI_BLOCK_IO_PROTOCOL EFI_SIMPLE_NETWORK_PROTOCOL - [OvmfPkg/VirtioBlkDxe] [OvmfPkg/VirtioNetDxe] - | | - +------------------+---------------+ - | - VIRTIO_DEVICE_PROTOCOL - [ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf] - | - [OvmfPkg/Library/VirtioMmioDeviceLib] - direct MMIO register access - - In the above ARM / VirtioMmioDeviceLib configurations, VirtioBlkDxe was - tested with booting Linux distributions, while VirtioNetDxe was tested with - pinging public IPv4 addresses from the UEFI shell. - -Platform Driver -............... - -Sometimes, elements of persistent firmware configuration are best exposed to -the user in a friendly way. OVMF's platform driver (OvmfPkg/PlatformDxe) -presents such settings on the "OVMF Platform Configuration" dialog: - -- Press ESC on the TianoCore splash screen, -- Navigate to Device Manager | OVMF Platform Configuration. - -At the moment, OVMF's platform driver handles only one setting: the preferred -graphics resolution. This is useful for two purposes: - -- Some UEFI shell commands, like DRIVERS and DEVICES, benefit from a wide - display. Using the MODE shell command, the user can switch to a larger text - resolution (limited by the graphics resolution), and see the command output - in a more easily consumable way. - - [RHEL] The list of text modes available to the MODE command is also limited - by ConSplitterDxe (found under MdeModulePkg/Universal/Console). - ConSplitterDxe builds an intersection of text modes that are - simultaneously supported by all consoles that ConSplitterDxe - multiplexes console output to. - - In practice, the strongest text mode restriction comes from - TerminalDxe, which provides console I/O on serial ports. TerminalDxe - has a very limited built-in list of text modes, heavily pruning the - intersection built by ConSplitterDxe, and made available to the MODE - command. - - On the Red Hat Enterprise Linux 7.1 host, TerminalDxe's list of modes - has been extended with text resolutions that match the Spice QXL GPU's - common graphics resolutions. This way a "full screen" text mode should - always be available in the MODE command. - -- The other advantage of controlling the graphics resolution lies with UEFI - operating systems that don't (yet) have a native driver for QEMU's virtual - video cards -- eg. the Spice QXL GPU. Such OSes may choose to inherit the - properties of OVMF's EFI_GRAPHICS_OUTPUT_PROTOCOL (provided by - OvmfPkg/QemuVideoDxe, see later). - - Although the display can be used at runtime in such cases, by direct - framebuffer access, its properties, for example, the resolution, cannot be - modified. The platform driver allows the user to select the preferred GOP - resolution, reboot, and let the guest OS inherit that preferred resolution. - -The platform driver has three access points: the "normal" driver entry point, a -set of HII callbacks, and a GOP installation callback. - -(1) Driver entry point: the PlatformInit() function. - - (a) First, this function loads any available settings, and makes them take - effect. For the preferred graphics resolution in particular, this means - setting the following PCDs: - - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution - gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution - - These PCDs influence the GraphicsConsoleDxe driver (located under - MdeModulePkg/Universal/Console), which switches to the preferred - graphics mode, and produces EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLs on GOPs: - - EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL - [MdeModulePkg/Universal/Console/GraphicsConsoleDxe] - | - EFI_GRAPHICS_OUTPUT_PROTOCOL - [OvmfPkg/QemuVideoDxe] - | - EFI_PCI_IO_PROTOCOL - [MdeModulePkg/Bus/Pci/PciBusDxe] - - (b) Second, the driver entry point registers the user interface, including - HII callbacks. - - (c) Third, the driver entry point registers a GOP installation callback. - -(2) HII callbacks and the user interface. - - The Human Interface Infrastructure (HII) "is a set of protocols that allow - a UEFI driver to provide the ability to register user interface and - configuration content with the platform firmware". - - OVMF's platform driver: - - - provides a static, basic, visual form (PlatformForms.vfr), written in the - Visual Forms Representation language, - - - includes a UCS-16 encoded message catalog (Platform.uni), - - - includes source code that dynamically populates parts of the form, with - the help of MdeModulePkg/Library/UefiHiiLib -- this library simplifies - the handling of IFR (Internal Forms Representation) opcodes, - - - processes form actions that the user takes (Callback() function), - - - loads and saves platform configuration in a private, non-volatile - variable (ExtractConfig() and RouteConfig() functions). - - The ExtractConfig() HII callback implements the following stack of - conversions, for loading configuration and presenting it to the user: - - MultiConfigAltResp -- form engine / HII communication - ^ - | - [BlockToConfig] - | - MAIN_FORM_STATE -- binary representation of form/widget - ^ state - | - [PlatformConfigToFormState] - | - PLATFORM_CONFIG -- accessible to DXE and UEFI drivers - ^ - | - [PlatformConfigLoad] - | - UEFI non-volatile variable -- accessible to external utilities - - The layers are very similar for the reverse direction, ie. when taking - input from the user, and saving the configuration (RouteConfig() HII - callback): - - ConfigResp -- form engine / HII communication - | - [ConfigToBlock] - | - v - MAIN_FORM_STATE -- binary representation of form/widget - | state - [FormStateToPlatformConfig] - | - v - PLATFORM_CONFIG -- accessible to DXE and UEFI drivers - | - [PlatformConfigSave] - | - v - UEFI non-volatile variable -- accessible to external utilities - -(3) When the platform driver starts, a GOP may not be available yet. Thus the - driver entry point registers a callback (the GopInstalled() function) for - GOP installations. - - When the first GOP is produced (usually by QemuVideoDxe, or potentially by - a third party video driver), PlatformDxe retrieves the list of graphics - modes the GOP supports, and dynamically populates the drop-down list of - available resolutions on the form. The GOP installation callback is then - removed. - -Video driver -............ - -OvmfPkg/QemuVideoDxe is OVMF's built-in video driver. We can divide its -services in two parts: graphics output protocol (primary), and Int10h (VBE) -shim (secondary). - -(1) QemuVideoDxe conforms to the UEFI Driver Model; it produces an instance of - the EFI_GRAPHICS_OUTPUT_PROTOCOL (GOP) on each PCI display that it supports - and is connected to: - - EFI_GRAPHICS_OUTPUT_PROTOCOL - [OvmfPkg/QemuVideoDxe] - | - EFI_PCI_IO_PROTOCOL - [MdeModulePkg/Bus/Pci/PciBusDxe] - - It supports the following QEMU video cards: - - - Cirrus 5430 ("-device cirrus-vga"), - - Standard VGA ("-device VGA"), - - QXL VGA ("-device qxl-vga", "-device qxl"). - - For Cirrus the following resolutions and color depths are available: - 640x480x32, 800x600x32, 1024x768x24. On stdvga and QXL a long list of - resolutions is available. The list is filtered against the frame buffer - size during initialization. - - The size of the QXL VGA compatibility framebuffer can be changed with the - - -device qxl-vga,vgamem_mb=$NUM_MB - - QEMU option. If $NUM_MB exceeds 32, then the following is necessary - instead: - - -device qxl-vga,vgamem_mb=$NUM_MB,ram_size_mb=$((NUM_MB*2)) - - because the compatibility framebuffer can't cover more than half of PCI BAR - #0. The latter defaults to 64MB in size, and is controlled by the - "ram_size_mb" property. - -(2) When QemuVideoDxe binds the first Standard VGA or QXL VGA device, and there - is no real VGA BIOS present in the C to F segments (which could originate - from a legacy PCI option ROM -- refer to "Compatibility Support Module - (CSM)"), then QemuVideoDxe installs a minimal, "fake" VGA BIOS -- an Int10h - (VBE) "shim". - - The shim is implemented in 16-bit assembly in - "OvmfPkg/QemuVideoDxe/VbeShim.asm". The "VbeShim.sh" shell script assembles - it and formats it as a C array ("VbeShim.h") with the help of the "nasm" - utility. The driver's InstallVbeShim() function copies the shim in place - (the C segment), and fills in the VBE Info and VBE Mode Info structures. - The real-mode 10h interrupt vector is pointed to the shim's handler. - - The shim is (correctly) irrelevant and invisible for all UEFI operating - systems we know about -- except Windows Server 2008 R2 and other Windows - operating systems in that family. - - Namely, the Windows 2008 R2 SP1 (and Windows 7) UEFI guest's default video - driver dereferences the real mode Int10h vector, loads the pointed-to - handler code, and executes what it thinks to be VGA BIOS services in an - internal real-mode emulator. Consequently, video mode switching used not to - work in Windows 2008 R2 SP1 when it ran on the "pure UEFI" build of OVMF, - making the guest uninstallable. Hence the (otherwise optional, non-default) - Compatibility Support Module (CSM) ended up a requirement for running such - guests. - - The hard dependency on the sophisticated SeaBIOS CSM and the complex - supporting edk2 infrastructure, for enabling this family of guests, was - considered suboptimal by some members of the upstream community, - - [RHEL] and was certainly considered a serious maintenance disadvantage for - Red Hat Enterprise Linux 7.1 hosts. - - Thus, the shim has been collaboratively developed for the Windows 7 / - Windows Server 2008 R2 family. The shim provides a real stdvga / QXL - implementation for the few services that are in fact necessary for the - Windows 2008 R2 SP1 (and Windows 7) UEFI guest, plus some "fakes" that the - guest invokes but whose effect is not important. The only supported mode is - 1024x768x32, which is enough to install the guest and then upgrade its - video driver to the full-featured QXL XDDM one. - - The C segment is not present in the UEFI memory map prepared by OVMF. - Memory space that would cover it is never added (either in PEI, in the form - of memory resource descriptor HOBs, or in DXE, via gDS->AddMemorySpace()). - This way the handler body is invisible to all other UEFI guests, and the - rest of edk2. - - The Int10h real-mode IVT entry is covered with a Boot Services Code page, - making that too inaccessible to the rest of edk2. Due to the allocation - type, UEFI guest OSes different from the Windows Server 2008 family can - reclaim the page at zero. (The Windows 2008 family accesses that page - regardless of the allocation type.) - -Afterword ---------- - -After the bulk of this document was written in July 2014, OVMF development has -not stopped. To name two significant code contributions from the community: in -January 2015, OVMF runs on the "q35" machine type of QEMU, and it features a -driver for Xen paravirtual block devices (and another for the underlying Xen -bus). - -Furthermore, a dedicated virtualization platform has been contributed to -ArmPlatformPkg that plays a role parallel to OvmfPkg's. It targets the "virt" -machine type of qemu-system-arm and qemu-system-aarch64. Parts of OvmfPkg are -being refactored and modularized so they can be reused in -"ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc". diff --git a/SPECS/elfutils/CVE-2024-25260.patch b/SPECS/elfutils/CVE-2024-25260.patch new file mode 100644 index 0000000000..834e077aa5 --- /dev/null +++ b/SPECS/elfutils/CVE-2024-25260.patch @@ -0,0 +1,37 @@ +From c0e0ac70a6add189194581be409a0ac0eb0a971b Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Mon, 13 Nov 2023 22:38:10 +0100 +Subject: [PATCH] backends: Fix arm_machine_flag_name version string. + +arm_machine_flag_name checks the version byte and if not zero returns +a version string. There are only 5 versions defined. So check the +version byte is not larger. + + * backends/arm_machineflagname.c (arm_machine_flag_name): + Check version <= 0, otherwise return NULL. + +https://sourceware.org/bugzilla/show_bug.cgi?id=31058 + +Signed-off-by: Mark Wielaard +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://sourceware.org/git/?p=elfutils.git;a=patch;h=373f5212677235fc3ca6068b887111554790f944 +--- + backends/arm_machineflagname.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/backends/arm_machineflagname.c b/backends/arm_machineflagname.c +index e93092a..d700d5f 100644 +--- a/backends/arm_machineflagname.c ++++ b/backends/arm_machineflagname.c +@@ -48,7 +48,7 @@ arm_machine_flag_name (Elf64_Word orig, Elf64_Word *flagref) + "Version5 EABI", + }; + *flagref &= ~((Elf64_Word) EF_ARM_EABIMASK); +- return vername[version - 1]; ++ return version <= 5 ? vername[version - 1] : NULL; + } + switch (EF_ARM_EABI_VERSION (orig)) + { +-- +2.45.4 + diff --git a/SPECS/elfutils/elfutils.spec b/SPECS/elfutils/elfutils.spec index f440508069..cf20fdfb70 100644 --- a/SPECS/elfutils/elfutils.spec +++ b/SPECS/elfutils/elfutils.spec @@ -4,7 +4,7 @@ Summary: A collection of utilities and DSOs to handle compiled objects Name: elfutils Version: 0.189 -Release: 7%{?dist} +Release: 8%{?dist} License: GPLv3+ AND (GPLv2+ OR LGPLv3+) Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -17,6 +17,7 @@ Patch0: CVE-2025-1372.patch Patch1: CVE-2025-1376.patch Patch2: CVE-2025-1377.patch Patch3: CVE-2025-1352.patch +Patch4: CVE-2024-25260.patch BuildRequires: bison >= 1.875 BuildRequires: bzip2-devel @@ -283,6 +284,10 @@ fi %defattr(-,root,root) %changelog +* Mon Jan 5 2025 Lee Chee Yang - 0.189-8 +- merge from Azure Linux 3.0.20251206-3.0 +- Patch for CVE-2024-25260 + * Mon Sep 8 2025 Lee Chee Yang - 0.189-7 - merge from Azure Linux 3.0.20250910-3.0. - add patch for CVE-2025-1352 diff --git a/SPECS/expat/CVE-2024-8176.patch b/SPECS/expat/CVE-2024-8176.patch new file mode 100644 index 0000000000..47f38ef6dd --- /dev/null +++ b/SPECS/expat/CVE-2024-8176.patch @@ -0,0 +1,1398 @@ +From 35a1dea4c07cb0f13f0736d3a8821a696c27f8b1 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Thu, 20 Mar 2025 06:36:42 +0000 +Subject: [PATCH] Fix for CVE-2024-8176 + +Upstream source: https://github.com/libexpat/libexpat/pull/973 + +Signed-off-by: Kshitiz Godara +--- + Changes | 30 ++- + lib/xmlparse.c | 566 ++++++++++++++++++++++++++++++++------------ + tests/alloc_tests.c | 27 +++ + tests/basic_tests.c | 187 ++++++++++++++- + tests/handlers.c | 15 ++ + tests/handlers.h | 5 + + tests/misc_tests.c | 43 ++++ + 7 files changed, 717 insertions(+), 156 deletions(-) + +diff --git a/Changes b/Changes +index aa19f70..75c62d6 100644 +--- a/Changes ++++ b/Changes +@@ -11,7 +11,6 @@ + !! The following topics need *additional skilled C developers* to progress !! + !! in a timely manner or at all (loosely ordered by descending priority): !! + !! !! +-!! - fixing a complex non-public security issue, !! + !! - teaming up on researching and fixing future security reports and !! + !! ClusterFuzz findings with few-days-max response times in communication !! + !! in order to (1) have a sound fix ready before the end of a 90 days !! +@@ -30,6 +29,35 @@ + !! THANK YOU! Sebastian Pipping -- Berlin, 2024-03-09 !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ++ Security fixes: ++ #893 #??? CVE-2024-8176 -- Fix crash from chaining a large number ++ of entities caused by stack overflow by resolving use of ++ recursion, for all three uses of entities: ++ - general entities in character data ("&g1;") ++ - general entities in attribute values ("") ++ - parameter entities ("%p1;") ++ Known impact is (reliable and easy) denial of service: ++ CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:H/RL:O/RC:C ++ (Base Score: 7.5, Temporal Score: 7.2) ++ Please note that a layer of compression around XML can ++ significantly reduce the minimum attack payload size. ++ ++ Special thanks to: ++ Alexander Gieringer ++ Berkay Eren Ürün ++ Jann Horn ++ Mark Brand ++ Sebastian Andrzej Siewior ++ Snild Dolkow ++ Thomas Pröll ++ Tomas Korbar ++ valord577 ++ and ++ Google Project Zero ++ Linutronix ++ Red Hat ++ Siemens ++ + Release 2.6.4 Wed November 6 2024 + Security fixes: + #915 CVE-2024-50602 -- Fix crash within function XML_ResumeParser +diff --git a/lib/xmlparse.c b/lib/xmlparse.c +index a4e091e..473c791 100644 +--- a/lib/xmlparse.c ++++ b/lib/xmlparse.c +@@ -39,7 +39,7 @@ + Copyright (c) 2022 Sean McBride + Copyright (c) 2023 Owain Davies + Copyright (c) 2023-2024 Sony Corporation / Snild Dolkow +- Copyright (c) 2024 Berkay Eren Ürün ++ Copyright (c) 2024-2025 Berkay Eren Ürün + Copyright (c) 2024 Hanno Böck + Licensed under the MIT license: + +@@ -325,6 +325,10 @@ typedef struct { + const XML_Char *publicId; + const XML_Char *notation; + XML_Bool open; ++ XML_Bool hasMore; /* true if entity has not been completely processed */ ++ /* An entity can be open while being already completely processed (hasMore == ++ XML_FALSE). The reason is the delayed closing of entities until their inner ++ entities are processed and closed */ + XML_Bool is_param; + XML_Bool is_internal; /* true if declared in internal subset outside PE */ + } ENTITY; +@@ -415,6 +419,12 @@ typedef struct { + int *scaffIndex; + } DTD; + ++enum EntityType { ++ ENTITY_INTERNAL, ++ ENTITY_ATTRIBUTE, ++ ENTITY_VALUE, ++}; ++ + typedef struct open_internal_entity { + const char *internalEventPtr; + const char *internalEventEndPtr; +@@ -422,6 +432,7 @@ typedef struct open_internal_entity { + ENTITY *entity; + int startTagLevel; + XML_Bool betweenDecl; /* WFC: PE Between Declarations */ ++ enum EntityType type; + } OPEN_INTERNAL_ENTITY; + + enum XML_Account { +@@ -481,8 +492,8 @@ static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, + const char *next, const char **nextPtr, + XML_Bool haveMore, XML_Bool allowClosingDoctype, + enum XML_Account account); +-static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, +- XML_Bool betweenDecl); ++static enum XML_Error processEntity(XML_Parser parser, ENTITY *entity, ++ XML_Bool betweenDecl, enum EntityType type); + static enum XML_Error doContent(XML_Parser parser, int startTagLevel, + const ENCODING *enc, const char *start, + const char *end, const char **endPtr, +@@ -513,18 +524,22 @@ static enum XML_Error storeAttributeValue(XML_Parser parser, + const char *ptr, const char *end, + STRING_POOL *pool, + enum XML_Account account); +-static enum XML_Error appendAttributeValue(XML_Parser parser, +- const ENCODING *enc, +- XML_Bool isCdata, const char *ptr, +- const char *end, STRING_POOL *pool, +- enum XML_Account account); ++static enum XML_Error ++appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, ++ const char *ptr, const char *end, STRING_POOL *pool, ++ enum XML_Account account, const char **nextPtr); + static ATTRIBUTE_ID *getAttributeId(XML_Parser parser, const ENCODING *enc, + const char *start, const char *end); + static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType); + #if XML_GE == 1 + static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, + const char *start, const char *end, +- enum XML_Account account); ++ enum XML_Account account, ++ const char **nextPtr); ++static enum XML_Error callStoreEntityValue(XML_Parser parser, ++ const ENCODING *enc, ++ const char *start, const char *end, ++ enum XML_Account account); + #else + static enum XML_Error storeSelfEntityValue(XML_Parser parser, ENTITY *entity); + #endif +@@ -709,6 +724,10 @@ struct XML_ParserStruct { + const char *m_positionPtr; + OPEN_INTERNAL_ENTITY *m_openInternalEntities; + OPEN_INTERNAL_ENTITY *m_freeInternalEntities; ++ OPEN_INTERNAL_ENTITY *m_openAttributeEntities; ++ OPEN_INTERNAL_ENTITY *m_freeAttributeEntities; ++ OPEN_INTERNAL_ENTITY *m_openValueEntities; ++ OPEN_INTERNAL_ENTITY *m_freeValueEntities; + XML_Bool m_defaultExpandInternalEntities; + int m_tagLevel; + ENTITY *m_declEntity; +@@ -756,6 +775,7 @@ struct XML_ParserStruct { + ACCOUNTING m_accounting; + ENTITY_STATS m_entity_stats; + #endif ++ XML_Bool m_reenter; + }; + + #define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s))) +@@ -1028,7 +1048,29 @@ callProcessor(XML_Parser parser, const char *start, const char *end, + #if defined(XML_TESTING) + g_bytesScanned += (unsigned)have_now; + #endif +- const enum XML_Error ret = parser->m_processor(parser, start, end, endPtr); ++ // Run in a loop to eliminate dangerous recursion depths ++ enum XML_Error ret; ++ *endPtr = start; ++ while (1) { ++ // Use endPtr as the new start in each iteration, since it will ++ // be set to the next start point by m_processor. ++ ret = parser->m_processor(parser, *endPtr, end, endPtr); ++ ++ // Make parsing status (and in particular XML_SUSPENDED) take ++ // precedence over re-enter flag when they disagree ++ if (parser->m_parsingStatus.parsing != XML_PARSING) { ++ parser->m_reenter = XML_FALSE; ++ } ++ ++ if (! parser->m_reenter) { ++ break; ++ } ++ ++ parser->m_reenter = XML_FALSE; ++ if (ret != XML_ERROR_NONE) ++ return ret; ++ } ++ + if (ret == XML_ERROR_NONE) { + // if we consumed nothing, remember what we had on this parse attempt. + if (*endPtr == start) { +@@ -1139,6 +1181,8 @@ parserCreate(const XML_Char *encodingName, + parser->m_freeBindingList = NULL; + parser->m_freeTagList = NULL; + parser->m_freeInternalEntities = NULL; ++ parser->m_freeAttributeEntities = NULL; ++ parser->m_freeValueEntities = NULL; + + parser->m_groupSize = 0; + parser->m_groupConnector = NULL; +@@ -1241,6 +1285,8 @@ parserInit(XML_Parser parser, const XML_Char *encodingName) { + parser->m_eventEndPtr = NULL; + parser->m_positionPtr = NULL; + parser->m_openInternalEntities = NULL; ++ parser->m_openAttributeEntities = NULL; ++ parser->m_openValueEntities = NULL; + parser->m_defaultExpandInternalEntities = XML_TRUE; + parser->m_tagLevel = 0; + parser->m_tagStack = NULL; +@@ -1251,6 +1297,8 @@ parserInit(XML_Parser parser, const XML_Char *encodingName) { + parser->m_unknownEncodingData = NULL; + parser->m_parentParser = NULL; + parser->m_parsingStatus.parsing = XML_INITIALIZED; ++ // Reentry can only be triggered inside m_processor calls ++ parser->m_reenter = XML_FALSE; + #ifdef XML_DTD + parser->m_isParamEntity = XML_FALSE; + parser->m_useForeignDTD = XML_FALSE; +@@ -1310,6 +1358,24 @@ XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) { + openEntity->next = parser->m_freeInternalEntities; + parser->m_freeInternalEntities = openEntity; + } ++ /* move m_openAttributeEntities to m_freeAttributeEntities (i.e. same task but ++ * for attributes) */ ++ openEntityList = parser->m_openAttributeEntities; ++ while (openEntityList) { ++ OPEN_INTERNAL_ENTITY *openEntity = openEntityList; ++ openEntityList = openEntity->next; ++ openEntity->next = parser->m_freeAttributeEntities; ++ parser->m_freeAttributeEntities = openEntity; ++ } ++ /* move m_openValueEntities to m_freeValueEntities (i.e. same task but ++ * for value entities) */ ++ openEntityList = parser->m_openValueEntities; ++ while (openEntityList) { ++ OPEN_INTERNAL_ENTITY *openEntity = openEntityList; ++ openEntityList = openEntity->next; ++ openEntity->next = parser->m_freeValueEntities; ++ parser->m_freeValueEntities = openEntity; ++ } + moveToFreeBindingList(parser, parser->m_inheritedBindings); + FREE(parser, parser->m_unknownEncodingMem); + if (parser->m_unknownEncodingRelease) +@@ -1323,6 +1389,19 @@ XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) { + return XML_TRUE; + } + ++static XML_Bool ++parserBusy(XML_Parser parser) { ++ switch (parser->m_parsingStatus.parsing) { ++ case XML_PARSING: ++ case XML_SUSPENDED: ++ return XML_TRUE; ++ case XML_INITIALIZED: ++ case XML_FINISHED: ++ default: ++ return XML_FALSE; ++ } ++} ++ + enum XML_Status XMLCALL + XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { + if (parser == NULL) +@@ -1331,8 +1410,7 @@ XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { + XXX There's no way for the caller to determine which of the + XXX possible error cases caused the XML_STATUS_ERROR return. + */ +- if (parser->m_parsingStatus.parsing == XML_PARSING +- || parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parserBusy(parser)) + return XML_STATUS_ERROR; + + /* Get rid of any previous encoding name */ +@@ -1569,7 +1647,34 @@ XML_ParserFree(XML_Parser parser) { + entityList = entityList->next; + FREE(parser, openEntity); + } +- ++ /* free m_openAttributeEntities and m_freeAttributeEntities */ ++ entityList = parser->m_openAttributeEntities; ++ for (;;) { ++ OPEN_INTERNAL_ENTITY *openEntity; ++ if (entityList == NULL) { ++ if (parser->m_freeAttributeEntities == NULL) ++ break; ++ entityList = parser->m_freeAttributeEntities; ++ parser->m_freeAttributeEntities = NULL; ++ } ++ openEntity = entityList; ++ entityList = entityList->next; ++ FREE(parser, openEntity); ++ } ++ /* free m_openValueEntities and m_freeValueEntities */ ++ entityList = parser->m_openValueEntities; ++ for (;;) { ++ OPEN_INTERNAL_ENTITY *openEntity; ++ if (entityList == NULL) { ++ if (parser->m_freeValueEntities == NULL) ++ break; ++ entityList = parser->m_freeValueEntities; ++ parser->m_freeValueEntities = NULL; ++ } ++ openEntity = entityList; ++ entityList = entityList->next; ++ FREE(parser, openEntity); ++ } + destroyBindings(parser->m_freeBindingList, parser); + destroyBindings(parser->m_inheritedBindings, parser); + poolDestroy(&parser->m_tempPool); +@@ -1611,8 +1716,7 @@ XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) { + return XML_ERROR_INVALID_ARGUMENT; + #ifdef XML_DTD + /* block after XML_Parse()/XML_ParseBuffer() has been called */ +- if (parser->m_parsingStatus.parsing == XML_PARSING +- || parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parserBusy(parser)) + return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; + parser->m_useForeignDTD = useDTD; + return XML_ERROR_NONE; +@@ -1627,8 +1731,7 @@ XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { + if (parser == NULL) + return; + /* block after XML_Parse()/XML_ParseBuffer() has been called */ +- if (parser->m_parsingStatus.parsing == XML_PARSING +- || parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parserBusy(parser)) + return; + parser->m_ns_triplets = do_nst ? XML_TRUE : XML_FALSE; + } +@@ -1897,8 +2000,7 @@ XML_SetParamEntityParsing(XML_Parser parser, + if (parser == NULL) + return 0; + /* block after XML_Parse()/XML_ParseBuffer() has been called */ +- if (parser->m_parsingStatus.parsing == XML_PARSING +- || parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parserBusy(parser)) + return 0; + #ifdef XML_DTD + parser->m_paramEntityParsing = peParsing; +@@ -1915,8 +2017,7 @@ XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt) { + if (parser->m_parentParser) + return XML_SetHashSalt(parser->m_parentParser, hash_salt); + /* block after XML_Parse()/XML_ParseBuffer() has been called */ +- if (parser->m_parsingStatus.parsing == XML_PARSING +- || parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parserBusy(parser)) + return 0; + parser->m_hash_secret_salt = hash_salt; + return 1; +@@ -2230,6 +2331,11 @@ XML_GetBuffer(XML_Parser parser, int len) { + return parser->m_bufferEnd; + } + ++static void ++triggerReenter(XML_Parser parser) { ++ parser->m_reenter = XML_TRUE; ++} ++ + enum XML_Status XMLCALL + XML_StopParser(XML_Parser parser, XML_Bool resumable) { + if (parser == NULL) +@@ -2704,8 +2810,9 @@ static enum XML_Error PTRCALL + contentProcessor(XML_Parser parser, const char *start, const char *end, + const char **endPtr) { + enum XML_Error result = doContent( +- parser, 0, parser->m_encoding, start, end, endPtr, +- (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); ++ parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, start, end, ++ endPtr, (XML_Bool)! parser->m_parsingStatus.finalBuffer, ++ XML_ACCOUNT_DIRECT); + if (result == XML_ERROR_NONE) { + if (! storeRawNames(parser)) + return XML_ERROR_NO_MEMORY; +@@ -2793,6 +2900,11 @@ externalEntityInitProcessor3(XML_Parser parser, const char *start, + return XML_ERROR_NONE; + case XML_FINISHED: + return XML_ERROR_ABORTED; ++ case XML_PARSING: ++ if (parser->m_reenter) { ++ return XML_ERROR_UNEXPECTED_STATE; // LCOV_EXCL_LINE ++ } ++ /* Fall through */ + default: + start = next; + } +@@ -2966,7 +3078,7 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, + reportDefault(parser, enc, s, next); + break; + } +- result = processInternalEntity(parser, entity, XML_FALSE); ++ result = processEntity(parser, entity, XML_FALSE, ENTITY_INTERNAL); + if (result != XML_ERROR_NONE) + return result; + } else if (parser->m_externalEntityRefHandler) { +@@ -3092,7 +3204,9 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, + } + if ((parser->m_tagLevel == 0) + && (parser->m_parsingStatus.parsing != XML_FINISHED)) { +- if (parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parser->m_parsingStatus.parsing == XML_SUSPENDED ++ || (parser->m_parsingStatus.parsing == XML_PARSING ++ && parser->m_reenter)) + parser->m_processor = epilogProcessor; + else + return epilogProcessor(parser, next, end, nextPtr); +@@ -3153,7 +3267,9 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, + } + if ((parser->m_tagLevel == 0) + && (parser->m_parsingStatus.parsing != XML_FINISHED)) { +- if (parser->m_parsingStatus.parsing == XML_SUSPENDED) ++ if (parser->m_parsingStatus.parsing == XML_SUSPENDED ++ || (parser->m_parsingStatus.parsing == XML_PARSING ++ && parser->m_reenter)) + parser->m_processor = epilogProcessor; + else + return epilogProcessor(parser, next, end, nextPtr); +@@ -3293,6 +3409,12 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, + return XML_ERROR_NONE; + case XML_FINISHED: + return XML_ERROR_ABORTED; ++ case XML_PARSING: ++ if (parser->m_reenter) { ++ *nextPtr = next; ++ return XML_ERROR_NONE; ++ } ++ /* Fall through */ + default:; + } + } +@@ -4217,6 +4339,11 @@ doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, + return XML_ERROR_NONE; + case XML_FINISHED: + return XML_ERROR_ABORTED; ++ case XML_PARSING: ++ if (parser->m_reenter) { ++ return XML_ERROR_UNEXPECTED_STATE; // LCOV_EXCL_LINE ++ } ++ /* Fall through */ + default:; + } + } +@@ -4549,7 +4676,7 @@ entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, + } + /* found end of entity value - can store it now */ + return storeEntityValue(parser, parser->m_encoding, s, end, +- XML_ACCOUNT_DIRECT); ++ XML_ACCOUNT_DIRECT, NULL); + } else if (tok == XML_TOK_XML_DECL) { + enum XML_Error result; + result = processXmlDecl(parser, 0, start, next); +@@ -4676,7 +4803,7 @@ entityValueProcessor(XML_Parser parser, const char *s, const char *end, + break; + } + /* found end of entity value - can store it now */ +- return storeEntityValue(parser, enc, s, end, XML_ACCOUNT_DIRECT); ++ return storeEntityValue(parser, enc, s, end, XML_ACCOUNT_DIRECT, NULL); + } + start = next; + } +@@ -5119,9 +5246,9 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, + #if XML_GE == 1 + // This will store the given replacement text in + // parser->m_declEntity->textPtr. +- enum XML_Error result +- = storeEntityValue(parser, enc, s + enc->minBytesPerChar, +- next - enc->minBytesPerChar, XML_ACCOUNT_NONE); ++ enum XML_Error result = callStoreEntityValue( ++ parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar, ++ XML_ACCOUNT_NONE); + if (parser->m_declEntity) { + parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool); + parser->m_declEntity->textLen +@@ -5546,7 +5673,7 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, + enum XML_Error result; + XML_Bool betweenDecl + = (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE); +- result = processInternalEntity(parser, entity, betweenDecl); ++ result = processEntity(parser, entity, betweenDecl, ENTITY_INTERNAL); + if (result != XML_ERROR_NONE) + return result; + handleDefault = XML_FALSE; +@@ -5751,6 +5878,12 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, + return XML_ERROR_NONE; + case XML_FINISHED: + return XML_ERROR_ABORTED; ++ case XML_PARSING: ++ if (parser->m_reenter) { ++ *nextPtr = next; ++ return XML_ERROR_NONE; ++ } ++ /* Fall through */ + default: + s = next; + tok = XmlPrologTok(enc, s, end, &next); +@@ -5825,21 +5958,49 @@ epilogProcessor(XML_Parser parser, const char *s, const char *end, + return XML_ERROR_NONE; + case XML_FINISHED: + return XML_ERROR_ABORTED; ++ case XML_PARSING: ++ if (parser->m_reenter) { ++ return XML_ERROR_UNEXPECTED_STATE; // LCOV_EXCL_LINE ++ } ++ /* Fall through */ + default:; + } + } + } + + static enum XML_Error +-processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { +- const char *textStart, *textEnd; +- const char *next; +- enum XML_Error result; +- OPEN_INTERNAL_ENTITY *openEntity; ++processEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl, ++ enum EntityType type) { ++ OPEN_INTERNAL_ENTITY *openEntity, **openEntityList, **freeEntityList; ++ switch (type) { ++ case ENTITY_INTERNAL: ++ parser->m_processor = internalEntityProcessor; ++ openEntityList = &parser->m_openInternalEntities; ++ freeEntityList = &parser->m_freeInternalEntities; ++ break; ++ case ENTITY_ATTRIBUTE: ++ openEntityList = &parser->m_openAttributeEntities; ++ freeEntityList = &parser->m_freeAttributeEntities; ++ break; ++ case ENTITY_VALUE: ++ openEntityList = &parser->m_openValueEntities; ++ freeEntityList = &parser->m_freeValueEntities; ++ break; ++ /* default case serves merely as a safety net in case of a ++ * wrong entityType. Therefore we exclude the following lines ++ * from the test coverage. ++ * ++ * LCOV_EXCL_START ++ */ ++ default: ++ // Should not reach here ++ assert(0); ++ /* LCOV_EXCL_STOP */ ++ } + +- if (parser->m_freeInternalEntities) { +- openEntity = parser->m_freeInternalEntities; +- parser->m_freeInternalEntities = openEntity->next; ++ if (*freeEntityList) { ++ openEntity = *freeEntityList; ++ *freeEntityList = openEntity->next; + } else { + openEntity + = (OPEN_INTERNAL_ENTITY *)MALLOC(parser, sizeof(OPEN_INTERNAL_ENTITY)); +@@ -5847,55 +6008,34 @@ processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { + return XML_ERROR_NO_MEMORY; + } + entity->open = XML_TRUE; ++ entity->hasMore = XML_TRUE; + #if XML_GE == 1 + entityTrackingOnOpen(parser, entity, __LINE__); + #endif + entity->processed = 0; +- openEntity->next = parser->m_openInternalEntities; +- parser->m_openInternalEntities = openEntity; ++ openEntity->next = *openEntityList; ++ *openEntityList = openEntity; + openEntity->entity = entity; ++ openEntity->type = type; + openEntity->startTagLevel = parser->m_tagLevel; + openEntity->betweenDecl = betweenDecl; + openEntity->internalEventPtr = NULL; + openEntity->internalEventEndPtr = NULL; +- textStart = (const char *)entity->textPtr; +- textEnd = (const char *)(entity->textPtr + entity->textLen); +- /* Set a safe default value in case 'next' does not get set */ +- next = textStart; +- +- if (entity->is_param) { +- int tok +- = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); +- result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, +- tok, next, &next, XML_FALSE, XML_FALSE, +- XML_ACCOUNT_ENTITY_EXPANSION); +- } else { +- result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, +- textStart, textEnd, &next, XML_FALSE, +- XML_ACCOUNT_ENTITY_EXPANSION); +- } + +- if (result == XML_ERROR_NONE) { +- if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { +- entity->processed = (int)(next - textStart); +- parser->m_processor = internalEntityProcessor; +- } else if (parser->m_openInternalEntities->entity == entity) { +-#if XML_GE == 1 +- entityTrackingOnClose(parser, entity, __LINE__); +-#endif /* XML_GE == 1 */ +- entity->open = XML_FALSE; +- parser->m_openInternalEntities = openEntity->next; +- /* put openEntity back in list of free instances */ +- openEntity->next = parser->m_freeInternalEntities; +- parser->m_freeInternalEntities = openEntity; +- } ++ // Only internal entities make use of the reenter flag ++ // therefore no need to set it for other entity types ++ if (type == ENTITY_INTERNAL) { ++ triggerReenter(parser); + } +- return result; ++ return XML_ERROR_NONE; + } + + static enum XML_Error PTRCALL + internalEntityProcessor(XML_Parser parser, const char *s, const char *end, + const char **nextPtr) { ++ UNUSED_P(s); ++ UNUSED_P(end); ++ UNUSED_P(nextPtr); + ENTITY *entity; + const char *textStart, *textEnd; + const char *next; +@@ -5905,68 +6045,67 @@ internalEntityProcessor(XML_Parser parser, const char *s, const char *end, + return XML_ERROR_UNEXPECTED_STATE; + + entity = openEntity->entity; +- textStart = ((const char *)entity->textPtr) + entity->processed; +- textEnd = (const char *)(entity->textPtr + entity->textLen); +- /* Set a safe default value in case 'next' does not get set */ +- next = textStart; +- +- if (entity->is_param) { +- int tok +- = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); +- result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, +- tok, next, &next, XML_FALSE, XML_TRUE, +- XML_ACCOUNT_ENTITY_EXPANSION); +- } else { +- result = doContent(parser, openEntity->startTagLevel, +- parser->m_internalEncoding, textStart, textEnd, &next, +- XML_FALSE, XML_ACCOUNT_ENTITY_EXPANSION); +- } + +- if (result != XML_ERROR_NONE) +- return result; ++ // This will return early ++ if (entity->hasMore) { ++ textStart = ((const char *)entity->textPtr) + entity->processed; ++ textEnd = (const char *)(entity->textPtr + entity->textLen); ++ /* Set a safe default value in case 'next' does not get set */ ++ next = textStart; ++ ++ if (entity->is_param) { ++ int tok ++ = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); ++ result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, ++ tok, next, &next, XML_FALSE, XML_FALSE, ++ XML_ACCOUNT_ENTITY_EXPANSION); ++ } else { ++ result = doContent(parser, openEntity->startTagLevel, ++ parser->m_internalEncoding, textStart, textEnd, &next, ++ XML_FALSE, XML_ACCOUNT_ENTITY_EXPANSION); ++ } ++ ++ if (result != XML_ERROR_NONE) ++ return result; ++ // Check if entity is complete, if not, mark down how much of it is ++ // processed ++ if (textEnd != next ++ && (parser->m_parsingStatus.parsing == XML_SUSPENDED ++ || (parser->m_parsingStatus.parsing == XML_PARSING ++ && parser->m_reenter))) { ++ entity->processed = (int)(next - (const char *)entity->textPtr); ++ return result; ++ } + +- if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { +- entity->processed = (int)(next - (const char *)entity->textPtr); ++ // Entity is complete. We cannot close it here since we need to first ++ // process its possible inner entities (which are added to the ++ // m_openInternalEntities during doProlog or doContent calls above) ++ entity->hasMore = XML_FALSE; ++ triggerReenter(parser); + return result; +- } ++ } // End of entity processing, "if" block will return here + ++ // Remove fully processed openEntity from open entity list. + #if XML_GE == 1 + entityTrackingOnClose(parser, entity, __LINE__); + #endif ++ // openEntity is m_openInternalEntities' head, as we set it at the start of ++ // this function and we skipped doProlog and doContent calls with hasMore set ++ // to false. This means we can directly remove the head of ++ // m_openInternalEntities ++ assert(parser->m_openInternalEntities == openEntity); + entity->open = XML_FALSE; +- parser->m_openInternalEntities = openEntity->next; ++ parser->m_openInternalEntities = parser->m_openInternalEntities->next; ++ + /* put openEntity back in list of free instances */ + openEntity->next = parser->m_freeInternalEntities; + parser->m_freeInternalEntities = openEntity; + +- // If there are more open entities we want to stop right here and have the +- // upcoming call to XML_ResumeParser continue with entity content, or it would +- // be ignored altogether. +- if (parser->m_openInternalEntities != NULL +- && parser->m_parsingStatus.parsing == XML_SUSPENDED) { +- return XML_ERROR_NONE; +- } +- +- if (entity->is_param) { +- int tok; +- parser->m_processor = prologProcessor; +- tok = XmlPrologTok(parser->m_encoding, s, end, &next); +- return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, +- (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, +- XML_ACCOUNT_DIRECT); +- } else { +- parser->m_processor = contentProcessor; +- /* see externalEntityContentProcessor vs contentProcessor */ +- result = doContent(parser, parser->m_parentParser ? 1 : 0, +- parser->m_encoding, s, end, nextPtr, +- (XML_Bool)! parser->m_parsingStatus.finalBuffer, +- XML_ACCOUNT_DIRECT); +- if (result == XML_ERROR_NONE) { +- if (! storeRawNames(parser)) +- return XML_ERROR_NO_MEMORY; +- } +- return result; ++ if (parser->m_openInternalEntities == NULL) { ++ parser->m_processor = entity->is_param ? prologProcessor : contentProcessor; + } ++ triggerReenter(parser); ++ return XML_ERROR_NONE; + } + + static enum XML_Error PTRCALL +@@ -5982,8 +6121,70 @@ static enum XML_Error + storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + const char *ptr, const char *end, STRING_POOL *pool, + enum XML_Account account) { +- enum XML_Error result +- = appendAttributeValue(parser, enc, isCdata, ptr, end, pool, account); ++ const char *next = ptr; ++ enum XML_Error result = XML_ERROR_NONE; ++ ++ while (1) { ++ if (! parser->m_openAttributeEntities) { ++ result = appendAttributeValue(parser, enc, isCdata, next, end, pool, ++ account, &next); ++ } else { ++ OPEN_INTERNAL_ENTITY *const openEntity = parser->m_openAttributeEntities; ++ if (! openEntity) ++ return XML_ERROR_UNEXPECTED_STATE; ++ ++ ENTITY *const entity = openEntity->entity; ++ const char *const textStart ++ = ((const char *)entity->textPtr) + entity->processed; ++ const char *const textEnd ++ = (const char *)(entity->textPtr + entity->textLen); ++ /* Set a safe default value in case 'next' does not get set */ ++ const char *nextInEntity = textStart; ++ if (entity->hasMore) { ++ result = appendAttributeValue( ++ parser, parser->m_internalEncoding, isCdata, textStart, textEnd, ++ pool, XML_ACCOUNT_ENTITY_EXPANSION, &nextInEntity); ++ if (result != XML_ERROR_NONE) ++ break; ++ // Check if entity is complete, if not, mark down how much of it is ++ // processed. A XML_SUSPENDED check here is not required as ++ // appendAttributeValue will never suspend the parser. ++ if (textEnd != nextInEntity) { ++ entity->processed ++ = (int)(nextInEntity - (const char *)entity->textPtr); ++ continue; ++ } ++ ++ // Entity is complete. We cannot close it here since we need to first ++ // process its possible inner entities (which are added to the ++ // m_openAttributeEntities during appendAttributeValue) ++ entity->hasMore = XML_FALSE; ++ continue; ++ } // End of entity processing, "if" block skips the rest ++ ++ // Remove fully processed openEntity from open entity list. ++#if XML_GE == 1 ++ entityTrackingOnClose(parser, entity, __LINE__); ++#endif ++ // openEntity is m_openAttributeEntities' head, since we set it at the ++ // start of this function and because we skipped appendAttributeValue call ++ // with hasMore set to false. This means we can directly remove the head ++ // of m_openAttributeEntities ++ assert(parser->m_openAttributeEntities == openEntity); ++ entity->open = XML_FALSE; ++ parser->m_openAttributeEntities = parser->m_openAttributeEntities->next; ++ ++ /* put openEntity back in list of free instances */ ++ openEntity->next = parser->m_freeAttributeEntities; ++ parser->m_freeAttributeEntities = openEntity; ++ } ++ ++ // Break if an error occurred or there is nothing left to process ++ if (result || (parser->m_openAttributeEntities == NULL && end == next)) { ++ break; ++ } ++ } ++ + if (result) + return result; + if (! isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) +@@ -5996,7 +6197,7 @@ storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + static enum XML_Error + appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + const char *ptr, const char *end, STRING_POOL *pool, +- enum XML_Account account) { ++ enum XML_Account account, const char **nextPtr) { + DTD *const dtd = parser->m_dtd; /* save one level of indirection */ + #ifndef XML_DTD + UNUSED_P(account); +@@ -6014,6 +6215,9 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + #endif + switch (tok) { + case XML_TOK_NONE: ++ if (nextPtr) { ++ *nextPtr = next; ++ } + return XML_ERROR_NONE; + case XML_TOK_INVALID: + if (enc == parser->m_encoding) +@@ -6154,21 +6358,11 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; + } else { + enum XML_Error result; +- const XML_Char *textEnd = entity->textPtr + entity->textLen; +- entity->open = XML_TRUE; +-#if XML_GE == 1 +- entityTrackingOnOpen(parser, entity, __LINE__); +-#endif +- result = appendAttributeValue(parser, parser->m_internalEncoding, +- isCdata, (const char *)entity->textPtr, +- (const char *)textEnd, pool, +- XML_ACCOUNT_ENTITY_EXPANSION); +-#if XML_GE == 1 +- entityTrackingOnClose(parser, entity, __LINE__); +-#endif +- entity->open = XML_FALSE; +- if (result) +- return result; ++ result = processEntity(parser, entity, XML_FALSE, ENTITY_ATTRIBUTE); ++ if ((result == XML_ERROR_NONE) && (nextPtr != NULL)) { ++ *nextPtr = next; ++ } ++ return result; + } + } break; + default: +@@ -6197,7 +6391,7 @@ appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, + static enum XML_Error + storeEntityValue(XML_Parser parser, const ENCODING *enc, + const char *entityTextPtr, const char *entityTextEnd, +- enum XML_Account account) { ++ enum XML_Account account, const char **nextPtr) { + DTD *const dtd = parser->m_dtd; /* save one level of indirection */ + STRING_POOL *pool = &(dtd->entityValuePool); + enum XML_Error result = XML_ERROR_NONE; +@@ -6215,8 +6409,9 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc, + return XML_ERROR_NO_MEMORY; + } + ++ const char *next; + for (;;) { +- const char *next ++ next + = entityTextPtr; /* XmlEntityValueTok doesn't always set the last arg */ + int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); + +@@ -6278,16 +6473,8 @@ storeEntityValue(XML_Parser parser, const ENCODING *enc, + } else + dtd->keepProcessing = dtd->standalone; + } else { +- entity->open = XML_TRUE; +- entityTrackingOnOpen(parser, entity, __LINE__); +- result = storeEntityValue( +- parser, parser->m_internalEncoding, (const char *)entity->textPtr, +- (const char *)(entity->textPtr + entity->textLen), +- XML_ACCOUNT_ENTITY_EXPANSION); +- entityTrackingOnClose(parser, entity, __LINE__); +- entity->open = XML_FALSE; +- if (result) +- goto endEntityValue; ++ result = processEntity(parser, entity, XML_FALSE, ENTITY_VALUE); ++ goto endEntityValue; + } + break; + } +@@ -6375,6 +6562,81 @@ endEntityValue: + # ifdef XML_DTD + parser->m_prologState.inEntityValue = oldInEntityValue; + # endif /* XML_DTD */ ++ // If 'nextPtr' is given, it should be updated during the processing ++ if (nextPtr != NULL) { ++ *nextPtr = next; ++ } ++ return result; ++} ++ ++static enum XML_Error ++callStoreEntityValue(XML_Parser parser, const ENCODING *enc, ++ const char *entityTextPtr, const char *entityTextEnd, ++ enum XML_Account account) { ++ const char *next = entityTextPtr; ++ enum XML_Error result = XML_ERROR_NONE; ++ while (1) { ++ if (! parser->m_openValueEntities) { ++ result ++ = storeEntityValue(parser, enc, next, entityTextEnd, account, &next); ++ } else { ++ OPEN_INTERNAL_ENTITY *const openEntity = parser->m_openValueEntities; ++ if (! openEntity) ++ return XML_ERROR_UNEXPECTED_STATE; ++ ++ ENTITY *const entity = openEntity->entity; ++ const char *const textStart ++ = ((const char *)entity->textPtr) + entity->processed; ++ const char *const textEnd ++ = (const char *)(entity->textPtr + entity->textLen); ++ /* Set a safe default value in case 'next' does not get set */ ++ const char *nextInEntity = textStart; ++ if (entity->hasMore) { ++ result = storeEntityValue(parser, parser->m_internalEncoding, textStart, ++ textEnd, XML_ACCOUNT_ENTITY_EXPANSION, ++ &nextInEntity); ++ if (result != XML_ERROR_NONE) ++ break; ++ // Check if entity is complete, if not, mark down how much of it is ++ // processed. A XML_SUSPENDED check here is not required as ++ // appendAttributeValue will never suspend the parser. ++ if (textEnd != nextInEntity) { ++ entity->processed ++ = (int)(nextInEntity - (const char *)entity->textPtr); ++ continue; ++ } ++ ++ // Entity is complete. We cannot close it here since we need to first ++ // process its possible inner entities (which are added to the ++ // m_openValueEntities during storeEntityValue) ++ entity->hasMore = XML_FALSE; ++ continue; ++ } // End of entity processing, "if" block skips the rest ++ ++ // Remove fully processed openEntity from open entity list. ++# if XML_GE == 1 ++ entityTrackingOnClose(parser, entity, __LINE__); ++# endif ++ // openEntity is m_openValueEntities' head, since we set it at the ++ // start of this function and because we skipped storeEntityValue call ++ // with hasMore set to false. This means we can directly remove the head ++ // of m_openValueEntities ++ assert(parser->m_openValueEntities == openEntity); ++ entity->open = XML_FALSE; ++ parser->m_openValueEntities = parser->m_openValueEntities->next; ++ ++ /* put openEntity back in list of free instances */ ++ openEntity->next = parser->m_freeValueEntities; ++ parser->m_freeValueEntities = openEntity; ++ } ++ ++ // Break if an error occurred or there is nothing left to process ++ if (result ++ || (parser->m_openValueEntities == NULL && entityTextEnd == next)) { ++ break; ++ } ++ } ++ + return result; + } + +diff --git a/tests/alloc_tests.c b/tests/alloc_tests.c +index e5d46eb..12ea3b2 100644 +--- a/tests/alloc_tests.c ++++ b/tests/alloc_tests.c +@@ -19,6 +19,7 @@ + Copyright (c) 2020 Tim Gates + Copyright (c) 2021 Donghee Na + Copyright (c) 2023 Sony Corporation / Snild Dolkow ++ Copyright (c) 2025 Berkay Eren Ürün + Licensed under the MIT license: + + Permission is hereby granted, free of charge, to any person obtaining +@@ -450,6 +451,31 @@ START_TEST(test_alloc_internal_entity) { + } + END_TEST + ++START_TEST(test_alloc_parameter_entity) { ++ const char *text = "\">" ++ "%param1;" ++ "]> &internal;content"; ++ int i; ++ const int alloc_test_max_repeats = 30; ++ ++ for (i = 0; i < alloc_test_max_repeats; i++) { ++ g_allocation_count = i; ++ XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS); ++ if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE) ++ != XML_STATUS_ERROR) ++ break; ++ alloc_teardown(); ++ alloc_setup(); ++ } ++ g_allocation_count = -1; ++ if (i == 0) ++ fail("Parameter entity processed despite duff allocator"); ++ if (i == alloc_test_max_repeats) ++ fail("Parameter entity not processed at max allocation count"); ++} ++END_TEST ++ + /* Test the robustness against allocation failure of element handling + * Based on test_dtd_default_handling(). + */ +@@ -2079,6 +2105,7 @@ make_alloc_test_case(Suite *s) { + tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_external_entity); + tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_ext_entity_set_encoding); + tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_internal_entity); ++ tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_parameter_entity); + tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_dtd_default_handling); + tcase_add_test(tc_alloc, test_alloc_explicit_encoding); + tcase_add_test(tc_alloc, test_alloc_set_base); +diff --git a/tests/basic_tests.c b/tests/basic_tests.c +index d38b8fd..f0025fc 100644 +--- a/tests/basic_tests.c ++++ b/tests/basic_tests.c +@@ -10,7 +10,7 @@ + Copyright (c) 2003 Greg Stein + Copyright (c) 2005-2007 Steven Solie + Copyright (c) 2005-2012 Karl Waclawek +- Copyright (c) 2016-2024 Sebastian Pipping ++ Copyright (c) 2016-2025 Sebastian Pipping + Copyright (c) 2017-2022 Rhodri James + Copyright (c) 2017 Joe Orton + Copyright (c) 2017 José Gutiérrez de la Concha +@@ -19,6 +19,7 @@ + Copyright (c) 2020 Tim Gates + Copyright (c) 2021 Donghee Na + Copyright (c) 2023-2024 Sony Corporation / Snild Dolkow ++ Copyright (c) 2024-2025 Berkay Eren Ürün + Licensed under the MIT license: + + Permission is hereby granted, free of charge, to any person obtaining +@@ -3960,7 +3961,7 @@ START_TEST(test_skipped_null_loaded_ext_entity) { + = {"\n" + "\n" + "%pe2;\n", +- external_entity_null_loader}; ++ external_entity_null_loader, NULL}; + + XML_SetUserData(g_parser, &test_data); + XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS); +@@ -3978,7 +3979,7 @@ START_TEST(test_skipped_unloaded_ext_entity) { + = {"\n" + "\n" + "%pe2;\n", +- NULL}; ++ NULL, NULL}; + + XML_SetUserData(g_parser, &test_data); + XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS); +@@ -5278,6 +5279,151 @@ START_TEST(test_pool_integrity_with_unfinished_attr) { + } + END_TEST + ++/* Test a possible early return location in internalEntityProcessor */ ++START_TEST(test_entity_ref_no_elements) { ++ const char *const text = "\n" ++ "]> &e1;"; // intentionally missing newline ++ ++ XML_Parser parser = XML_ParserCreate(NULL); ++ assert_true(_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE) ++ == XML_STATUS_ERROR); ++ assert_true(XML_GetErrorCode(parser) == XML_ERROR_NO_ELEMENTS); ++ XML_ParserFree(parser); ++} ++END_TEST ++ ++/* Tests if chained entity references lead to unbounded recursion */ ++START_TEST(test_deep_nested_entity) { ++ const size_t N_LINES = 60000; ++ const size_t SIZE_PER_LINE = 50; ++ ++ char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE); ++ if (text == NULL) { ++ fail("malloc failed"); ++ } ++ ++ char *textPtr = text; ++ ++ // Create the XML ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, ++ "\n"); ++ ++ for (size_t i = 1; i < N_LINES; ++i) { ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, " \n", ++ (long unsigned)i, (long unsigned)(i - 1)); ++ } ++ ++ snprintf(textPtr, SIZE_PER_LINE, "]> &s%lu;\n", ++ (long unsigned)(N_LINES - 1)); ++ ++ const XML_Char *const expected = XCS("deepText"); ++ ++ CharData storage; ++ CharData_Init(&storage); ++ ++ XML_Parser parser = XML_ParserCreate(NULL); ++ ++ XML_SetCharacterDataHandler(parser, accumulate_characters); ++ XML_SetUserData(parser, &storage); ++ ++ if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE) ++ == XML_STATUS_ERROR) ++ xml_failure(parser); ++ ++ CharData_CheckXMLChars(&storage, expected); ++ XML_ParserFree(parser); ++ free(text); ++} ++END_TEST ++ ++/* Tests if chained entity references in attributes ++lead to unbounded recursion */ ++START_TEST(test_deep_nested_attribute_entity) { ++ const size_t N_LINES = 60000; ++ const size_t SIZE_PER_LINE = 100; ++ ++ char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE); ++ if (text == NULL) { ++ fail("malloc failed"); ++ } ++ ++ char *textPtr = text; ++ ++ // Create the XML ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, ++ "\n"); ++ ++ for (size_t i = 1; i < N_LINES; ++i) { ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, " \n", ++ (long unsigned)i, (long unsigned)(i - 1)); ++ } ++ ++ snprintf(textPtr, SIZE_PER_LINE, "]> mainText\n", ++ (long unsigned)(N_LINES - 1)); ++ ++ AttrInfo doc_info[] = {{XCS("name"), XCS("deepText")}, {NULL, NULL}}; ++ ElementInfo info[] = {{XCS("foo"), 1, NULL, NULL}, {NULL, 0, NULL, NULL}}; ++ info[0].attributes = doc_info; ++ ++ XML_Parser parser = XML_ParserCreate(NULL); ++ ParserAndElementInfo parserPlusElemenInfo = {parser, info}; ++ ++ XML_SetStartElementHandler(parser, counting_start_element_handler); ++ XML_SetUserData(parser, &parserPlusElemenInfo); ++ ++ if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE) ++ == XML_STATUS_ERROR) ++ xml_failure(parser); ++ ++ XML_ParserFree(parser); ++ free(text); ++} ++END_TEST ++ ++START_TEST(test_deep_nested_entity_delayed_interpretation) { ++ const size_t N_LINES = 70000; ++ const size_t SIZE_PER_LINE = 100; ++ ++ char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE); ++ if (text == NULL) { ++ fail("malloc failed"); ++ } ++ ++ char *textPtr = text; ++ ++ // Create the XML ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, ++ "\n"); ++ ++ for (size_t i = 1; i < N_LINES; ++i) { ++ textPtr += snprintf(textPtr, SIZE_PER_LINE, ++ " \n", (long unsigned)i, ++ (long unsigned)(i - 1)); ++ } ++ ++ snprintf(textPtr, SIZE_PER_LINE, ++ " \">\n" ++ " %%define_g;\n" ++ "]>\n" ++ "\n", ++ (long unsigned)(N_LINES - 1)); ++ ++ XML_Parser parser = XML_ParserCreate(NULL); ++ ++ XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); ++ if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE) ++ == XML_STATUS_ERROR) ++ xml_failure(parser); ++ ++ XML_ParserFree(parser); ++ free(text); ++} ++END_TEST ++ + START_TEST(test_nested_entity_suspend) { + const char *const text = "'>\n" +@@ -5308,6 +5454,35 @@ START_TEST(test_nested_entity_suspend) { + } + END_TEST + ++START_TEST(test_nested_entity_suspend_2) { ++ const char *const text = "\n" ++ " \n" ++ " \n" ++ "]>\n" ++ "&ge3;"; ++ const XML_Char *const expected = XCS("head3") XCS("head2") XCS("head1") ++ XCS("Z") XCS("tail1") XCS("tail2") XCS("tail3"); ++ CharData storage; ++ CharData_Init(&storage); ++ XML_Parser parser = XML_ParserCreate(NULL); ++ ParserPlusStorage parserPlusStorage = {parser, &storage}; ++ ++ XML_SetCharacterDataHandler(parser, accumulate_char_data_and_suspend); ++ XML_SetUserData(parser, &parserPlusStorage); ++ ++ enum XML_Status status = XML_Parse(parser, text, (int)strlen(text), XML_TRUE); ++ while (status == XML_STATUS_SUSPENDED) { ++ status = XML_ResumeParser(parser); ++ } ++ if (status != XML_STATUS_OK) ++ xml_failure(parser); ++ ++ CharData_CheckXMLChars(&storage, expected); ++ XML_ParserFree(parser); ++} ++END_TEST ++ + /* Regression test for quadratic parsing on large tokens */ + START_TEST(test_big_tokens_scale_linearly) { + const struct { +@@ -6147,7 +6322,13 @@ make_basic_test_case(Suite *s) { + tcase_add_test(tc_basic, test_empty_element_abort); + tcase_add_test__ifdef_xml_dtd(tc_basic, + test_pool_integrity_with_unfinished_attr); ++ tcase_add_test__if_xml_ge(tc_basic, test_entity_ref_no_elements); ++ tcase_add_test__if_xml_ge(tc_basic, test_deep_nested_entity); ++ tcase_add_test__if_xml_ge(tc_basic, test_deep_nested_attribute_entity); ++ tcase_add_test__if_xml_ge(tc_basic, ++ test_deep_nested_entity_delayed_interpretation); + tcase_add_test__if_xml_ge(tc_basic, test_nested_entity_suspend); ++ tcase_add_test__if_xml_ge(tc_basic, test_nested_entity_suspend_2); + tcase_add_test(tc_basic, test_big_tokens_scale_linearly); + tcase_add_test(tc_basic, test_set_reparse_deferral); + tcase_add_test(tc_basic, test_reparse_deferral_is_inherited); +diff --git a/tests/handlers.c b/tests/handlers.c +index 0211985..bdb5b0e 100644 +--- a/tests/handlers.c ++++ b/tests/handlers.c +@@ -1882,6 +1882,21 @@ accumulate_entity_decl(void *userData, const XML_Char *entityName, + CharData_AppendXMLChars(storage, XCS("\n"), 1); + } + ++ ++void XMLCALL ++accumulate_char_data_and_suspend(void *userData, const XML_Char *s, int len) { ++ ParserPlusStorage *const parserPlusStorage = (ParserPlusStorage *)userData; ++ ++ CharData_AppendXMLChars(parserPlusStorage->storage, s, len); ++ ++ for (int i = 0; i < len; i++) { ++ if (s[i] == 'Z') { ++ XML_StopParser(parserPlusStorage->parser, /*resumable=*/XML_TRUE); ++ break; ++ } ++ } ++} ++ + void XMLCALL + accumulate_start_element(void *userData, const XML_Char *name, + const XML_Char **atts) { +diff --git a/tests/handlers.h b/tests/handlers.h +index 8850bb9..4d6a08d 100644 +--- a/tests/handlers.h ++++ b/tests/handlers.h +@@ -325,6 +325,7 @@ extern int XMLCALL external_entity_devaluer(XML_Parser parser, + typedef struct ext_hdlr_data { + const char *parse_text; + XML_ExternalEntityRefHandler handler; ++ CharData *storage; + } ExtHdlrData; + + extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser, +@@ -569,6 +570,10 @@ extern void XMLCALL accumulate_entity_decl( + const XML_Char *systemId, const XML_Char *publicId, + const XML_Char *notationName); + ++extern void XMLCALL accumulate_char_data_and_suspend(void *userData, ++ const XML_Char *s, ++ int len); ++ + extern void XMLCALL accumulate_start_element(void *userData, + const XML_Char *name, + const XML_Char **atts); +diff --git a/tests/misc_tests.c b/tests/misc_tests.c +index 9afe092..f9a78f6 100644 +--- a/tests/misc_tests.c ++++ b/tests/misc_tests.c +@@ -59,6 +59,9 @@ + #include "handlers.h" + #include "misc_tests.h" + ++void XMLCALL accumulate_characters_ext_handler(void *userData, ++ const XML_Char *s, int len); ++ + /* Test that a failure to allocate the parser structure fails gracefully */ + START_TEST(test_misc_alloc_create_parser) { + XML_Memory_Handling_Suite memsuite = {duff_allocator, realloc, free}; +@@ -519,6 +522,45 @@ START_TEST(test_misc_stopparser_rejects_unstarted_parser) { + } + END_TEST + ++/* Adaptation of accumulate_characters that takes ExtHdlrData input to work with ++ * test_renter_loop_finite_content below */ ++void XMLCALL ++accumulate_characters_ext_handler(void *userData, const XML_Char *s, int len) { ++ ExtHdlrData *const test_data = (ExtHdlrData *)userData; ++ CharData_AppendXMLChars(test_data->storage, s, len); ++} ++ ++/* Test that internalEntityProcessor does not re-enter forever; ++ * based on files tests/xmlconf/xmltest/valid/ext-sa/012.{xml,ent} */ ++START_TEST(test_renter_loop_finite_content) { ++ CharData storage; ++ CharData_Init(&storage); ++ const char *const text = "\n" ++ "\n" ++ "\n" ++ "\n" ++ "\n" ++ "\n" ++ "]>\n" ++ "&e1;\n"; ++ ExtHdlrData test_data = {"&e4;\n", external_entity_null_loader, &storage}; ++ const XML_Char *const expected = XCS("(e5)\n"); ++ ++ XML_Parser parser = XML_ParserCreate(NULL); ++ assert_true(parser != NULL); ++ XML_SetUserData(parser, &test_data); ++ XML_SetExternalEntityRefHandler(parser, external_entity_oneshot_loader); ++ XML_SetCharacterDataHandler(parser, accumulate_characters_ext_handler); ++ if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE) ++ == XML_STATUS_ERROR) ++ xml_failure(parser); ++ ++ CharData_CheckXMLChars(&storage, expected); ++ XML_ParserFree(parser); ++} ++END_TEST ++ + void + make_miscellaneous_test_case(Suite *s) { + TCase *tc_misc = tcase_create("miscellaneous tests"); +@@ -545,4 +587,5 @@ make_miscellaneous_test_case(Suite *s) { + tcase_add_test(tc_misc, test_misc_char_handler_stop_without_leak); + tcase_add_test(tc_misc, test_misc_resumeparser_not_crashing); + tcase_add_test(tc_misc, test_misc_stopparser_rejects_unstarted_parser); ++ tcase_add_test__if_xml_ge(tc_misc, test_renter_loop_finite_content); + } +-- +2.48.1.431.g5a526e5e18 + diff --git a/SPECS/expat/CVE-2025-59375.patch b/SPECS/expat/CVE-2025-59375.patch new file mode 100644 index 0000000000..23b0c12c36 --- /dev/null +++ b/SPECS/expat/CVE-2025-59375.patch @@ -0,0 +1,1691 @@ +From 0872c189db6e457084fca335662a9cb49e8ec4c7 Mon Sep 17 00:00:00 2001 +From: Sebastian Pipping +Date: Mon, 1 Sep 2025 18:06:59 +0200 + +Upstream Patch Reference: https://patch-diff.githubusercontent.com/raw/libexpat/libexpat/pull/1034.diff.patch +Upstream PR: https://github.com/libexpat/libexpat/pull/1034 + +Modified patch to apply to AzureLinux +Modified by: akhila-guruju +Date: Mon, 22 Sep 2025 11:33:11 +0000 +Subject: [PATCH] Address CVE-2025-59375 + +--- + doc/reference.html | 118 +++++++- + doc/xmlwf.1 | 30 +- + doc/xmlwf.xml | 26 +- + fuzz/xml_parse_fuzzer.c | 14 +- + fuzz/xml_parsebuffer_fuzzer.c | 14 +- + lib/expat.h | 15 +- + lib/internal.h | 8 + + lib/libexpat.def.cmake | 3 + + lib/xmlparse.c | 521 ++++++++++++++++++++++++++++------ + tests/alloc_tests.c | 214 ++++++++++++++ + tests/basic_tests.c | 4 + + tests/nsalloc_tests.c | 5 + + xmlwf/xmlwf.c | 11 +- + xmlwf/xmlwf_helpgen.py | 3 + + 14 files changed, 874 insertions(+), 112 deletions(-) + +diff --git a/doc/reference.html b/doc/reference.html +index c2ae9bb..8f14b01 100644 +--- a/doc/reference.html ++++ b/doc/reference.html +@@ -157,6 +157,8 @@ interface.

+ + +@@ -1900,7 +1902,7 @@ struct XML_cp { +

Sets a handler for element declarations in a DTD. The handler gets + called with the name of the element in the declaration and a pointer + to a structure that contains the element model. It's the user code's +-responsibility to free model when finished with it. See ++responsibility to free model when finished with via a call to + XML_FreeContentModel. + There is no need to free the model from the handler, it can be kept + around and freed at a later stage.

+@@ -2262,6 +2264,120 @@ XML_SetBillionLaughsAttackProtectionActivationThreshold(XML_Parser p, +

+ + ++

XML_SetAllocTrackerMaximumAmplification

++
++/* Added in Expat 2.7.2. */
++XML_Bool
++XML_SetAllocTrackerMaximumAmplification(XML_Parser p,
++                                        float maximumAmplificationFactor);
++
++
++

++ Sets the maximum tolerated amplification factor ++ between direct input and bytes of dynamic memory allocated ++ (default: 100.0) ++ of parser p to maximumAmplificationFactor, and ++ returns XML_TRUE upon success and XML_FALSE upon error. ++

++ ++

++ Note: ++ There are three types of allocations that intentionally bypass tracking and limiting: ++

++ ++ ++

The amplification factor is calculated as ..

++
amplification := allocated / direct
++

++ .. while parsing, whereas ++ direct is the number of bytes read from the primary document in parsing and ++ allocated is the number of bytes of dynamic memory allocated in the parser hierarchy. ++

++ ++

For a call to XML_SetAllocTrackerMaximumAmplification to succeed:

++
    ++
  • parser p must be a non-NULL root parser (without any parent parsers) and
  • ++
  • maximumAmplificationFactor must be non-NaN and greater than or equal to 1.0.
  • ++
++ ++

++ Note: ++ If you ever need to increase this value for non-attack payload, ++ please file a bug report. ++

++ ++

++ Note: ++ Amplifications factors greater than 100 can been observed near the start of parsing ++ even with benign files in practice. ++ ++ So if you do reduce the maximum allowed amplification, ++ please make sure that the activation threshold is still big enough ++ to not end up with undesired false positives (i.e. benign files being rejected). ++

++
++ ++

XML_SetAllocTrackerActivationThreshold

++
++/* Added in Expat 2.7.2. */
++XML_Bool
++XML_SetAllocTrackerActivationThreshold(XML_Parser p,
++                                       unsigned long long activationThresholdBytes);
++
++
++

++ Sets number of allocated bytes of dynamic memory ++ needed to activate protection against disproportionate use of RAM ++ (default: 64 MiB) ++ of parser p to activationThresholdBytes, and ++ returns XML_TRUE upon success and XML_FALSE upon error. ++

++ ++

++ Note: ++ For types of allocations that intentionally bypass tracking and limiting, please see ++ XML_SetAllocTrackerMaximumAmplification ++ above. ++

++ ++

For a call to XML_SetAllocTrackerActivationThreshold to succeed:

++
    ++
  • parser p must be a non-NULL root parser (without any parent parsers).
  • ++
++ ++

++ Note: ++ If you ever need to increase this value for non-attack payload, ++ please file a bug report. ++

++
++ +

XML_SetReparseDeferralEnabled

+
+ /* Added in Expat 2.6.0. */
+diff --git a/doc/xmlwf.1 b/doc/xmlwf.1
+index 61b3025..5f50ba9 100644
+--- a/doc/xmlwf.1
++++ b/doc/xmlwf.1
+@@ -5,7 +5,7 @@
+ \\$2 \(la\\$1\(ra\\$3
+ ..
+ .if \n(.g .mso www.tmac
+-.TH XMLWF 1 "November 6, 2024" "" ""
++.TH XMLWF 1 "September 16, 2025" "" ""
+ .SH NAME
+ xmlwf \- Determines if an XML document is well-formed
+ .SH SYNOPSIS
+@@ -88,7 +88,11 @@ supports both.
+ .TP 
+ \*(T<\fB\-a\fR\*(T> \fIfactor\fR
+ Sets the maximum tolerated amplification factor
+-for protection against billion laughs attacks (default: 100.0).
++for protection against amplification attacks
++like the billion laughs attack
++(default: 100.0
++for the sum of direct and indirect output and also
++for allocations of dynamic memory).
+ The amplification factor is calculated as ..
+ 
+ .nf
+@@ -97,12 +101,22 @@ The amplification factor is calculated as ..
+           
+ .fi
+ 
+-\&.. while parsing, whereas
++\&.. with regard to use of entities and ..
++
++.nf
++
++            amplification := allocated / direct
++          
++.fi
++
++\&.. with regard to dynamic memory while parsing.
+  is the number of bytes read
+-from the primary document in parsing and
++from the primary document in parsing,
+  is the number of bytes
+ added by expanding entities and reading of external DTD files,
+-combined.
++combined, and
++ is the total number of bytes of dynamic memory
++allocated (and not freed) per hierarchy of parsers.
+ 
+ \fINOTE\fR:
+ If you ever need to increase this value for non-attack payload,
+@@ -110,8 +124,10 @@ please file a bug report.
+ .TP 
+ \*(T<\fB\-b\fR\*(T> \fIbytes\fR
+ Sets the number of output bytes (including amplification)
+-needed to activate protection against billion laughs attacks
+-(default: 8 MiB).
++needed to activate protection against amplification attacks
++like billion laughs
++(default: 8 MiB for the sum of direct and indirect output,
++and 64 MiB for allocations of dynamic memory).
+ This can be thought of as an "activation threshold".
+ 
+ \fINOTE\fR:
+diff --git a/doc/xmlwf.xml b/doc/xmlwf.xml
+index cf6d984..d152e6f 100644
+--- a/doc/xmlwf.xml
++++ b/doc/xmlwf.xml
+@@ -158,19 +158,31 @@ supports both.
+         
+           
+             Sets the maximum tolerated amplification factor
+-            for protection against billion laughs attacks (default: 100.0).
++            for protection against amplification attacks
++            like the billion laughs attack
++            (default: 100.0
++            for the sum of direct and indirect output and also
++            for allocations of dynamic memory).
+             The amplification factor is calculated as ..
+           
+           
+             amplification := (direct + indirect) / direct
+           
+           
+-            .. while parsing, whereas
++            .. with regard to use of entities and ..
++          
++          
++            amplification := allocated / direct
++          
++          
++            .. with regard to dynamic memory while parsing.
+             <direct> is the number of bytes read
+-              from the primary document in parsing and
++              from the primary document in parsing,
+             <indirect> is the number of bytes
+               added by expanding entities and reading of external DTD files,
+-              combined.
++              combined, and
++            <allocated> is the total number of bytes of dynamic memory
++              allocated (and not freed) per hierarchy of parsers.
+           
+           
+             NOTE:
+@@ -185,8 +197,10 @@ supports both.
+         
+           
+             Sets the number of output bytes (including amplification)
+-            needed to activate protection against billion laughs attacks
+-            (default: 8 MiB).
++            needed to activate protection against amplification attacks
++            like billion laughs
++            (default: 8 MiB for the sum of direct and indirect output,
++            and 64 MiB for allocations of dynamic memory).
+             This can be thought of as an "activation threshold".
+           
+           
+diff --git a/fuzz/xml_parse_fuzzer.c b/fuzz/xml_parse_fuzzer.c
+index a7e8414..677fe59 100644
+--- a/fuzz/xml_parse_fuzzer.c
++++ b/fuzz/xml_parse_fuzzer.c
+@@ -89,15 +89,17 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+ 
+   XML_Parser externalEntityParser
+       = XML_ExternalEntityParserCreate(parentParser, "e1", NULL);
+-  assert(externalEntityParser);
+-  ParseOneInput(externalEntityParser, data, size);
+-  XML_ParserFree(externalEntityParser);
++  if (externalEntityParser != NULL) {
++    ParseOneInput(externalEntityParser, data, size);
++    XML_ParserFree(externalEntityParser);
++  }
+ 
+   XML_Parser externalDtdParser
+       = XML_ExternalEntityParserCreate(parentParser, NULL, NULL);
+-  assert(externalDtdParser);
+-  ParseOneInput(externalDtdParser, data, size);
+-  XML_ParserFree(externalDtdParser);
++  if (externalDtdParser != NULL) {
++    ParseOneInput(externalDtdParser, data, size);
++    XML_ParserFree(externalDtdParser);
++  }
+ 
+   // finally frees this parser which served as parent
+   XML_ParserFree(parentParser);
+diff --git a/fuzz/xml_parsebuffer_fuzzer.c b/fuzz/xml_parsebuffer_fuzzer.c
+index 0327aa9..7939f20 100644
+--- a/fuzz/xml_parsebuffer_fuzzer.c
++++ b/fuzz/xml_parsebuffer_fuzzer.c
+@@ -101,15 +101,17 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+ 
+   XML_Parser externalEntityParser
+       = XML_ExternalEntityParserCreate(parentParser, "e1", NULL);
+-  assert(externalEntityParser);
+-  ParseOneInput(externalEntityParser, data, size);
+-  XML_ParserFree(externalEntityParser);
++  if (externalEntityParser != NULL) {
++    ParseOneInput(externalEntityParser, data, size);
++    XML_ParserFree(externalEntityParser);
++  }
+ 
+   XML_Parser externalDtdParser
+       = XML_ExternalEntityParserCreate(parentParser, NULL, NULL);
+-  assert(externalDtdParser);
+-  ParseOneInput(externalDtdParser, data, size);
+-  XML_ParserFree(externalDtdParser);
++  if (externalDtdParser != NULL) {
++    ParseOneInput(externalDtdParser, data, size);
++    XML_ParserFree(externalDtdParser);
++  }
+ 
+   // finally frees this parser which served as parent
+   XML_ParserFree(parentParser);
+diff --git a/lib/expat.h b/lib/expat.h
+index 523b37d..df207e9 100644
+--- a/lib/expat.h
++++ b/lib/expat.h
+@@ -1032,7 +1032,10 @@ enum XML_FeatureEnum {
+   XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT,
+   XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT,
+   /* Added in Expat 2.6.0. */
+-  XML_FEATURE_GE
++  XML_FEATURE_GE,
++  /* Added in Expat 2.7.2. */
++  XML_FEATURE_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT,
++  XML_FEATURE_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT,
+   /* Additional features must be added to the end of this enum. */
+ };
+ 
+@@ -1057,6 +1060,16 @@ XML_SetBillionLaughsAttackProtectionMaximumAmplification(
+ XMLPARSEAPI(XML_Bool)
+ XML_SetBillionLaughsAttackProtectionActivationThreshold(
+     XML_Parser parser, unsigned long long activationThresholdBytes);
++
++/* Added in Expat 2.7.2. */
++XMLPARSEAPI(XML_Bool)
++XML_SetAllocTrackerMaximumAmplification(XML_Parser parser,
++                                        float maximumAmplificationFactor);
++
++/* Added in Expat 2.7.2. */
++XMLPARSEAPI(XML_Bool)
++XML_SetAllocTrackerActivationThreshold(
++    XML_Parser parser, unsigned long long activationThresholdBytes);
+ #endif
+ 
+ /* Added in Expat 2.6.0. */
+diff --git a/lib/internal.h b/lib/internal.h
+index 167ec36..1b763ff 100644
+--- a/lib/internal.h
++++ b/lib/internal.h
+@@ -145,6 +145,11 @@
+   100.0f
+ #define EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT    \
+   8388608 // 8 MiB, 2^23
++
++#define EXPAT_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT 100.0f
++#define EXPAT_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT                       \
++  67108864 // 64 MiB, 2^26
++
+ /* NOTE END */
+ 
+ #include "expat.h" // so we can use type XML_Parser below
+@@ -168,6 +173,9 @@ extern
+ #endif
+     XML_Bool g_reparseDeferralEnabledDefault; // written ONLY in runtests.c
+ #if defined(XML_TESTING)
++void *expat_malloc(XML_Parser parser, size_t size, int sourceLine);
++void expat_free(XML_Parser parser, void *ptr, int sourceLine);
++void *expat_realloc(XML_Parser parser, void *ptr, size_t size, int sourceLine);
+ extern unsigned int g_bytesScanned; // used for testing only
+ #endif
+ 
+diff --git a/lib/libexpat.def.cmake b/lib/libexpat.def.cmake
+index 10ee9cd..7a3a7ec 100644
+--- a/lib/libexpat.def.cmake
++++ b/lib/libexpat.def.cmake
+@@ -79,3 +79,6 @@ EXPORTS
+ @_EXPAT_COMMENT_DTD_OR_GE@ XML_SetBillionLaughsAttackProtectionMaximumAmplification @70
+ ; added with version 2.6.0
+   XML_SetReparseDeferralEnabled @71
++; added with version 2.7.2
++@_EXPAT_COMMENT_DTD_OR_GE@ XML_SetAllocTrackerMaximumAmplification @72
++@_EXPAT_COMMENT_DTD_OR_GE@ XML_SetAllocTrackerActivationThreshold @73
+diff --git a/lib/xmlparse.c b/lib/xmlparse.c
+index 473c791..e2847b1 100644
+--- a/lib/xmlparse.c
++++ b/lib/xmlparse.c
+@@ -234,7 +234,7 @@ typedef struct {
+   unsigned char power;
+   size_t size;
+   size_t used;
+-  const XML_Memory_Handling_Suite *mem;
++  XML_Parser parser;
+ } HASH_TABLE;
+ 
+ static size_t keylen(KEY s);
+@@ -357,7 +357,7 @@ typedef struct {
+   const XML_Char *end;
+   XML_Char *ptr;
+   XML_Char *start;
+-  const XML_Memory_Handling_Suite *mem;
++  XML_Parser parser;
+ } STRING_POOL;
+ 
+ /* The XML_Char before the name is used to determine whether
+@@ -452,6 +452,14 @@ typedef struct accounting {
+   unsigned long long activationThresholdBytes;
+ } ACCOUNTING;
+ 
++typedef struct MALLOC_TRACKER {
++  XmlBigCount bytesAllocated;
++  XmlBigCount peakBytesAllocated; // updated live only for debug level >=2
++  unsigned long debugLevel;
++  float maximumAmplificationFactor; // >=1.0
++  XmlBigCount activationThresholdBytes;
++} MALLOC_TRACKER;
++
+ typedef struct entity_stats {
+   unsigned int countEverOpened;
+   unsigned int currentDepth;
+@@ -555,27 +563,24 @@ static XML_Bool setContext(XML_Parser parser, const XML_Char *context);
+ 
+ static void FASTCALL normalizePublicId(XML_Char *s);
+ 
+-static DTD *dtdCreate(const XML_Memory_Handling_Suite *ms);
++static DTD *dtdCreate(XML_Parser parser);
+ /* do not call if m_parentParser != NULL */
+-static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms);
+-static void dtdDestroy(DTD *p, XML_Bool isDocEntity,
+-                       const XML_Memory_Handling_Suite *ms);
++static void dtdReset(DTD *p, XML_Parser parser);
++static void dtdDestroy(DTD *p, XML_Bool isDocEntity, XML_Parser parser);
+ static int dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd,
+-                   const XML_Memory_Handling_Suite *ms);
++                   XML_Parser parser);
+ static int copyEntityTable(XML_Parser oldParser, HASH_TABLE *newTable,
+                            STRING_POOL *newPool, const HASH_TABLE *oldTable);
+ static NAMED *lookup(XML_Parser parser, HASH_TABLE *table, KEY name,
+                      size_t createSize);
+-static void FASTCALL hashTableInit(HASH_TABLE *table,
+-                                   const XML_Memory_Handling_Suite *ms);
++static void FASTCALL hashTableInit(HASH_TABLE *table, XML_Parser parser);
+ static void FASTCALL hashTableClear(HASH_TABLE *table);
+ static void FASTCALL hashTableDestroy(HASH_TABLE *table);
+ static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *iter,
+                                        const HASH_TABLE *table);
+ static NAMED *FASTCALL hashTableIterNext(HASH_TABLE_ITER *iter);
+ 
+-static void FASTCALL poolInit(STRING_POOL *pool,
+-                              const XML_Memory_Handling_Suite *ms);
++static void FASTCALL poolInit(STRING_POOL *pool, XML_Parser parser);
+ static void FASTCALL poolClear(STRING_POOL *pool);
+ static void FASTCALL poolDestroy(STRING_POOL *pool);
+ static XML_Char *poolAppend(STRING_POOL *pool, const ENCODING *enc,
+@@ -595,15 +600,15 @@ static XML_Content *build_model(XML_Parser parser);
+ static ELEMENT_TYPE *getElementType(XML_Parser parser, const ENCODING *enc,
+                                     const char *ptr, const char *end);
+ 
+-static XML_Char *copyString(const XML_Char *s,
+-                            const XML_Memory_Handling_Suite *memsuite);
++static XML_Char *copyString(const XML_Char *s, XML_Parser parser);
+ 
+ static unsigned long generate_hash_secret_salt(XML_Parser parser);
+ static XML_Bool startParsing(XML_Parser parser);
+ 
+ static XML_Parser parserCreate(const XML_Char *encodingName,
+                                const XML_Memory_Handling_Suite *memsuite,
+-                               const XML_Char *nameSep, DTD *dtd);
++                               const XML_Char *nameSep, DTD *dtd,
++                               XML_Parser parentParser);
+ 
+ static void parserInit(XML_Parser parser, const XML_Char *encodingName);
+ 
+@@ -773,14 +778,232 @@ struct XML_ParserStruct {
+   unsigned long m_hash_secret_salt;
+ #if XML_GE == 1
+   ACCOUNTING m_accounting;
++  MALLOC_TRACKER m_alloc_tracker;
+   ENTITY_STATS m_entity_stats;
+ #endif
+   XML_Bool m_reenter;
+ };
+ 
+-#define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s)))
+-#define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p), (s)))
+-#define FREE(parser, p) (parser->m_mem.free_fcn((p)))
++#if XML_GE == 1
++#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
++#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
++#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
++#else
++#  define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s)))
++#  define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p), (s)))
++#  define FREE(parser, p) (parser->m_mem.free_fcn((p)))
++#endif
++
++#if XML_GE == 1
++static void
++expat_heap_stat(XML_Parser rootParser, char operator, XmlBigCount absDiff,
++                XmlBigCount newTotal, XmlBigCount peakTotal, int sourceLine) {
++  // NOTE: This can be +infinity or -nan
++  const float amplification
++      = (float)newTotal / (float)rootParser->m_accounting.countBytesDirect;
++  fprintf(
++      stderr,
++      "expat: Allocations(%p): Direct " EXPAT_FMT_ULL("10") ", allocated %c" EXPAT_FMT_ULL(
++          "10") " to " EXPAT_FMT_ULL("10") " (" EXPAT_FMT_ULL("10") " peak), amplification %8.2f (xmlparse.c:%d)\n",
++      (void *)rootParser, rootParser->m_accounting.countBytesDirect, operator,
++      absDiff, newTotal, peakTotal, (double)amplification, sourceLine);
++}
++
++static bool
++expat_heap_increase_tolerable(XML_Parser rootParser, XmlBigCount increase,
++                              int sourceLine) {
++  assert(rootParser != NULL);
++  assert(increase > 0);
++
++  XmlBigCount newTotal = 0;
++  bool tolerable = true;
++
++  // Detect integer overflow
++  if ((XmlBigCount)-1 - rootParser->m_alloc_tracker.bytesAllocated < increase) {
++    tolerable = false;
++  } else {
++    newTotal = rootParser->m_alloc_tracker.bytesAllocated + increase;
++
++    if (newTotal >= rootParser->m_alloc_tracker.activationThresholdBytes) {
++      assert(newTotal > 0);
++      // NOTE: This can be +infinity when dividing by zero but not -nan
++      const float amplification
++          = (float)newTotal / (float)rootParser->m_accounting.countBytesDirect;
++      if (amplification
++          > rootParser->m_alloc_tracker.maximumAmplificationFactor) {
++        tolerable = false;
++      }
++    }
++  }
++
++  if (! tolerable && (rootParser->m_alloc_tracker.debugLevel >= 1)) {
++    expat_heap_stat(rootParser, '+', increase, newTotal, newTotal, sourceLine);
++  }
++
++  return tolerable;
++}
++
++#  if defined(XML_TESTING)
++void *
++#  else
++static void *
++#  endif
++expat_malloc(XML_Parser parser, size_t size, int sourceLine) {
++  // Detect integer overflow
++  if (SIZE_MAX - size < sizeof(size_t)) {
++    return NULL;
++  }
++
++  const XML_Parser rootParser = getRootParserOf(parser, NULL);
++  assert(rootParser->m_parentParser == NULL);
++
++  const size_t bytesToAllocate = sizeof(size_t) + size;
++
++  if ((XmlBigCount)-1 - rootParser->m_alloc_tracker.bytesAllocated
++      < bytesToAllocate) {
++    return NULL; // i.e. signal integer overflow as out-of-memory
++  }
++
++  if (! expat_heap_increase_tolerable(rootParser, bytesToAllocate,
++                                      sourceLine)) {
++    return NULL; // i.e. signal violation as out-of-memory
++  }
++
++  // Actually allocate
++  void *const mallocedPtr = parser->m_mem.malloc_fcn(bytesToAllocate);
++
++  if (mallocedPtr == NULL) {
++    return NULL;
++  }
++
++  // Update in-block recorded size
++  *(size_t *)mallocedPtr = size;
++
++  // Update accounting
++  rootParser->m_alloc_tracker.bytesAllocated += bytesToAllocate;
++
++  // Report as needed
++  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
++    if (rootParser->m_alloc_tracker.bytesAllocated
++        > rootParser->m_alloc_tracker.peakBytesAllocated) {
++      rootParser->m_alloc_tracker.peakBytesAllocated
++          = rootParser->m_alloc_tracker.bytesAllocated;
++    }
++    expat_heap_stat(rootParser, '+', bytesToAllocate,
++                    rootParser->m_alloc_tracker.bytesAllocated,
++                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
++  }
++
++  return (char *)mallocedPtr + sizeof(size_t);
++}
++
++#  if defined(XML_TESTING)
++void
++#  else
++static void
++#  endif
++expat_free(XML_Parser parser, void *ptr, int sourceLine) {
++  assert(parser != NULL);
++
++  if (ptr == NULL) {
++    return;
++  }
++
++  const XML_Parser rootParser = getRootParserOf(parser, NULL);
++  assert(rootParser->m_parentParser == NULL);
++
++  // Extract size (to the eyes of malloc_fcn/realloc_fcn) and
++  // the original pointer returned by malloc/realloc
++  void *const mallocedPtr = (char *)ptr - sizeof(size_t);
++  const size_t bytesAllocated = sizeof(size_t) + *(size_t *)mallocedPtr;
++
++  // Update accounting
++  assert(rootParser->m_alloc_tracker.bytesAllocated >= bytesAllocated);
++  rootParser->m_alloc_tracker.bytesAllocated -= bytesAllocated;
++
++  // Report as needed
++  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
++    expat_heap_stat(rootParser, '-', bytesAllocated,
++                    rootParser->m_alloc_tracker.bytesAllocated,
++                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
++  }
++
++  // NOTE: This may be freeing rootParser, so freeing has to come last
++  parser->m_mem.free_fcn(mallocedPtr);
++}
++
++#  if defined(XML_TESTING)
++void *
++#  else
++static void *
++#  endif
++expat_realloc(XML_Parser parser, void *ptr, size_t size, int sourceLine) {
++  assert(parser != NULL);
++
++  if (ptr == NULL) {
++    return expat_malloc(parser, size, sourceLine);
++  }
++
++  if (size == 0) {
++    expat_free(parser, ptr, sourceLine);
++    return NULL;
++  }
++
++  const XML_Parser rootParser = getRootParserOf(parser, NULL);
++  assert(rootParser->m_parentParser == NULL);
++
++  // Extract original size (to the eyes of the caller) and the original
++  // pointer returned by malloc/realloc
++  void *mallocedPtr = (char *)ptr - sizeof(size_t);
++  const size_t prevSize = *(size_t *)mallocedPtr;
++
++  // Classify upcoming change
++  const bool isIncrease = (size > prevSize);
++  const size_t absDiff
++      = (size > prevSize) ? (size - prevSize) : (prevSize - size);
++
++  // Ask for permission from accounting
++  if (isIncrease) {
++    if (! expat_heap_increase_tolerable(rootParser, absDiff, sourceLine)) {
++      return NULL; // i.e. signal violation as out-of-memory
++    }
++  }
++
++  // Actually allocate
++  mallocedPtr = parser->m_mem.realloc_fcn(mallocedPtr, sizeof(size_t) + size);
++
++  if (mallocedPtr == NULL) {
++    return NULL;
++  }
++
++  // Update accounting
++  if (isIncrease) {
++    assert((XmlBigCount)-1 - rootParser->m_alloc_tracker.bytesAllocated
++           >= absDiff);
++    rootParser->m_alloc_tracker.bytesAllocated += absDiff;
++  } else { // i.e. decrease
++    assert(rootParser->m_alloc_tracker.bytesAllocated >= absDiff);
++    rootParser->m_alloc_tracker.bytesAllocated -= absDiff;
++  }
++
++  // Report as needed
++  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
++    if (rootParser->m_alloc_tracker.bytesAllocated
++        > rootParser->m_alloc_tracker.peakBytesAllocated) {
++      rootParser->m_alloc_tracker.peakBytesAllocated
++          = rootParser->m_alloc_tracker.bytesAllocated;
++    }
++    expat_heap_stat(rootParser, isIncrease ? '+' : '-', absDiff,
++                    rootParser->m_alloc_tracker.bytesAllocated,
++                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
++  }
++
++  // Update in-block recorded size
++  *(size_t *)mallocedPtr = size;
++
++  return (char *)mallocedPtr + sizeof(size_t);
++}
++#endif // XML_GE == 1
+ 
+ XML_Parser XMLCALL
+ XML_ParserCreate(const XML_Char *encodingName) {
+@@ -1100,19 +1323,40 @@ XML_Parser XMLCALL
+ XML_ParserCreate_MM(const XML_Char *encodingName,
+                     const XML_Memory_Handling_Suite *memsuite,
+                     const XML_Char *nameSep) {
+-  return parserCreate(encodingName, memsuite, nameSep, NULL);
++  return parserCreate(encodingName, memsuite, nameSep, NULL, NULL);
+ }
+ 
+ static XML_Parser
+ parserCreate(const XML_Char *encodingName,
+              const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep,
+-             DTD *dtd) {
+-  XML_Parser parser;
++             DTD *dtd, XML_Parser parentParser) {
++  XML_Parser parser = NULL;
++
++#if XML_GE == 1
++  const size_t increase = sizeof(size_t) + sizeof(struct XML_ParserStruct);
++
++  if (parentParser != NULL) {
++    const XML_Parser rootParser = getRootParserOf(parentParser, NULL);
++    if (! expat_heap_increase_tolerable(rootParser, increase, __LINE__)) {
++      return NULL;
++    }
++  }
++#else
++  UNUSED_P(parentParser);
++#endif
+ 
+   if (memsuite) {
+     XML_Memory_Handling_Suite *mtemp;
++#if XML_GE == 1
++    void *const sizeAndParser = memsuite->malloc_fcn(
++        sizeof(size_t) + sizeof(struct XML_ParserStruct));
++    if (sizeAndParser != NULL) {
++      *(size_t *)sizeAndParser = sizeof(struct XML_ParserStruct);
++      parser = (XML_Parser)((char *)sizeAndParser + sizeof(size_t));
++#else
+     parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct));
+     if (parser != NULL) {
++#endif
+       mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
+       mtemp->malloc_fcn = memsuite->malloc_fcn;
+       mtemp->realloc_fcn = memsuite->realloc_fcn;
+@@ -1120,18 +1364,67 @@ parserCreate(const XML_Char *encodingName,
+     }
+   } else {
+     XML_Memory_Handling_Suite *mtemp;
++#if XML_GE == 1
++    void *const sizeAndParser
++        = (XML_Parser)malloc(sizeof(size_t) + sizeof(struct XML_ParserStruct));
++    if (sizeAndParser != NULL) {
++      *(size_t *)sizeAndParser = sizeof(struct XML_ParserStruct);
++      parser = (XML_Parser)((char *)sizeAndParser + sizeof(size_t));
++#else
+     parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct));
+     if (parser != NULL) {
++#endif
+       mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
+       mtemp->malloc_fcn = malloc;
+       mtemp->realloc_fcn = realloc;
+       mtemp->free_fcn = free;
+     }
+-  }
++  } // cppcheck-suppress[memleak symbolName=sizeAndParser] // Cppcheck >=2.18.0
+ 
+   if (! parser)
+     return parser;
+ 
++#if XML_GE == 1
++  // Initialize .m_alloc_tracker
++  memset(&parser->m_alloc_tracker, 0, sizeof(MALLOC_TRACKER));
++  if (parentParser == NULL) {
++    parser->m_alloc_tracker.debugLevel
++        = getDebugLevel("EXPAT_MALLOC_DEBUG", 0u);
++    parser->m_alloc_tracker.maximumAmplificationFactor
++        = EXPAT_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT;
++    parser->m_alloc_tracker.activationThresholdBytes
++        = EXPAT_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT;
++
++    // NOTE: This initialization needs to come this early because these fields
++    //       are read by allocation tracking code
++    parser->m_parentParser = NULL;
++    parser->m_accounting.countBytesDirect = 0;
++  } else {
++    parser->m_parentParser = parentParser;
++  }
++
++  // Record XML_ParserStruct allocation we did a few lines up before
++  const XML_Parser rootParser = getRootParserOf(parser, NULL);
++  assert(rootParser->m_parentParser == NULL);
++  assert(SIZE_MAX - rootParser->m_alloc_tracker.bytesAllocated >= increase);
++  rootParser->m_alloc_tracker.bytesAllocated += increase;
++
++  // Report on allocation
++  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
++    if (rootParser->m_alloc_tracker.bytesAllocated
++        > rootParser->m_alloc_tracker.peakBytesAllocated) {
++      rootParser->m_alloc_tracker.peakBytesAllocated
++          = rootParser->m_alloc_tracker.bytesAllocated;
++    }
++
++    expat_heap_stat(rootParser, '+', increase,
++                    rootParser->m_alloc_tracker.bytesAllocated,
++                    rootParser->m_alloc_tracker.peakBytesAllocated, __LINE__);
++  }
++#else
++  parser->m_parentParser = NULL;
++#endif // XML_GE == 1
++
+   parser->m_buffer = NULL;
+   parser->m_bufferLim = NULL;
+ 
+@@ -1166,7 +1459,7 @@ parserCreate(const XML_Char *encodingName,
+   if (dtd)
+     parser->m_dtd = dtd;
+   else {
+-    parser->m_dtd = dtdCreate(&parser->m_mem);
++    parser->m_dtd = dtdCreate(parser);
+     if (parser->m_dtd == NULL) {
+       FREE(parser, parser->m_dataBuf);
+       FREE(parser, parser->m_atts);
+@@ -1200,8 +1493,8 @@ parserCreate(const XML_Char *encodingName,
+ 
+   parser->m_protocolEncodingName = NULL;
+ 
+-  poolInit(&parser->m_tempPool, &(parser->m_mem));
+-  poolInit(&parser->m_temp2Pool, &(parser->m_mem));
++  poolInit(&parser->m_tempPool, parser);
++  poolInit(&parser->m_temp2Pool, parser);
+   parserInit(parser, encodingName);
+ 
+   if (encodingName && ! parser->m_protocolEncodingName) {
+@@ -1233,7 +1526,7 @@ parserInit(XML_Parser parser, const XML_Char *encodingName) {
+   parser->m_processor = prologInitProcessor;
+   XmlPrologStateInit(&parser->m_prologState);
+   if (encodingName != NULL) {
+-    parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem));
++    parser->m_protocolEncodingName = copyString(encodingName, parser);
+   }
+   parser->m_curBase = NULL;
+   XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0);
+@@ -1295,7 +1588,6 @@ parserInit(XML_Parser parser, const XML_Char *encodingName) {
+   parser->m_unknownEncodingMem = NULL;
+   parser->m_unknownEncodingRelease = NULL;
+   parser->m_unknownEncodingData = NULL;
+-  parser->m_parentParser = NULL;
+   parser->m_parsingStatus.parsing = XML_INITIALIZED;
+   // Reentry can only be triggered inside m_processor calls
+   parser->m_reenter = XML_FALSE;
+@@ -1385,7 +1677,7 @@ XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) {
+   FREE(parser, (void *)parser->m_protocolEncodingName);
+   parser->m_protocolEncodingName = NULL;
+   parserInit(parser, encodingName);
+-  dtdReset(parser->m_dtd, &parser->m_mem);
++  dtdReset(parser->m_dtd, parser);
+   return XML_TRUE;
+ }
+ 
+@@ -1421,7 +1713,7 @@ XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) {
+     parser->m_protocolEncodingName = NULL;
+   else {
+     /* Copy the new encoding name into allocated memory */
+-    parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem));
++    parser->m_protocolEncodingName = copyString(encodingName, parser);
+     if (! parser->m_protocolEncodingName)
+       return XML_STATUS_ERROR;
+   }
+@@ -1530,9 +1822,10 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
+   */
+   if (parser->m_ns) {
+     XML_Char tmp[2] = {parser->m_namespaceSeparator, 0};
+-    parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd);
++    parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd, oldParser);
+   } else {
+-    parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd);
++    parser
++        = parserCreate(encodingName, &parser->m_mem, NULL, newDtd, oldParser);
+   }
+ 
+   if (! parser)
+@@ -1576,7 +1869,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
+   parser->m_prologState.inEntityValue = oldInEntityValue;
+   if (context) {
+ #endif /* XML_DTD */
+-    if (! dtdCopy(oldParser, parser->m_dtd, oldDtd, &parser->m_mem)
++    if (! dtdCopy(oldParser, parser->m_dtd, oldDtd, parser)
+         || ! setContext(parser, context)) {
+       XML_ParserFree(parser);
+       return NULL;
+@@ -1688,14 +1981,16 @@ XML_ParserFree(XML_Parser parser) {
+ #else
+   if (parser->m_dtd)
+ #endif /* XML_DTD */
+-    dtdDestroy(parser->m_dtd, (XML_Bool)! parser->m_parentParser,
+-               &parser->m_mem);
++    dtdDestroy(parser->m_dtd, (XML_Bool)! parser->m_parentParser, parser);
+   FREE(parser, (void *)parser->m_atts);
+ #ifdef XML_ATTR_INFO
+   FREE(parser, (void *)parser->m_attInfo);
+ #endif
+   FREE(parser, parser->m_groupConnector);
+-  FREE(parser, parser->m_buffer);
++  // NOTE: We are avoiding FREE(..) here because parser->m_buffer
++  //       is not being allocated with MALLOC(..) but with plain
++  //       .malloc_fcn(..).
++  parser->m_mem.free_fcn(parser->m_buffer);
+   FREE(parser, parser->m_dataBuf);
+   FREE(parser, parser->m_nsAtts);
+   FREE(parser, parser->m_unknownEncodingMem);
+@@ -2287,7 +2582,9 @@ XML_GetBuffer(XML_Parser parser, int len) {
+         parser->m_errorCode = XML_ERROR_NO_MEMORY;
+         return NULL;
+       }
+-      newBuf = (char *)MALLOC(parser, bufferSize);
++      // NOTE: We are avoiding MALLOC(..) here to leave limiting
++      //       the input size to the application using Expat.
++      newBuf = (char *)parser->m_mem.malloc_fcn(bufferSize);
+       if (newBuf == 0) {
+         parser->m_errorCode = XML_ERROR_NO_MEMORY;
+         return NULL;
+@@ -2298,7 +2595,10 @@ XML_GetBuffer(XML_Parser parser, int len) {
+         memcpy(newBuf, &parser->m_bufferPtr[-keep],
+                EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)
+                    + keep);
+-        FREE(parser, parser->m_buffer);
++        // NOTE: We are avoiding FREE(..) here because parser->m_buffer
++        //       is not being allocated with MALLOC(..) but with plain
++        //       .malloc_fcn(..).
++        parser->m_mem.free_fcn(parser->m_buffer);
+         parser->m_buffer = newBuf;
+         parser->m_bufferEnd
+             = parser->m_buffer
+@@ -2314,7 +2614,10 @@ XML_GetBuffer(XML_Parser parser, int len) {
+       if (parser->m_bufferPtr) {
+         memcpy(newBuf, parser->m_bufferPtr,
+                EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr));
+-        FREE(parser, parser->m_buffer);
++        // NOTE: We are avoiding FREE(..) here because parser->m_buffer
++        //       is not being allocated with MALLOC(..) but with plain
++        //       .malloc_fcn(..).
++        parser->m_mem.free_fcn(parser->m_buffer);
+         parser->m_bufferEnd
+             = newBuf
+               + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr);
+@@ -2492,28 +2795,43 @@ XML_GetCurrentColumnNumber(XML_Parser parser) {
+ 
+ void XMLCALL
+ XML_FreeContentModel(XML_Parser parser, XML_Content *model) {
+-  if (parser != NULL)
+-    FREE(parser, model);
++  if (parser == NULL)
++    return;
++
++  // NOTE: We are avoiding FREE(..) here because the content model
++  //       has been created using plain .malloc_fcn(..) rather than MALLOC(..).
++  parser->m_mem.free_fcn(model);
+ }
+ 
+ void *XMLCALL
+ XML_MemMalloc(XML_Parser parser, size_t size) {
+   if (parser == NULL)
+     return NULL;
+-  return MALLOC(parser, size);
++
++  // NOTE: We are avoiding MALLOC(..) here to not include
++  //       user allocations with allocation tracking and limiting.
++  return parser->m_mem.malloc_fcn(size);
+ }
+ 
+ void *XMLCALL
+ XML_MemRealloc(XML_Parser parser, void *ptr, size_t size) {
+   if (parser == NULL)
+     return NULL;
+-  return REALLOC(parser, ptr, size);
++
++  // NOTE: We are avoiding REALLOC(..) here to not include
++  //       user allocations with allocation tracking and limiting.
++  return parser->m_mem.realloc_fcn(ptr, size);
+ }
+ 
+ void XMLCALL
+ XML_MemFree(XML_Parser parser, void *ptr) {
+-  if (parser != NULL)
+-    FREE(parser, ptr);
++  if (parser == NULL)
++    return;
++
++  // NOTE: We are avoiding FREE(..) here because XML_MemMalloc and
++  //       XML_MemRealloc are not using MALLOC(..) and REALLOC(..)
++  //       but plain .malloc_fcn(..) and .realloc_fcn(..), internally.
++  parser->m_mem.free_fcn(ptr);
+ }
+ 
+ void XMLCALL
+@@ -2713,6 +3031,13 @@ XML_GetFeatureList(void) {
+        EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT},
+       /* Added in Expat 2.6.0. */
+       {XML_FEATURE_GE, XML_L("XML_GE"), 0},
++      /* Added in Expat 2.7.2. */
++      {XML_FEATURE_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT,
++       XML_L("XML_AT_MAX_AMP"),
++       (long int)EXPAT_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT},
++      {XML_FEATURE_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT,
++       XML_L("XML_AT_ACT_THRES"),
++       (long int)EXPAT_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT},
+ #endif
+       {XML_FEATURE_END, NULL, 0}};
+ 
+@@ -2741,6 +3066,29 @@ XML_SetBillionLaughsAttackProtectionActivationThreshold(
+   parser->m_accounting.activationThresholdBytes = activationThresholdBytes;
+   return XML_TRUE;
+ }
++
++XML_Bool XMLCALL
++XML_SetAllocTrackerMaximumAmplification(XML_Parser parser,
++                                        float maximumAmplificationFactor) {
++  if ((parser == NULL) || (parser->m_parentParser != NULL)
++      || isnan(maximumAmplificationFactor)
++      || (maximumAmplificationFactor < 1.0f)) {
++    return XML_FALSE;
++  }
++  parser->m_alloc_tracker.maximumAmplificationFactor
++      = maximumAmplificationFactor;
++  return XML_TRUE;
++}
++
++XML_Bool XMLCALL
++XML_SetAllocTrackerActivationThreshold(
++    XML_Parser parser, unsigned long long activationThresholdBytes) {
++  if ((parser == NULL) || (parser->m_parentParser != NULL)) {
++    return XML_FALSE;
++  }
++  parser->m_alloc_tracker.activationThresholdBytes = activationThresholdBytes;
++  return XML_TRUE;
++}
+ #endif /* XML_GE == 1 */
+ 
+ XML_Bool XMLCALL
+@@ -5726,8 +6074,12 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end,
+     case XML_ROLE_CONTENT_EMPTY:
+       if (dtd->in_eldecl) {
+         if (parser->m_elementDeclHandler) {
++          // NOTE: We are avoiding MALLOC(..) here to so that
++          //       applications that are not using XML_FreeContentModel but
++          //       plain free(..) or .free_fcn() to free the content model's
++          //       memory are safe.
+           XML_Content *content
+-              = (XML_Content *)MALLOC(parser, sizeof(XML_Content));
++              = (XML_Content *)parser->m_mem.malloc_fcn(sizeof(XML_Content));
+           if (! content)
+             return XML_ERROR_NO_MEMORY;
+           content->quant = XML_CQUANT_NONE;
+@@ -7116,19 +7468,19 @@ normalizePublicId(XML_Char *publicId) {
+ }
+ 
+ static DTD *
+-dtdCreate(const XML_Memory_Handling_Suite *ms) {
+-  DTD *p = ms->malloc_fcn(sizeof(DTD));
++dtdCreate(XML_Parser parser) {
++  DTD *p = MALLOC(parser, sizeof(DTD));
+   if (p == NULL)
+     return p;
+-  poolInit(&(p->pool), ms);
+-  poolInit(&(p->entityValuePool), ms);
+-  hashTableInit(&(p->generalEntities), ms);
+-  hashTableInit(&(p->elementTypes), ms);
+-  hashTableInit(&(p->attributeIds), ms);
+-  hashTableInit(&(p->prefixes), ms);
++  poolInit(&(p->pool), parser);
++  poolInit(&(p->entityValuePool), parser);
++  hashTableInit(&(p->generalEntities), parser);
++  hashTableInit(&(p->elementTypes), parser);
++  hashTableInit(&(p->attributeIds), parser);
++  hashTableInit(&(p->prefixes), parser);
+ #ifdef XML_DTD
+   p->paramEntityRead = XML_FALSE;
+-  hashTableInit(&(p->paramEntities), ms);
++  hashTableInit(&(p->paramEntities), parser);
+ #endif /* XML_DTD */
+   p->defaultPrefix.name = NULL;
+   p->defaultPrefix.binding = NULL;
+@@ -7148,7 +7500,7 @@ dtdCreate(const XML_Memory_Handling_Suite *ms) {
+ }
+ 
+ static void
+-dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) {
++dtdReset(DTD *p, XML_Parser parser) {
+   HASH_TABLE_ITER iter;
+   hashTableIterInit(&iter, &(p->elementTypes));
+   for (;;) {
+@@ -7156,7 +7508,7 @@ dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) {
+     if (! e)
+       break;
+     if (e->allocDefaultAtts != 0)
+-      ms->free_fcn(e->defaultAtts);
++      FREE(parser, e->defaultAtts);
+   }
+   hashTableClear(&(p->generalEntities));
+ #ifdef XML_DTD
+@@ -7173,9 +7525,9 @@ dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) {
+ 
+   p->in_eldecl = XML_FALSE;
+ 
+-  ms->free_fcn(p->scaffIndex);
++  FREE(parser, p->scaffIndex);
+   p->scaffIndex = NULL;
+-  ms->free_fcn(p->scaffold);
++  FREE(parser, p->scaffold);
+   p->scaffold = NULL;
+ 
+   p->scaffLevel = 0;
+@@ -7189,7 +7541,7 @@ dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) {
+ }
+ 
+ static void
+-dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) {
++dtdDestroy(DTD *p, XML_Bool isDocEntity, XML_Parser parser) {
+   HASH_TABLE_ITER iter;
+   hashTableIterInit(&iter, &(p->elementTypes));
+   for (;;) {
+@@ -7197,7 +7549,7 @@ dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) {
+     if (! e)
+       break;
+     if (e->allocDefaultAtts != 0)
+-      ms->free_fcn(e->defaultAtts);
++      FREE(parser, e->defaultAtts);
+   }
+   hashTableDestroy(&(p->generalEntities));
+ #ifdef XML_DTD
+@@ -7209,10 +7561,10 @@ dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) {
+   poolDestroy(&(p->pool));
+   poolDestroy(&(p->entityValuePool));
+   if (isDocEntity) {
+-    ms->free_fcn(p->scaffIndex);
+-    ms->free_fcn(p->scaffold);
++    FREE(parser, p->scaffIndex);
++    FREE(parser, p->scaffold);
+   }
+-  ms->free_fcn(p);
++  FREE(parser, p);
+ }
+ 
+ /* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise.
+@@ -7220,7 +7572,7 @@ dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) {
+ */
+ static int
+ dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd,
+-        const XML_Memory_Handling_Suite *ms) {
++        XML_Parser parser) {
+   HASH_TABLE_ITER iter;
+ 
+   /* Copy the prefix table. */
+@@ -7301,7 +7653,7 @@ dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd,
+       }
+ #endif
+       newE->defaultAtts
+-          = ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
++          = MALLOC(parser, oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE));
+       if (! newE->defaultAtts) {
+         return 0;
+       }
+@@ -7463,7 +7815,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
+     /* table->size is a power of 2 */
+     table->size = (size_t)1 << INIT_POWER;
+     tsize = table->size * sizeof(NAMED *);
+-    table->v = table->mem->malloc_fcn(tsize);
++    table->v = MALLOC(table->parser, tsize);
+     if (! table->v) {
+       table->size = 0;
+       return NULL;
+@@ -7503,7 +7855,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
+       }
+ 
+       size_t tsize = newSize * sizeof(NAMED *);
+-      NAMED **newV = table->mem->malloc_fcn(tsize);
++      NAMED **newV = MALLOC(table->parser, tsize);
+       if (! newV)
+         return NULL;
+       memset(newV, 0, tsize);
+@@ -7519,7 +7871,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
+           }
+           newV[j] = table->v[i];
+         }
+-      table->mem->free_fcn(table->v);
++      FREE(table->parser, table->v);
+       table->v = newV;
+       table->power = newPower;
+       table->size = newSize;
+@@ -7532,7 +7884,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
+       }
+     }
+   }
+-  table->v[i] = table->mem->malloc_fcn(createSize);
++  table->v[i] = MALLOC(table->parser, createSize);
+   if (! table->v[i])
+     return NULL;
+   memset(table->v[i], 0, createSize);
+@@ -7545,7 +7897,7 @@ static void FASTCALL
+ hashTableClear(HASH_TABLE *table) {
+   size_t i;
+   for (i = 0; i < table->size; i++) {
+-    table->mem->free_fcn(table->v[i]);
++    FREE(table->parser, table->v[i]);
+     table->v[i] = NULL;
+   }
+   table->used = 0;
+@@ -7555,17 +7907,17 @@ static void FASTCALL
+ hashTableDestroy(HASH_TABLE *table) {
+   size_t i;
+   for (i = 0; i < table->size; i++)
+-    table->mem->free_fcn(table->v[i]);
+-  table->mem->free_fcn(table->v);
++    FREE(table->parser, table->v[i]);
++  FREE(table->parser, table->v);
+ }
+ 
+ static void FASTCALL
+-hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) {
++hashTableInit(HASH_TABLE *p, XML_Parser parser) {
+   p->power = 0;
+   p->size = 0;
+   p->used = 0;
+   p->v = NULL;
+-  p->mem = ms;
++  p->parser = parser;
+ }
+ 
+ static void FASTCALL
+@@ -7585,13 +7937,13 @@ hashTableIterNext(HASH_TABLE_ITER *iter) {
+ }
+ 
+ static void FASTCALL
+-poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms) {
++poolInit(STRING_POOL *pool, XML_Parser parser) {
+   pool->blocks = NULL;
+   pool->freeBlocks = NULL;
+   pool->start = NULL;
+   pool->ptr = NULL;
+   pool->end = NULL;
+-  pool->mem = ms;
++  pool->parser = parser;
+ }
+ 
+ static void FASTCALL
+@@ -7618,13 +7970,13 @@ poolDestroy(STRING_POOL *pool) {
+   BLOCK *p = pool->blocks;
+   while (p) {
+     BLOCK *tem = p->next;
+-    pool->mem->free_fcn(p);
++    FREE(pool->parser, p);
+     p = tem;
+   }
+   p = pool->freeBlocks;
+   while (p) {
+     BLOCK *tem = p->next;
+-    pool->mem->free_fcn(p);
++    FREE(pool->parser, p);
+     p = tem;
+   }
+ }
+@@ -7779,8 +8131,8 @@ poolGrow(STRING_POOL *pool) {
+     if (bytesToAllocate == 0)
+       return XML_FALSE;
+ 
+-    temp = (BLOCK *)pool->mem->realloc_fcn(pool->blocks,
+-                                           (unsigned)bytesToAllocate);
++    temp = (BLOCK *)REALLOC(pool->parser, pool->blocks,
++                            (unsigned)bytesToAllocate);
+     if (temp == NULL)
+       return XML_FALSE;
+     pool->blocks = temp;
+@@ -7820,7 +8172,7 @@ poolGrow(STRING_POOL *pool) {
+     if (bytesToAllocate == 0)
+       return XML_FALSE;
+ 
+-    tem = pool->mem->malloc_fcn(bytesToAllocate);
++    tem = MALLOC(pool->parser, bytesToAllocate);
+     if (! tem)
+       return XML_FALSE;
+     tem->size = blockSize;
+@@ -7935,7 +8287,10 @@ build_model(XML_Parser parser) {
+   const size_t allocsize = (dtd->scaffCount * sizeof(XML_Content)
+                             + (dtd->contentStringLen * sizeof(XML_Char)));
+ 
+-  ret = (XML_Content *)MALLOC(parser, allocsize);
++  // NOTE: We are avoiding MALLOC(..) here to so that
++  //       applications that are not using XML_FreeContentModel but plain
++  //       free(..) or .free_fcn() to free the content model's memory are safe.
++  ret = (XML_Content *)parser->m_mem.malloc_fcn(allocsize);
+   if (! ret)
+     return NULL;
+ 
+@@ -8056,7 +8411,7 @@ getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr,
+ }
+ 
+ static XML_Char *
+-copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite) {
++copyString(const XML_Char *s, XML_Parser parser) {
+   size_t charsRequired = 0;
+   XML_Char *result;
+ 
+@@ -8068,7 +8423,7 @@ copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite) {
+   charsRequired++;
+ 
+   /* Now allocate space for the copy */
+-  result = memsuite->malloc_fcn(charsRequired * sizeof(XML_Char));
++  result = MALLOC(parser, charsRequired * sizeof(XML_Char));
+   if (result == NULL)
+     return NULL;
+   /* Copy the original into place */
+diff --git a/tests/alloc_tests.c b/tests/alloc_tests.c
+index 12ea3b2..47004a9 100644
+--- a/tests/alloc_tests.c
++++ b/tests/alloc_tests.c
+@@ -46,10 +46,16 @@
+ #  undef NDEBUG /* because test suite relies on assert(...) at the moment */
+ #endif
+ 
++#include  /* NAN, INFINITY */
++#include 
++#include  /* for SIZE_MAX */
+ #include 
+ #include 
+ 
++#include "expat_config.h"
++
+ #include "expat.h"
++#include "internal.h"
+ #include "common.h"
+ #include "minicheck.h"
+ #include "dummy.h"
+@@ -2085,6 +2091,203 @@ START_TEST(test_alloc_reset_after_external_entity_parser_create_fail) {
+ }
+ END_TEST
+ 
++START_TEST(test_alloc_tracker_size_recorded) {
++  XML_Memory_Handling_Suite memsuite = {malloc, realloc, free};
++
++  bool values[] = {true, false};
++  for (size_t i = 0; i < sizeof(values) / sizeof(values[0]); i++) {
++    const bool useMemSuite = values[i];
++    set_subtest("useMemSuite=%d", (int)useMemSuite);
++    XML_Parser parser = useMemSuite
++                            ? XML_ParserCreate_MM(NULL, &memsuite, XCS("|"))
++                            : XML_ParserCreate(NULL);
++
++#if XML_GE == 1
++    void *ptr = expat_malloc(parser, 10, -1);
++
++    assert_true(ptr != NULL);
++    assert_true(*((size_t *)ptr - 1) == 10);
++
++    assert_true(expat_realloc(parser, ptr, SIZE_MAX / 2, -1) == NULL);
++
++    assert_true(*((size_t *)ptr - 1) == 10); // i.e. unchanged
++
++    ptr = expat_realloc(parser, ptr, 20, -1);
++
++    assert_true(ptr != NULL);
++    assert_true(*((size_t *)ptr - 1) == 20);
++
++    expat_free(parser, ptr, -1);
++#endif
++
++    XML_ParserFree(parser);
++  }
++}
++END_TEST
++
++START_TEST(test_alloc_tracker_maximum_amplification) {
++  if (g_reparseDeferralEnabledDefault == XML_TRUE) {
++    return;
++  }
++
++  XML_Parser parser = XML_ParserCreate(NULL);
++
++  // Get .m_accounting.countBytesDirect from 0 to 3
++  const char *const chunk = "";
++  assert_true(_XML_Parse_SINGLE_BYTES(parser, chunk, (int)strlen(chunk),
++                                      /*isFinal=*/XML_FALSE)
++              == XML_STATUS_OK);
++
++#if XML_GE == 1
++  // Stop activation threshold from interfering
++  assert_true(XML_SetAllocTrackerActivationThreshold(parser, 0) == XML_TRUE);
++
++  // Exceed maximum amplification: should be rejected.
++  assert_true(expat_malloc(parser, 1000, -1) == NULL);
++
++  // Increase maximum amplification, and try the same amount once more: should
++  // work.
++  assert_true(XML_SetAllocTrackerMaximumAmplification(parser, 3000.0f)
++              == XML_TRUE);
++
++  void *const ptr = expat_malloc(parser, 1000, -1);
++  assert_true(ptr != NULL);
++  expat_free(parser, ptr, -1);
++#endif
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
++START_TEST(test_alloc_tracker_threshold) {
++  XML_Parser parser = XML_ParserCreate(NULL);
++
++#if XML_GE == 1
++  // Exceed maximum amplification *before* (default) threshold: should work.
++  void *const ptr = expat_malloc(parser, 1000, -1);
++  assert_true(ptr != NULL);
++  expat_free(parser, ptr, -1);
++
++  // Exceed maximum amplification *after* threshold: should be rejected.
++  assert_true(XML_SetAllocTrackerActivationThreshold(parser, 999) == XML_TRUE);
++  assert_true(expat_malloc(parser, 1000, -1) == NULL);
++#endif
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
++START_TEST(test_alloc_tracker_getbuffer_unlimited) {
++  XML_Parser parser = XML_ParserCreate(NULL);
++
++#if XML_GE == 1
++  // Artificially lower threshold
++  assert_true(XML_SetAllocTrackerActivationThreshold(parser, 0) == XML_TRUE);
++
++  // Self-test: Prove that threshold is as rejecting as expected
++  assert_true(expat_malloc(parser, 1000, -1) == NULL);
++#endif
++  // XML_GetBuffer should be allowed to pass, though
++  assert_true(XML_GetBuffer(parser, 1000) != NULL);
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
++START_TEST(test_alloc_tracker_api) {
++  XML_Parser parserWithoutParent = XML_ParserCreate(NULL);
++  XML_Parser parserWithParent = XML_ExternalEntityParserCreate(
++      parserWithoutParent, XCS("entity123"), NULL);
++  if (parserWithoutParent == NULL)
++    fail("parserWithoutParent is NULL");
++  if (parserWithParent == NULL)
++    fail("parserWithParent is NULL");
++
++#if XML_GE == 1
++  // XML_SetAllocTrackerMaximumAmplification, error cases
++  if (XML_SetAllocTrackerMaximumAmplification(NULL, 123.0f) == XML_TRUE)
++    fail("Call with NULL parser is NOT supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithParent, 123.0f)
++      == XML_TRUE)
++    fail("Call with non-root parser is NOT supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, NAN)
++      == XML_TRUE)
++    fail("Call with NaN limit is NOT supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, -1.0f)
++      == XML_TRUE)
++    fail("Call with negative limit is NOT supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, 0.9f)
++      == XML_TRUE)
++    fail("Call with positive limit <1.0 is NOT supposed to succeed");
++
++  // XML_SetAllocTrackerMaximumAmplification, success cases
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, 1.0f)
++      == XML_FALSE)
++    fail("Call with positive limit >=1.0 is supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, 123456.789f)
++      == XML_FALSE)
++    fail("Call with positive limit >=1.0 is supposed to succeed");
++  if (XML_SetAllocTrackerMaximumAmplification(parserWithoutParent, INFINITY)
++      == XML_FALSE)
++    fail("Call with positive limit >=1.0 is supposed to succeed");
++
++  // XML_SetAllocTrackerActivationThreshold, error cases
++  if (XML_SetAllocTrackerActivationThreshold(NULL, 123) == XML_TRUE)
++    fail("Call with NULL parser is NOT supposed to succeed");
++  if (XML_SetAllocTrackerActivationThreshold(parserWithParent, 123) == XML_TRUE)
++    fail("Call with non-root parser is NOT supposed to succeed");
++
++  // XML_SetAllocTrackerActivationThreshold, success cases
++  if (XML_SetAllocTrackerActivationThreshold(parserWithoutParent, 123)
++      == XML_FALSE)
++    fail("Call with non-NULL parentless parser is supposed to succeed");
++#endif // XML_GE == 1
++
++  XML_ParserFree(parserWithParent);
++  XML_ParserFree(parserWithoutParent);
++}
++END_TEST
++
++START_TEST(test_mem_api_cycle) {
++  XML_Parser parser = XML_ParserCreate(NULL);
++
++  void *ptr = XML_MemMalloc(parser, 10);
++
++  assert_true(ptr != NULL);
++  memset(ptr, 'x', 10); // assert writability, with ASan in mind
++
++  ptr = XML_MemRealloc(parser, ptr, 20);
++
++  assert_true(ptr != NULL);
++  memset(ptr, 'y', 20); // assert writability, with ASan in mind
++
++  XML_MemFree(parser, ptr);
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
++START_TEST(test_mem_api_unlimited) {
++  XML_Parser parser = XML_ParserCreate(NULL);
++
++#if XML_GE == 1
++  assert_true(XML_SetAllocTrackerActivationThreshold(parser, 0) == XML_TRUE);
++#endif
++
++  void *ptr = XML_MemMalloc(parser, 1000);
++
++  assert_true(ptr != NULL);
++
++  ptr = XML_MemRealloc(parser, ptr, 2000);
++
++  assert_true(ptr != NULL);
++
++  XML_MemFree(parser, ptr);
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
+ void
+ make_alloc_test_case(Suite *s) {
+   TCase *tc_alloc = tcase_create("allocation tests");
+@@ -2151,4 +2354,15 @@ make_alloc_test_case(Suite *s) {
+ 
+   tcase_add_test__ifdef_xml_dtd(
+       tc_alloc, test_alloc_reset_after_external_entity_parser_create_fail);
++
++  tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_size_recorded);
++  tcase_add_test__ifdef_xml_dtd(tc_alloc,
++                                test_alloc_tracker_maximum_amplification);
++  tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_threshold);
++  tcase_add_test__ifdef_xml_dtd(tc_alloc,
++                                test_alloc_tracker_getbuffer_unlimited);
++  tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_api);
++
++  tcase_add_test(tc_alloc, test_mem_api_cycle);
++  tcase_add_test__ifdef_xml_dtd(tc_alloc, test_mem_api_unlimited);
+ }
+diff --git a/tests/basic_tests.c b/tests/basic_tests.c
+index f0025fc..da5c0d4 100644
+--- a/tests/basic_tests.c
++++ b/tests/basic_tests.c
+@@ -3002,6 +3002,10 @@ START_TEST(test_buffer_can_grow_to_max) {
+   for (int i = 0; i < num_prefixes; ++i) {
+     set_subtest("\"%s\"", prefixes[i]);
+     XML_Parser parser = XML_ParserCreate(NULL);
++#if XML_GE == 1
++    assert_true(XML_SetAllocTrackerActivationThreshold(parser, (size_t)-1)
++                == XML_TRUE); // i.e. deactivate
++#endif
+     const int prefix_len = (int)strlen(prefixes[i]);
+     const enum XML_Status s
+         = _XML_Parse_SINGLE_BYTES(parser, prefixes[i], prefix_len, XML_FALSE);
+diff --git a/tests/nsalloc_tests.c b/tests/nsalloc_tests.c
+index ec88586..a8f5718 100644
+--- a/tests/nsalloc_tests.c
++++ b/tests/nsalloc_tests.c
+@@ -454,10 +454,15 @@ START_TEST(test_nsalloc_realloc_attributes) {
+     nsalloc_teardown();
+     nsalloc_setup();
+   }
++#if XML_GE == 1
++  assert_true(
++      i == 0); // because expat_realloc relies on expat_malloc to some extent
++#else
+   if (i == 0)
+     fail("Parsing worked despite failing reallocations");
+   else if (i == max_realloc_count)
+     fail("Parsing failed at max reallocation count");
++#endif
+ }
+ END_TEST
+ 
+diff --git a/xmlwf/xmlwf.c b/xmlwf/xmlwf.c
+index 7c0a8cd..92adb1a 100644
+--- a/xmlwf/xmlwf.c
++++ b/xmlwf/xmlwf.c
+@@ -913,11 +913,11 @@ usage(const XML_Char *prog, int rc) {
+       T("  -t             write no XML output for [t]iming of plain parsing\n")
+       T("  -N             enable adding doctype and [n]otation declarations\n")
+       T("\n")
+-      T("billion laughs attack protection:\n")
++      T("amplification attack protection (e.g. billion laughs):\n")
+       T("  NOTE: If you ever need to increase these values for non-attack payload, please file a bug report.\n")
+       T("\n")
+       T("  -a FACTOR      set maximum tolerated [a]mplification factor (default: 100.0)\n")
+-      T("  -b BYTES       set number of output [b]ytes needed to activate (default: 8 MiB)\n")
++      T("  -b BYTES       set number of output [b]ytes needed to activate (default: 8 MiB/64 MiB)\n")
+       T("\n")
+       T("reparse deferral:\n")
+       T("  -q             disable reparse deferral, and allow [q]uadratic parse runtime with large tokens\n")
+@@ -926,6 +926,10 @@ usage(const XML_Char *prog, int rc) {
+       T("  -h, --help     show this [h]elp message and exit\n")
+       T("  -v, --version  show program's [v]ersion number and exit\n")
+       T("\n")
++      T("environment variables:\n")
++      T("  EXPAT_MALLOC_DEBUG=(0|1|2)\n")
++      T("                 Control verbosity of allocation tracker (default: 0)\n")
++      T("\n")
+       T("exit status:\n")
+       T("  0              the input files are well-formed and the output (if requested) was written successfully\n")
+       T("  1              could not allocate data structures, signals a serious problem with execution environment\n")
+@@ -1171,12 +1175,15 @@ tmain(int argc, XML_Char **argv) {
+ #if XML_GE == 1
+       XML_SetBillionLaughsAttackProtectionMaximumAmplification(
+           parser, attackMaximumAmplification);
++      XML_SetAllocTrackerMaximumAmplification(parser,
++                                              attackMaximumAmplification);
+ #endif
+     }
+     if (attackThresholdGiven) {
+ #if XML_GE == 1
+       XML_SetBillionLaughsAttackProtectionActivationThreshold(
+           parser, attackThresholdBytes);
++      XML_SetAllocTrackerActivationThreshold(parser, attackThresholdBytes);
+ #else
+       (void)attackThresholdBytes; // silence -Wunused-but-set-variable
+ #endif
+diff --git a/xmlwf/xmlwf_helpgen.py b/xmlwf/xmlwf_helpgen.py
+index 3d32f5d..dcae018 100755
+--- a/xmlwf/xmlwf_helpgen.py
++++ b/xmlwf/xmlwf_helpgen.py
+@@ -32,6 +32,9 @@
+ import argparse
+ 
+ epilog = """
++environment variables:
++  EXPAT_MALLOC_DEBUG=(0|1|2)
++                 Control verbosity of allocation tracker (default: 0)
+ exit status:
+   0              the input files are well-formed and the output (if requested) was written successfully
+   1              could not allocate data structures, signals a serious problem with execution environment
+-- 
+2.43.0
+
diff --git a/SPECS/expat/CVE-2026-24515.patch b/SPECS/expat/CVE-2026-24515.patch
new file mode 100644
index 0000000000..f83bc89770
--- /dev/null
+++ b/SPECS/expat/CVE-2026-24515.patch
@@ -0,0 +1,169 @@
+From 8b3805af3dde1f5424bdd704da688def3a81ff9f Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping 
+Date: Sun, 18 Jan 2026 17:53:37 +0100
+Subject: [PATCH 1/3] lib: Make XML_ExternalEntityParserCreate copy unknown
+ encoding handler user data
+
+Patch suggested by Artiphishell Inc.
+---
+ lib/xmlparse.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/lib/xmlparse.c b/lib/xmlparse.c
+index e2847b1..d804753 100644
+--- a/lib/xmlparse.c
++++ b/lib/xmlparse.c
+@@ -1742,6 +1742,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
+   XML_ExternalEntityRefHandler oldExternalEntityRefHandler;
+   XML_SkippedEntityHandler oldSkippedEntityHandler;
+   XML_UnknownEncodingHandler oldUnknownEncodingHandler;
++  void *oldUnknownEncodingHandlerData;
+   XML_ElementDeclHandler oldElementDeclHandler;
+   XML_AttlistDeclHandler oldAttlistDeclHandler;
+   XML_EntityDeclHandler oldEntityDeclHandler;
+@@ -1787,6 +1788,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
+   oldExternalEntityRefHandler = parser->m_externalEntityRefHandler;
+   oldSkippedEntityHandler = parser->m_skippedEntityHandler;
+   oldUnknownEncodingHandler = parser->m_unknownEncodingHandler;
++  oldUnknownEncodingHandlerData = parser->m_unknownEncodingHandlerData;
+   oldElementDeclHandler = parser->m_elementDeclHandler;
+   oldAttlistDeclHandler = parser->m_attlistDeclHandler;
+   oldEntityDeclHandler = parser->m_entityDeclHandler;
+@@ -1847,6 +1849,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
+   parser->m_externalEntityRefHandler = oldExternalEntityRefHandler;
+   parser->m_skippedEntityHandler = oldSkippedEntityHandler;
+   parser->m_unknownEncodingHandler = oldUnknownEncodingHandler;
++  parser->m_unknownEncodingHandlerData = oldUnknownEncodingHandlerData;
+   parser->m_elementDeclHandler = oldElementDeclHandler;
+   parser->m_attlistDeclHandler = oldAttlistDeclHandler;
+   parser->m_entityDeclHandler = oldEntityDeclHandler;
+-- 
+2.45.4
+
+
+From 0b2599c6eff2f0f9d20ec7423621f2928f989c1a Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping 
+Date: Sun, 18 Jan 2026 17:26:31 +0100
+Subject: [PATCH 2/3] tests: Cover effect of XML_SetUnknownEncodingHandler user
+ data
+
+---
+ tests/basic_tests.c | 42 ++++++++++++++++++++++++++++++++++++++++++
+ tests/handlers.c    | 10 ++++++++++
+ tests/handlers.h    |  3 +++
+ 3 files changed, 55 insertions(+)
+
+diff --git a/tests/basic_tests.c b/tests/basic_tests.c
+index da5c0d4..2db2a76 100644
+--- a/tests/basic_tests.c
++++ b/tests/basic_tests.c
+@@ -4440,6 +4440,46 @@ START_TEST(test_unknown_encoding_invalid_attr_value) {
+ }
+ END_TEST
+ 
++START_TEST(test_unknown_encoding_user_data_primary) {
++  // This test is based on ideas contributed by Artiphishell Inc.
++  const char *const text = "\n"
++                           "\n";
++  XML_Parser parser = XML_ParserCreate(NULL);
++  XML_SetUnknownEncodingHandler(parser,
++                                user_data_checking_unknown_encoding_handler,
++                                (void *)(intptr_t)0xC0FFEE);
++
++  assert_true(_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
++              == XML_STATUS_OK);
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
++START_TEST(test_unknown_encoding_user_data_secondary) {
++  // This test is based on ideas contributed by Artiphishell Inc.
++  const char *const text_main = "\n"
++                                "]>\n"
++                                "&ext;\n";
++  const char *const text_external = "\n"
++                                    "data";
++  ExtTest2 test_data = {text_external, (int)strlen(text_external), NULL, NULL};
++  XML_Parser parser = XML_ParserCreate(NULL);
++  XML_SetExternalEntityRefHandler(parser, external_entity_loader2);
++  XML_SetUnknownEncodingHandler(parser,
++                                user_data_checking_unknown_encoding_handler,
++                                (void *)(intptr_t)0xC0FFEE);
++  XML_SetUserData(parser, &test_data);
++
++  assert_true(_XML_Parse_SINGLE_BYTES(parser, text_main, (int)strlen(text_main),
++                                      XML_TRUE)
++              == XML_STATUS_OK);
++
++  XML_ParserFree(parser);
++}
++END_TEST
++
+ /* Test an external entity parser set to use latin-1 detects UTF-16
+  * BOMs correctly.
+  */
+@@ -6284,6 +6324,8 @@ make_basic_test_case(Suite *s) {
+   tcase_add_test(tc_basic, test_unknown_encoding_invalid_surrogate);
+   tcase_add_test(tc_basic, test_unknown_encoding_invalid_high);
+   tcase_add_test(tc_basic, test_unknown_encoding_invalid_attr_value);
++  tcase_add_test(tc_basic, test_unknown_encoding_user_data_primary);
++  tcase_add_test(tc_basic, test_unknown_encoding_user_data_secondary);
+   tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16le_bom);
+   tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16be_bom);
+   tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16le_bom2);
+diff --git a/tests/handlers.c b/tests/handlers.c
+index bdb5b0e..5078014 100644
+--- a/tests/handlers.c
++++ b/tests/handlers.c
+@@ -45,6 +45,7 @@
+ #  undef NDEBUG /* because test suite relies on assert(...) at the moment */
+ #endif
+ 
++#include 
+ #include 
+ #include 
+ #include 
+@@ -407,6 +408,15 @@ long_encoding_handler(void *userData, const XML_Char *encoding,
+   return XML_STATUS_OK;
+ }
+ 
++int XMLCALL
++user_data_checking_unknown_encoding_handler(void *userData,
++                                            const XML_Char *encoding,
++                                            XML_Encoding *info) {
++  const intptr_t number = (intptr_t)userData;
++  assert_true(number == 0xC0FFEE);
++  return long_encoding_handler(userData, encoding, info);
++}
++
+ /* External Entity Handlers */
+ 
+ int XMLCALL
+diff --git a/tests/handlers.h b/tests/handlers.h
+index 4d6a08d..ac4ca94 100644
+--- a/tests/handlers.h
++++ b/tests/handlers.h
+@@ -159,6 +159,9 @@ extern int XMLCALL long_encoding_handler(void *userData,
+                                          const XML_Char *encoding,
+                                          XML_Encoding *info);
+ 
++extern int XMLCALL user_data_checking_unknown_encoding_handler(
++    void *userData, const XML_Char *encoding, XML_Encoding *info);
++
+ /* External Entity Handlers */
+ 
+ typedef struct ExtOption {
+-- 
+2.45.4
+
+
+From dea97bc0c894b5494f2e4d46d6076d49dc227e8f Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping 
+Date: Sun, 18 Jan 2026 18:19:25 +0100
+Subject: [PATCH 3/3] Changes: Document CVE-2026-24515
+
+-- 
+2.45.4
+
diff --git a/SPECS/expat/CVE-2026-25210.patch b/SPECS/expat/CVE-2026-25210.patch
new file mode 100644
index 0000000000..204ac03cca
--- /dev/null
+++ b/SPECS/expat/CVE-2026-25210.patch
@@ -0,0 +1,93 @@
+From 5ffd029337a8db6b3bef77ecd0a040b3e1e573f2 Mon Sep 17 00:00:00 2001
+From: Matthew Fernandez 
+Date: Thu, 2 Oct 2025 17:15:15 -0700
+Subject: [PATCH 1/3] lib: Make a doubling more readable
+
+Suggested-by: Sebastian Pipping 
+---
+ lib/xmlparse.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/xmlparse.c b/lib/xmlparse.c
+index d804753..a48acd2 100644
+--- a/lib/xmlparse.c
++++ b/lib/xmlparse.c
+@@ -3492,7 +3492,7 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
+             tag->name.strLen = convLen;
+             break;
+           }
+-          bufSize = (int)(tag->bufEnd - tag->buf) << 1;
++          bufSize = (int)(tag->bufEnd - tag->buf) * 2;
+           {
+             char *temp = (char *)REALLOC(parser, tag->buf, bufSize);
+             if (temp == NULL)
+-- 
+2.45.4
+
+
+From 07d55b4f18ded4740946a9a436e787b3c178176c Mon Sep 17 00:00:00 2001
+From: Matthew Fernandez 
+Date: Thu, 2 Oct 2025 17:15:15 -0700
+Subject: [PATCH 2/3] lib: Realign a size with the `REALLOC` type signature it
+ is passed into
+
+Note that this implicitly assumes `tag->bufEnd >= tag->buf`, which should
+already be guaranteed true.
+---
+ lib/xmlparse.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/lib/xmlparse.c b/lib/xmlparse.c
+index a48acd2..ed505b7 100644
+--- a/lib/xmlparse.c
++++ b/lib/xmlparse.c
+@@ -3481,7 +3481,6 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
+         const char *fromPtr = tag->rawName;
+         toPtr = (XML_Char *)tag->buf;
+         for (;;) {
+-          int bufSize;
+           int convLen;
+           const enum XML_Convert_Result convert_res
+               = XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr,
+@@ -3492,7 +3491,7 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
+             tag->name.strLen = convLen;
+             break;
+           }
+-          bufSize = (int)(tag->bufEnd - tag->buf) * 2;
++          const size_t bufSize = (size_t)(tag->bufEnd - tag->buf) * 2;
+           {
+             char *temp = (char *)REALLOC(parser, tag->buf, bufSize);
+             if (temp == NULL)
+-- 
+2.45.4
+
+
+From 3776e1554b8b9506387ec8a0591560898fb1ef87 Mon Sep 17 00:00:00 2001
+From: Matthew Fernandez 
+Date: Thu, 2 Oct 2025 17:15:15 -0700
+Subject: [PATCH 3/3] lib: Introduce an integer overflow check for tag buffer
+ reallocation
+
+Suggested-by: Sebastian Pipping 
+Signed-off-by: Azure Linux Security Servicing Account 
+Upstream-reference: https://github.com/libexpat/libexpat/pull/1075.patch
+---
+ lib/xmlparse.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lib/xmlparse.c b/lib/xmlparse.c
+index ed505b7..0bf913c 100644
+--- a/lib/xmlparse.c
++++ b/lib/xmlparse.c
+@@ -3491,6 +3491,8 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
+             tag->name.strLen = convLen;
+             break;
+           }
++          if (SIZE_MAX / 2 < (size_t)(tag->bufEnd - tag->buf))
++            return XML_ERROR_NO_MEMORY;
+           const size_t bufSize = (size_t)(tag->bufEnd - tag->buf) * 2;
+           {
+             char *temp = (char *)REALLOC(parser, tag->buf, bufSize);
+-- 
+2.45.4
+
diff --git a/SPECS/expat/expat.signatures.json b/SPECS/expat/expat.signatures.json
new file mode 100644
index 0000000000..faaee12cd6
--- /dev/null
+++ b/SPECS/expat/expat.signatures.json
@@ -0,0 +1,5 @@
+{
+ "Signatures": {
+  "expat-2.6.4.tar.bz2": "8dc480b796163d4436e6f1352e71800a774f73dbae213f1860b60607d2a83ada"
+ }
+}
\ No newline at end of file
diff --git a/SPECS/expat/expat.spec b/SPECS/expat/expat.spec
new file mode 100644
index 0000000000..93ba48e069
--- /dev/null
+++ b/SPECS/expat/expat.spec
@@ -0,0 +1,148 @@
+%define         underscore_version %(echo %{version} | cut -d. -f1-3 --output-delimiter="_")
+Summary:        An XML parser library
+Name:           expat
+Version:        2.6.4
+Release:        4%{?dist}
+License:        MIT
+Vendor:         Intel Corporation
+Distribution:   Edge Microvisor Toolkit
+Group:          System Environment/GeneralLibraries
+URL:            https://libexpat.github.io/
+Source0:        https://github.com/libexpat/libexpat/releases/download/R_%{underscore_version}/%{name}-%{version}.tar.bz2
+Patch0:         CVE-2024-8176.patch
+Patch1:         CVE-2025-59375.patch
+Patch2:         CVE-2026-24515.patch
+Patch3:         CVE-2026-25210.patch
+Requires:       %{name}-libs = %{version}-%{release}
+
+BuildRequires: autoconf, libtool, xmlto, gcc-c++
+BuildRequires: make
+BuildRequires: gnupg2
+
+%description
+The Expat package contains a stream oriented C library for parsing XML.
+
+%package devel
+Summary:        Header and development files for expat
+Requires:       %{name} = %{version}-%{release}
+
+%description    devel
+It contains the libraries and header files to create applications
+
+%package libs
+Summary:        Libraries for expat
+Group:          System Environment/Libraries
+
+%description libs
+This package contains minimal set of shared expat libraries.
+
+%prep
+%autosetup -p1
+
+%build
+%configure \
+	CFLAGS="%{optflags}" \
+	CXXFLAGS="%{optflags}" \
+	--disable-static
+%make_build
+
+%install
+%make_install
+find %{buildroot} -type f -name "*.la" -delete -print
+rm -rf %{buildroot}/%{_docdir}/%{name}
+%{_fixperms} %{buildroot}/*
+
+%check
+%make_build check
+
+%ldconfig_scriptlets
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS Changes
+%{_bindir}/*
+
+%files devel
+%{_includedir}/*
+%{_libdir}/pkgconfig/*
+%{_libdir}/libexpat.so
+%{_libdir}/cmake/expat-%{version}
+%{_mandir}/man1/xmlwf.1.gz
+
+%files libs
+%license COPYING
+%{_libdir}/libexpat.so.1*
+
+%changelog
+* Thu Jan 8 2025 Lee Chee Yang  - 2.6.4-4
+- add BuildRequires
+- Patch for CVE-2026-25210
+- Patch for CVE-2026-24515
+- Initial Edge Microvisor Toolkit import from Azure Linux (license: MIT).
+
+* Tue Sep 23 2025 Akhila Guruju  - 2.6.4-2
+- Fix CVE-2025-59375 with a patch
+
+* Thu Mar 20 2025 Kshitiz Godara  - 2.6.4-1
+- Fix CVE-2024-8176 with a patch
+
+* Wed Oct 30 2024 Sindhu Karri  - 2.6.3-2
+- Fix CVE-2024-50602 with a patch
+
+* Wed Sep 04 2024 Gary Swalling  - 2.6.3-1
+- Upgrade to 2.6.3 to fix CVE-2024-45490, CVE-2024-45491, CVE-2024-45492
+
+* Wed May 22 2024 Neha Agarwal  - 2.6.2-1
+- Upgrade to v2.6.2 to fix CVE-2024-28757
+
+* Wed Oct 26 2022 CBL-Mariner Servicing Account  - 2.5.0-1
+- Upgrade to 2.5.0
+
+* Mon Sep 19 2022 Betty Lakes  - 2.4.8-2
+- Add the patch to address CVE-2022-40674
+
+* Wed Apr 13 2022 Rachel Menge  - 2.4.8-1
+- Update source to 2.4.8 to address CVE-2022-23852, CVE-2022-23990,
+  CVE-2022-25235, CVE-2022-25236
+
+* Tue Apr 12 2022 Pawel Winogrodzki  - 2.4.3-2
+- Fixing "%%underscore_version" macro definition.
+
+* Sun Jan 16 2022 Rachel Menge  - 2.4.3-1
+- Update source to 2.4.3 to address CVE-2021-46143, CVE-2021-45960,
+  CVE-2022-22822 to CVE-2022-22827
+
+* Fri Nov 19 2021 Max Brodeur-Urbas  - 2.4.1-1
+- Update to 2.4.1
+- License verified
+- Removed reference to manfiles, generation causes circular dependency.
+
+* Sat May 09 2020 Nick Samson  - 2.2.6-4
+- Added %%license line automatically
+
+* Wed Apr 22 2020 Nicolas Ontiveros  2.2.6-3
+- Fix CVE-2018-20843.
+- Remove sha1 macro.
+- Update URL.
+- Update Source0.
+
+* Tue Sep 03 2019 Mateusz Malisz  2.2.6-2
+- Initial CBL-Mariner import from Photon (license: Apache2).
+
+* Thu Sep 20 2018 Sujay G  2.2.6-1
+- Bump expat version to 2.2.6
+
+* Tue Sep 26 2017 Anish Swaminathan  2.2.4-1
+- Updating version, fixes CVE-2017-9233,  CVE-2016-9063, CVE-2016-0718
+
+* Fri Apr 14 2017 Alexey Makhalov  2.2.0-2
+- Added -libs and -devel subpackages
+
+* Fri Oct 21 2016 Kumar Kaushik  2.2.0-1
+- Updating Source/Fixing CVE-2015-1283.
+
+* Tue May 24 2016 Priyesh Padmavilasom  2.1.0-2
+- GA - Bump release of all rpms
+
+* Wed Nov 5 2014 Divya Thaluru  2.1.0-1
+- Initial build. First version
diff --git a/SPECS/fluent-bit/CVE-2025-12969.patch b/SPECS/fluent-bit/CVE-2025-12969.patch
new file mode 100644
index 0000000000..1515d2a49c
--- /dev/null
+++ b/SPECS/fluent-bit/CVE-2025-12969.patch
@@ -0,0 +1,321 @@
+From e42b5cebbdd3d9c702babf446a3143abf78e2d87 Mon Sep 17 00:00:00 2001
+From: Hiroshi Hatake 
+Date: Fri, 3 Oct 2025 16:14:34 +0900
+Subject: [PATCH] in_forward: Handle shared_key lifetime correctly
+
+Signed-off-by: Hiroshi Hatake 
+
+Upstream Patch reference: https://patch-diff.githubusercontent.com/raw/fluent/fluent-bit/pull/10973.diff
+---
+ plugins/in_forward/fw.c        |  10 +++
+ plugins/in_forward/fw.h        |   4 +-
+ plugins/in_forward/fw_config.c |  41 +++++++--
+ plugins/in_forward/fw_conn.c   |  13 ++-
+ tests/runtime/in_forward.c     | 156 +++++++++++++++++++++++++++++++++
+ 5 files changed, 215 insertions(+), 9 deletions(-)
+
+diff --git a/plugins/in_forward/fw.c b/plugins/in_forward/fw.c
+index 20c3946..9b55409 100644
+--- a/plugins/in_forward/fw.c
++++ b/plugins/in_forward/fw.c
+@@ -334,6 +334,16 @@ static int in_fw_init(struct flb_input_instance *ins,
+         return -1;
+     }
+ 
++    /* Users-only configuration must be rejected unless a (possibly empty) shared key is enabled. */
++    if (mk_list_size(&ctx->users) > 0 &&
++        ctx->shared_key == NULL &&
++        ctx->empty_shared_key == FLB_FALSE) {
++        flb_plg_error(ctx->ins, "security.users is set but no shared_key or empty_shared_key");
++        delete_users(ctx);
++        fw_config_destroy(ctx);
++        return -1;
++    }
++
+     flb_input_downstream_set(ctx->downstream, ctx->ins);
+ 
+     flb_net_socket_nonblocking(ctx->downstream->server_fd);
+diff --git a/plugins/in_forward/fw.h b/plugins/in_forward/fw.h
+index 4cd270e..455826a 100644
+--- a/plugins/in_forward/fw.h
++++ b/plugins/in_forward/fw.h
+@@ -60,9 +60,11 @@ struct flb_in_fw_config {
+     flb_sds_t unix_perm_str;        /* Permission (config map)     */
+ 
+     /* secure forward */
+-    flb_sds_t shared_key;        /* shared key                   */
++    flb_sds_t shared_key;         /* shared key      */
++    int owns_shared_key;          /* own flag of shared key */
+     flb_sds_t self_hostname;     /* hostname used in certificate  */
+     struct mk_list users;        /* username and password pairs  */
++    int empty_shared_key;        /* use an empty string as shared key */
+ 
+     int coll_fd;
+     struct flb_downstream *downstream; /* Client manager          */
+diff --git a/plugins/in_forward/fw_config.c b/plugins/in_forward/fw_config.c
+index b3a2293..235ee8c 100644
+--- a/plugins/in_forward/fw_config.c
++++ b/plugins/in_forward/fw_config.c
+@@ -26,6 +26,35 @@
+ #include "fw_conn.h"
+ #include "fw_config.h"
+ 
++static void fw_destroy_shared_key(struct flb_in_fw_config *config)
++{
++    if (config->owns_shared_key && config->shared_key) {
++        flb_sds_destroy(config->shared_key);
++    }
++
++    config->shared_key = NULL;
++    config->owns_shared_key = FLB_FALSE;
++}
++
++static int fw_create_empty_shared_key(struct flb_in_fw_config *config,
++                                      struct flb_input_instance *i_ins)
++{
++    flb_sds_t empty_key = flb_sds_create("");
++    if (!empty_key) {
++        flb_plg_error(i_ins, "empty shared_key alloc failed");
++        return -1;
++    }
++    else {
++        if (config->owns_shared_key && config->shared_key) {
++            flb_sds_destroy(config->shared_key);
++        }
++        config->shared_key = empty_key;
++        config->owns_shared_key = FLB_TRUE;
++    }
++
++    return 0;
++}
++
+ struct flb_in_fw_config *fw_config_init(struct flb_input_instance *i_ins)
+ {
+     char tmp[16];
+@@ -86,12 +115,10 @@ struct flb_in_fw_config *fw_config_init(struct flb_input_instance *i_ins)
+     }
+ 
+     /* Shared Key */
+-    p = flb_input_get_property("shared_key", i_ins);
+-    if (p) {
+-        config->shared_key = flb_sds_create(p);
+-    }
+-    else {
+-        config->shared_key = NULL;
++    if (config->empty_shared_key) {
++        if (fw_create_empty_shared_key(config, i_ins) == -1) {
++            return NULL;
++        }
+     }
+ 
+     /* Self Hostname */
+@@ -132,7 +159,7 @@ int fw_config_destroy(struct flb_in_fw_config *config)
+         flb_free(config->tcp_port);
+     }
+ 
+-    flb_sds_destroy(config->shared_key);
++    fw_destroy_shared_key(config);
+     flb_sds_destroy(config->self_hostname);
+ 
+     flb_free(config);
+diff --git a/plugins/in_forward/fw_conn.c b/plugins/in_forward/fw_conn.c
+index 9446525..90219d0 100644
+--- a/plugins/in_forward/fw_conn.c
++++ b/plugins/in_forward/fw_conn.c
+@@ -142,7 +142,18 @@ struct fw_conn *fw_conn_add(struct flb_connection *connection, struct flb_in_fw_
+     }
+ 
+     conn->handshake_status = FW_HANDSHAKE_ESTABLISHED;
+-    if (ctx->shared_key != NULL) {
++    /*
++     * Always force the secure-forward handshake when:
++     *  - a shared key is configured, or
++     *  - empty_shared_key is enabled (empty string shared key), or
++     *  - user authentication is configured (users > 0).
++     *
++     * This closes the gap where "users-only" previously skipped authentication entirely.
++     */
++    conn->handshake_status = FW_HANDSHAKE_ESTABLISHED; /* default */
++    if (ctx->shared_key != NULL ||
++        ctx->empty_shared_key == FLB_TRUE ||
++        mk_list_size(&ctx->users) > 0) {
+         conn->handshake_status = FW_HANDSHAKE_HELO;
+         helo = flb_malloc(sizeof(struct flb_in_fw_helo));
+         if (!helo) {
+diff --git a/tests/runtime/in_forward.c b/tests/runtime/in_forward.c
+index 6cabfa9..fdef739 100644
+--- a/tests/runtime/in_forward.c
++++ b/tests/runtime/in_forward.c
+@@ -566,6 +566,158 @@ void flb_test_unix_perm()
+ #endif /* FLB_HAVE_UNIX_SOCKET */
+ 
+ 
++static int cb_count_only(void *record, size_t size, void *data)
++{
++    int n = get_output_num();
++    set_output_num(n + 1);
++    flb_free(record);
++    return 0;
++}
++
++
++static flb_ctx_t *fw_make_ctx_with_forward(int *in_ffd_out, int *out_ffd_out)
++{
++    struct flb_lib_out_cb cb = {0};
++    flb_ctx_t *ctx;
++    int in_ffd, out_ffd, ret;
++
++    ctx = flb_create();
++    TEST_CHECK(ctx != NULL);
++    if (!ctx) { return NULL; }
++
++    flb_service_set(ctx,
++                    "Flush", "0.200000000",
++                    "Grace", "1",
++                    "Log_Level", "error",
++                    NULL);
++
++    /* forward input */
++    in_ffd = flb_input(ctx, (char *) "forward", NULL);
++    TEST_CHECK(in_ffd >= 0);
++    if (in_ffd < 0) { flb_destroy(ctx); return NULL; }
++
++    /* lib output: count only (no payload check) */
++    cb.cb   = cb_count_only;
++    cb.data = NULL;
++    out_ffd = flb_output(ctx, (char *) "lib", (void *) &cb);
++    TEST_CHECK(out_ffd >= 0);
++    if (out_ffd < 0) {
++        flb_destroy(ctx);
++        return NULL;
++    }
++    ret = flb_output_set(ctx, out_ffd,
++                         "match", "*",
++                         "format", "json",
++                         NULL);
++    TEST_CHECK(ret == 0);
++
++    if (in_ffd_out)  *in_ffd_out  = in_ffd;
++    if (out_ffd_out) *out_ffd_out = out_ffd;
++    return ctx;
++}
++
++/* 1) users-only => must fail to start (fail-close) */
++void flb_test_fw_auth_users_only_fail_start()
++{
++    flb_ctx_t *ctx;
++    int in_ffd, out_ffd, ret;
++
++    ctx = fw_make_ctx_with_forward(&in_ffd, &out_ffd);
++    TEST_CHECK(ctx != NULL);
++    if (!ctx) {
++        return;
++    }
++
++    ret = flb_input_set(ctx, in_ffd,
++                        "tag", "test",
++                        "security.users", "alice s3cr3t",
++                        NULL);
++    TEST_CHECK(ret == 0);
++
++    ret = flb_start(ctx);
++    TEST_CHECK(ret != 0);
++    if (ret == 0) {
++        TEST_MSG("users-only config unexpectedly started; fail-close not enforced");
++        flb_stop(ctx);
++    }
++    flb_destroy(ctx);
++}
++
++/* 2) empty_shared_key + users => start OK */
++void flb_test_fw_auth_empty_shared_key_plus_users_start_ok()
++{
++    flb_ctx_t *ctx;
++    int in_ffd, out_ffd, ret;
++
++    ctx = fw_make_ctx_with_forward(&in_ffd, &out_ffd);
++    TEST_CHECK(ctx != NULL);
++    if (!ctx) { return; }
++
++    ret = flb_input_set(ctx, in_ffd,
++                        "tag", "test",
++                        "empty_shared_key", "true",
++                        "security.users", "alice s3cr3t",
++                        NULL);
++    TEST_CHECK(ret == 0);
++
++    ret = flb_start(ctx);
++    TEST_CHECK(ret == 0);
++    if (ret == 0) {
++        flb_stop(ctx);
++    }
++    flb_destroy(ctx);
++}
++
++/* 3) shared_key only => start OK (backward compatible) */
++void flb_test_fw_auth_shared_key_only_start_ok()
++{
++    flb_ctx_t *ctx;
++    int in_ffd, out_ffd, ret;
++
++    ctx = fw_make_ctx_with_forward(&in_ffd, &out_ffd);
++    TEST_CHECK(ctx != NULL);
++    if (!ctx) { return; }
++
++    ret = flb_input_set(ctx, in_ffd,
++                        "tag", "test",
++                        "shared_key", "k",
++                        NULL);
++    TEST_CHECK(ret == 0);
++
++    ret = flb_start(ctx);
++    TEST_CHECK(ret == 0);
++    if (ret == 0) {
++        flb_stop(ctx);
++    }
++    flb_destroy(ctx);
++}
++
++/* 4) shared_key + users => start OK (both checks) */
++void flb_test_fw_auth_shared_key_plus_users_start_ok()
++{
++    flb_ctx_t *ctx;
++    int in_ffd, out_ffd, ret;
++
++    ctx = fw_make_ctx_with_forward(&in_ffd, &out_ffd);
++    TEST_CHECK(ctx != NULL);
++    if (!ctx) { return; }
++
++    ret = flb_input_set(ctx, in_ffd,
++                        "tag", "test",
++                        "shared_key", "k",
++                        "security.users", "alice s3cr3t",
++                        NULL);
++    TEST_CHECK(ret == 0);
++
++    ret = flb_start(ctx);
++    TEST_CHECK(ret == 0);
++    if (ret == 0) {
++        flb_stop(ctx);
++    }
++    flb_destroy(ctx);
++}
++
++
+ TEST_LIST = {
+     {"forward", flb_test_forward},
+     {"forward_port", flb_test_forward_port},
+@@ -574,6 +726,10 @@ TEST_LIST = {
+     {"unix_path", flb_test_unix_path},
+     {"unix_perm", flb_test_unix_perm},
+ #endif
++    {"fw_auth_users_only_fail_start", flb_test_fw_auth_users_only_fail_start},
++    {"fw_auth_empty_shared_key_plus_users_start_ok", flb_test_fw_auth_empty_shared_key_plus_users_start_ok},
++    {"fw_auth_shared_key_only_start_ok", flb_test_fw_auth_shared_key_only_start_ok},
++    {"fw_auth_shared_key_plus_users_start_ok", flb_test_fw_auth_shared_key_plus_users_start_ok},
+     {NULL, NULL}
+ };
+ 
+-- 
+2.45.4
+
diff --git a/SPECS/fluent-bit/CVE-2025-12970.patch b/SPECS/fluent-bit/CVE-2025-12970.patch
new file mode 100644
index 0000000000..7cd290adb4
--- /dev/null
+++ b/SPECS/fluent-bit/CVE-2025-12970.patch
@@ -0,0 +1,191 @@
+From 8a25d3b24fa4edde3e9cfdb878ce6c2c6e3d7e5b Mon Sep 17 00:00:00 2001
+From: Eduardo Silva 
+Date: Thu, 2 Oct 2025 16:36:54 -0600
+Subject: [PATCH] in_docker: add helper for container name parsing
+
+Signed-off-by: Eduardo Silva 
+Signed-off-by: Azure Linux Security Servicing Account 
+Upstream-reference: https://github.com/fluent/fluent-bit/pull/10972.patch
+---
+ plugins/in_docker/cgroup_v1.c | 32 +----------------------
+ plugins/in_docker/cgroup_v2.c | 32 +----------------------
+ plugins/in_docker/docker.c    | 48 +++++++++++++++++++++++++++++++++++
+ plugins/in_docker/docker.h    |  2 ++
+ 4 files changed, 52 insertions(+), 62 deletions(-)
+
+diff --git a/plugins/in_docker/cgroup_v1.c b/plugins/in_docker/cgroup_v1.c
+index ab40147..86a64b1 100644
+--- a/plugins/in_docker/cgroup_v1.c
++++ b/plugins/in_docker/cgroup_v1.c
+@@ -213,36 +213,6 @@ static char *get_config_file(struct flb_docker *ctx, char *id)
+     return path;
+ }
+ 
+-static char *extract_name(char *line, char *start)
+-{
+-    int skip = 9;
+-    int len = 0;
+-    char *name;
+-    char buff[256];
+-    char *curr;
+-
+-    if (start != NULL) {
+-        curr = start + skip;
+-        while (*curr != '"') {
+-            buff[len++] = *curr;
+-            curr++;
+-        }
+-
+-        if (len > 0) {
+-            name = (char *) flb_calloc(len + 1, sizeof(char));
+-            if (!name) {
+-                flb_errno();
+-                return NULL;
+-            }
+-            memcpy(name, buff, len);
+-
+-            return name;
+-        }
+-    }
+-
+-    return NULL;
+-}
+-
+ static char *get_container_name(struct flb_docker *ctx, char *id)
+ {
+     char *container_name = NULL;
+@@ -266,7 +236,7 @@ static char *get_container_name(struct flb_docker *ctx, char *id)
+     while ((line = read_line(f))) {
+         char *index = strstr(line, DOCKER_NAME_ARG);
+         if (index != NULL) {
+-            container_name = extract_name(line, index);
++            container_name = docker_extract_name(line, index);
+             flb_free(line);
+             break;
+         }
+diff --git a/plugins/in_docker/cgroup_v2.c b/plugins/in_docker/cgroup_v2.c
+index 295483c..301fceb 100644
+--- a/plugins/in_docker/cgroup_v2.c
++++ b/plugins/in_docker/cgroup_v2.c
+@@ -230,36 +230,6 @@ static char *get_config_file(struct flb_docker *ctx, char *id)
+     return path;
+ }
+ 
+-static char *extract_name(char *line, char *start)
+-{
+-    int skip = 9;
+-    int len = 0;
+-    char *name;
+-    char buff[256];
+-    char *curr;
+-
+-    if (start != NULL) {
+-        curr = start + skip;
+-        while (*curr != '"') {
+-            buff[len++] = *curr;
+-            curr++;
+-        }
+-
+-        if (len > 0) {
+-            name = (char *) flb_calloc(len + 1, sizeof(char));
+-            if (!name) {
+-                flb_errno();
+-                return NULL;
+-            }
+-            memcpy(name, buff, len);
+-
+-            return name;
+-        }
+-    }
+-
+-    return NULL;
+-}
+-
+ static char *get_container_name(struct flb_docker *ctx, char *id)
+ {
+     char *container_name = NULL;
+@@ -283,7 +253,7 @@ static char *get_container_name(struct flb_docker *ctx, char *id)
+     while ((line = read_line(f))) {
+         char *index = strstr(line, DOCKER_NAME_ARG);
+         if (index != NULL) {
+-            container_name = extract_name(line, index);
++            container_name = docker_extract_name(line, index);
+             flb_free(line);
+             break;
+         }
+diff --git a/plugins/in_docker/docker.c b/plugins/in_docker/docker.c
+index 2a1389e..5701c68 100644
+--- a/plugins/in_docker/docker.c
++++ b/plugins/in_docker/docker.c
+@@ -29,9 +29,57 @@
+ #include 
+ #include 
+ #include 
++#include 
+ 
+ #include "docker.h"
+ 
++char *docker_extract_name(const char *line, const char *start)
++{
++    const char *curr;
++    const char *end;
++    size_t len;
++    char *name;
++
++    if (line == NULL || start == NULL) {
++        return NULL;
++    }
++
++    curr = start + strlen(DOCKER_NAME_ARG);
++    if (*curr != ':') {
++        curr = strchr(curr, ':');
++        if (curr == NULL) {
++            return NULL;
++        }
++    }
++
++    curr++;
++    while (*curr != '\0' && isspace((unsigned char) *curr)) {
++        curr++;
++    }
++
++    if (*curr != '"') {
++        return NULL;
++    }
++
++    curr++;
++    end = strchr(curr, '"');
++    if (end == NULL || end <= curr) {
++        return NULL;
++    }
++
++    len = end - curr;
++    name = flb_malloc(len + 1);
++    if (name == NULL) {
++        flb_errno();
++        return NULL;
++    }
++
++    memcpy(name, curr, len);
++    name[len] = '\0';
++
++    return name;
++}
++
+ static int cb_docker_collect(struct flb_input_instance *i_ins,
+                              struct flb_config *config, void *in_context);
+ 
+diff --git a/plugins/in_docker/docker.h b/plugins/in_docker/docker.h
+index e6f61c1..9a1c9ae 100644
+--- a/plugins/in_docker/docker.h
++++ b/plugins/in_docker/docker.h
+@@ -119,4 +119,6 @@ struct flb_docker {
+ int in_docker_collect(struct flb_input_instance *i_ins,
+                       struct flb_config *config, void *in_context);
+ docker_info *in_docker_init_docker_info(char *id);
++char *docker_extract_name(const char *line, const char *start);
++
+ #endif
+-- 
+2.45.4
+
diff --git a/SPECS/fluent-bit/CVE-2025-12977.patch b/SPECS/fluent-bit/CVE-2025-12977.patch
new file mode 100644
index 0000000000..fd7c70f1d1
--- /dev/null
+++ b/SPECS/fluent-bit/CVE-2025-12977.patch
@@ -0,0 +1,595 @@
+From d9fa9ab839ec684efd0132d6d672a0cf961790a1 Mon Sep 17 00:00:00 2001
+From: Eduardo Silva 
+Date: Thu, 2 Oct 2025 10:40:39 -0600
+Subject: [PATCH] in_elasticsearch: reimplement tag_key lookup with record
+ accessor api
+
+Replace manual key lookup with record accessor pattern for better
+performance and support for nested/complex key patterns.
+
+Signed-off-by: Eduardo Silva 
+
+Upstream Patch reference: https://patch-diff.githubusercontent.com/raw/fluent/fluent-bit/pull/10967.diff
+---
+ plugins/in_elasticsearch/in_elasticsearch.h   |   6 +-
+ .../in_elasticsearch_bulk_prot.c              |  77 ++++---------
+ .../in_elasticsearch_config.c                 |  13 +++
+ plugins/in_http/http.h                        |   4 +-
+ plugins/in_http/http_config.c                 |  17 ++-
+ plugins/in_http/http_prot.c                   | 104 +++++++-----------
+ plugins/in_splunk/splunk.c                    |   6 +
+ plugins/in_splunk/splunk.h                    |   4 +-
+ plugins/in_splunk/splunk_config.c             |  14 +++
+ plugins/in_splunk/splunk_prot.c               |  76 ++++---------
+ 10 files changed, 143 insertions(+), 178 deletions(-)
+
+diff --git a/plugins/in_elasticsearch/in_elasticsearch.h b/plugins/in_elasticsearch/in_elasticsearch.h
+index 10deb62..7911cb7 100644
+--- a/plugins/in_elasticsearch/in_elasticsearch.h
++++ b/plugins/in_elasticsearch/in_elasticsearch.h
+@@ -25,6 +25,7 @@
+ #include 
+ #include 
+ #include 
++#include 
+ 
+ #include 
+ #include 
+@@ -35,14 +36,15 @@
+ struct flb_in_elasticsearch {
+     flb_sds_t listen;
+     flb_sds_t tcp_port;
+-    const char *tag_key;
+-    const char *meta_key;
++    flb_sds_t tag_key;
++    flb_sds_t meta_key;
+     flb_sds_t hostname;
+     flb_sds_t es_version;
+     char cluster_name[16];
+     char node_name[12];
+ 
+     struct flb_log_event_encoder *log_encoder;
++    struct flb_record_accessor *ra_tag_key;
+ 
+     struct flb_input_instance *ins;
+ 
+diff --git a/plugins/in_elasticsearch/in_elasticsearch_bulk_prot.c b/plugins/in_elasticsearch/in_elasticsearch_bulk_prot.c
+index c705af6..f7414a7 100644
+--- a/plugins/in_elasticsearch/in_elasticsearch_bulk_prot.c
++++ b/plugins/in_elasticsearch/in_elasticsearch_bulk_prot.c
+@@ -22,6 +22,8 @@
+ #include 
+ #include 
+ #include 
++#include 
++#include 
+ 
+ #include 
+ #include 
+@@ -245,67 +247,32 @@ static int send_response(struct in_elasticsearch_bulk_conn *conn, int http_statu
+ /* implements functionality to get tag from key in record */
+ static flb_sds_t tag_key(struct flb_in_elasticsearch *ctx, msgpack_object *map)
+ {
+-    size_t map_size = map->via.map.size;
+-    msgpack_object_kv *kv;
+-    msgpack_object  key;
+-    msgpack_object  val;
+-    char *key_str = NULL;
+-    char *val_str = NULL;
+-    size_t key_str_size = 0;
+-    size_t val_str_size = 0;
+-    int j;
+-    int check = FLB_FALSE;
+-    int found = FLB_FALSE;
+-    flb_sds_t tag;
+-
+-    kv = map->via.map.ptr;
++    flb_sds_t tag = NULL;
++    struct flb_ra_value *ra_val;
+ 
+-    for(j=0; j < map_size; j++) {
+-        check = FLB_FALSE;
+-        found = FLB_FALSE;
+-        key = (kv+j)->key;
+-        if (key.type == MSGPACK_OBJECT_BIN) {
+-            key_str  = (char *) key.via.bin.ptr;
+-            key_str_size = key.via.bin.size;
+-            check = FLB_TRUE;
+-        }
+-        if (key.type == MSGPACK_OBJECT_STR) {
+-            key_str  = (char *) key.via.str.ptr;
+-            key_str_size = key.via.str.size;
+-            check = FLB_TRUE;
+-        }
+-
+-        if (check == FLB_TRUE) {
+-            if (strncmp(ctx->tag_key, key_str, key_str_size) == 0) {
+-                val = (kv+j)->val;
+-                if (val.type == MSGPACK_OBJECT_BIN) {
+-                    val_str  = (char *) val.via.bin.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-                if (val.type == MSGPACK_OBJECT_STR) {
+-                    val_str  = (char *) val.via.str.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-            }
+-        }
++    /* If no record accessor is configured, return NULL */
++    if (!ctx->ra_tag_key) {
++        return NULL;
+     }
+ 
+-    if (found == FLB_TRUE) {
+-        tag = flb_sds_create_len(val_str, val_str_size);
+-        if (!tag) {
+-            flb_errno();
+-            return NULL;
+-        }
+-        return tag;
++    /* Use record accessor to get the value */
++    ra_val = flb_ra_get_value_object(ctx->ra_tag_key, *map);
++    if (!ra_val) {
++        flb_plg_warn(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
++        return NULL;
+     }
+ 
++    /* Convert the value to string */
++    if (ra_val->type == FLB_RA_STRING) {
++        tag = flb_sds_create_len(ra_val->o.via.str.ptr, ra_val->o.via.str.size);
++    }
++    else {
++        flb_plg_error(ctx->ins, "tag_key %s value is not a string or binary", ctx->tag_key);
++    }
+ 
+-    flb_plg_error(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
+-    return NULL;
++    /* Clean up the record accessor value */
++    flb_ra_key_value_destroy(ra_val);
++    return tag;
+ }
+ 
+ static int get_write_op(struct flb_in_elasticsearch *ctx, msgpack_object *map, flb_sds_t *out_write_op, size_t *out_key_size)
+diff --git a/plugins/in_elasticsearch/in_elasticsearch_config.c b/plugins/in_elasticsearch/in_elasticsearch_config.c
+index 56b5a4e..18da268 100644
+--- a/plugins/in_elasticsearch/in_elasticsearch_config.c
++++ b/plugins/in_elasticsearch/in_elasticsearch_config.c
+@@ -67,12 +67,25 @@ struct flb_in_elasticsearch *in_elasticsearch_config_create(struct flb_input_ins
+         return NULL;
+     }
+ 
++    /* Create record accessor for tag_key if specified */
++    if (ctx->tag_key) {
++        ctx->ra_tag_key = flb_ra_create(ctx->tag_key, FLB_TRUE);
++        if (!ctx->ra_tag_key) {
++            flb_plg_error(ctx->ins, "invalid record accessor pattern for tag_key: %s", ctx->tag_key);
++            in_elasticsearch_config_destroy(ctx);
++            return NULL;
++        }
++    }
+ 
+     return ctx;
+ }
+ 
+ int in_elasticsearch_config_destroy(struct flb_in_elasticsearch *ctx)
+ {
++    if (ctx->ra_tag_key) {
++        flb_ra_destroy(ctx->ra_tag_key);
++    }
++
+     flb_log_event_encoder_destroy(ctx->log_encoder);
+ 
+     /* release all connections */
+diff --git a/plugins/in_http/http.h b/plugins/in_http/http.h
+index 4298a37..2e37967 100644
+--- a/plugins/in_http/http.h
++++ b/plugins/in_http/http.h
+@@ -25,6 +25,7 @@
+ #include 
+ #include 
+ #include 
++#include 
+ 
+ #include 
+ #include 
+@@ -36,7 +37,8 @@ struct flb_http {
+     int successful_response_code;
+     flb_sds_t listen;
+     flb_sds_t tcp_port;
+-    const char *tag_key;
++    flb_sds_t tag_key;
++    struct flb_record_accessor *ra_tag_key;
+ 
+     /* Success HTTP headers */
+     struct mk_list *success_headers;
+diff --git a/plugins/in_http/http_config.c b/plugins/in_http/http_config.c
+index 343e699..eb3afc8 100644
+--- a/plugins/in_http/http_config.c
++++ b/plugins/in_http/http_config.c
+@@ -69,9 +69,7 @@ struct flb_http *http_config_create(struct flb_input_instance *ins)
+ 
+     if (ret != FLB_EVENT_ENCODER_SUCCESS) {
+         flb_plg_error(ctx->ins, "error initializing event encoder : %d", ret);
+-
+         http_config_destroy(ctx);
+-
+         return NULL;
+     }
+ 
+@@ -79,10 +77,19 @@ struct flb_http *http_config_create(struct flb_input_instance *ins)
+ 
+     if (ctx->success_headers_str == NULL) {
+         http_config_destroy(ctx);
+-
+         return NULL;
+     }
+ 
++    /* Create record accessor for tag_key if specified */
++    if (ctx->tag_key) {
++        ctx->ra_tag_key = flb_ra_create(ctx->tag_key, FLB_TRUE);
++        if (!ctx->ra_tag_key) {
++            flb_plg_error(ctx->ins, "invalid record accessor pattern for tag_key: %s", ctx->tag_key);
++            http_config_destroy(ctx);
++            return NULL;
++        }
++    }
++
+     flb_config_map_foreach(header_iterator, header_pair, ctx->success_headers) {
+         header_name = mk_list_entry_first(header_pair->val.list,
+                                           struct flb_slist_entry,
+@@ -126,6 +133,10 @@ struct flb_http *http_config_create(struct flb_input_instance *ins)
+ 
+ int http_config_destroy(struct flb_http *ctx)
+ {
++    if (ctx->ra_tag_key) {
++        flb_ra_destroy(ctx->ra_tag_key);
++    }
++
+     /* release all connections */
+     http_conn_release_all(ctx);
+ 
+diff --git a/plugins/in_http/http_prot.c b/plugins/in_http/http_prot.c
+index f38264e..5d9bc8a 100644
+--- a/plugins/in_http/http_prot.c
++++ b/plugins/in_http/http_prot.c
+@@ -21,6 +21,8 @@
+ #include 
+ #include 
+ #include 
++#include 
++#include 
+ 
+ #include 
+ #include 
+@@ -36,8 +38,8 @@ static inline char hex2nibble(char c)
+     if ((c >= 0x30) && (c <= '9')) {
+         return c - 0x30;
+     }
+-    // 0x30-0x39 are digits, 0x41-0x46 A-F,
+-    // so there is a gap at 0x40
++
++    /* 0x30-0x39 are digits, 0x41-0x46 A-F, so there is a gap at 0x40 */
+     if ((c >= 'A') && (c <= 'F')) {
+         return (c - 'A') + 10;
+     }
+@@ -145,70 +147,54 @@ static int send_response(struct http_conn *conn, int http_status, char *message)
+     return 0;
+ }
+ 
+-/* implements functionality to get tag from key in record */
+-static flb_sds_t tag_key(struct flb_http *ctx, msgpack_object *map)
++static void sanitize_tag(flb_sds_t tag)
+ {
+-    size_t map_size = map->via.map.size;
+-    msgpack_object_kv *kv;
+-    msgpack_object  key;
+-    msgpack_object  val;
+-    char *key_str = NULL;
+-    char *val_str = NULL;
+-    size_t key_str_size = 0;
+-    size_t val_str_size = 0;
+-    int j;
+-    int check = FLB_FALSE;
+-    int found = FLB_FALSE;
+-    flb_sds_t tag;
++    size_t i;
+ 
+-    kv = map->via.map.ptr;
++    if (!tag) {
++        return;
++    }
+ 
+-    for(j=0; j < map_size; j++) {
+-        check = FLB_FALSE;
+-        found = FLB_FALSE;
+-        key = (kv+j)->key;
+-        if (key.type == MSGPACK_OBJECT_BIN) {
+-            key_str  = (char *) key.via.bin.ptr;
+-            key_str_size = key.via.bin.size;
+-            check = FLB_TRUE;
+-        }
+-        if (key.type == MSGPACK_OBJECT_STR) {
+-            key_str  = (char *) key.via.str.ptr;
+-            key_str_size = key.via.str.size;
+-            check = FLB_TRUE;
++    for (i = 0; i < flb_sds_len(tag); i++) {
++        if (!isalnum(tag[i]) && tag[i] != '_' && tag[i] != '.') {
++            tag[i] = '_';
+         }
++    }
++}
+ 
+-        if (check == FLB_TRUE) {
+-            if (strncmp(ctx->tag_key, key_str, key_str_size) == 0) {
+-                val = (kv+j)->val;
+-                if (val.type == MSGPACK_OBJECT_BIN) {
+-                    val_str  = (char *) val.via.bin.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-                if (val.type == MSGPACK_OBJECT_STR) {
+-                    val_str  = (char *) val.via.str.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-            }
+-        }
++/* implements functionality to get tag from key in record */
++static flb_sds_t tag_key(struct flb_http *ctx, msgpack_object *map)
++{
++    struct flb_ra_value *ra_val;
++    flb_sds_t tag = NULL;
++
++    /* If no record accessor is configured, return NULL */
++    if (!ctx->ra_tag_key) {
++        return NULL;
+     }
+ 
+-    if (found == FLB_TRUE) {
+-        tag = flb_sds_create_len(val_str, val_str_size);
+-        if (!tag) {
+-            flb_errno();
+-            return NULL;
++    /* Use record accessor to get the value */
++    ra_val = flb_ra_get_value_object(ctx->ra_tag_key, *map);
++    if (!ra_val) {
++        flb_plg_debug(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
++        return NULL;
++    }
++
++    /* Convert the value to string */
++    if (ra_val->type == FLB_RA_STRING) {
++        tag = flb_sds_create_len(ra_val->o.via.str.ptr, ra_val->o.via.str.size);
++        if (tag) {
++            sanitize_tag(tag);
+         }
+-        return tag;
++    }
++    else {
++        flb_plg_debug(ctx->ins, "tag_key %s value is not a string", ctx->tag_key);
+     }
+ 
++    /* Clean up the record accessor value */
++    flb_ra_key_value_destroy(ra_val);
+ 
+-    flb_plg_error(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
+-    return NULL;
++    return tag;
+ }
+ 
+ static int process_pack_record(struct flb_http *ctx, struct flb_time *tm,
+@@ -586,7 +572,6 @@ int http_prot_handle(struct flb_http *ctx, struct http_conn *conn,
+                      struct mk_http_session *session,
+                      struct mk_http_request *request)
+ {
+-    int i;
+     int ret;
+     int len;
+     char *uri;
+@@ -635,12 +620,7 @@ int http_prot_handle(struct flb_http *ctx, struct http_conn *conn,
+         /* New tag skipping the URI '/' */
+         flb_sds_cat_safe(&tag, uri + 1, len - 1);
+ 
+-        /* Sanitize, only allow alphanum chars */
+-        for (i = 0; i < flb_sds_len(tag); i++) {
+-            if (!isalnum(tag[i]) && tag[i] != '_' && tag[i] != '.') {
+-                tag[i] = '_';
+-            }
+-        }
++        sanitize_tag(tag);
+     }
+ 
+     mk_mem_free(uri);
+diff --git a/plugins/in_splunk/splunk.c b/plugins/in_splunk/splunk.c
+index b10dfa8..edab642 100644
+--- a/plugins/in_splunk/splunk.c
++++ b/plugins/in_splunk/splunk.c
+@@ -133,6 +133,9 @@ static int in_splunk_init(struct flb_input_instance *ins,
+         ctx->http_server.request_callback = splunk_prot_handle_ng;
+ 
+         flb_input_downstream_set(ctx->http_server.downstream, ctx->ins);
++
++        flb_plg_info(ctx->ins, "listening on %s:%u",
++                     ins->host.listen, ins->host.port);
+     }
+     else {
+         ctx->downstream = flb_downstream_create(FLB_TRANSPORT_TCP,
+@@ -155,6 +158,8 @@ static int in_splunk_init(struct flb_input_instance *ins,
+ 
+         flb_input_downstream_set(ctx->downstream, ctx->ins);
+ 
++        flb_plg_info(ctx->ins, "listening on %s:%s", ctx->listen, ctx->tcp_port);
++
+         /* Collect upon data available on the standard input */
+         ret = flb_input_set_collector_socket(ins,
+                                             in_splunk_collect,
+@@ -170,6 +175,7 @@ static int in_splunk_init(struct flb_input_instance *ins,
+         ctx->collector_id = ret;
+     }
+ 
++
+     return 0;
+ }
+ 
+diff --git a/plugins/in_splunk/splunk.h b/plugins/in_splunk/splunk.h
+index 5dc4645..ef04edf 100644
+--- a/plugins/in_splunk/splunk.h
++++ b/plugins/in_splunk/splunk.h
+@@ -25,6 +25,7 @@
+ #include 
+ #include 
+ #include 
++#include 
+ 
+ #include 
+ #include 
+@@ -41,7 +42,8 @@ struct flb_splunk_tokens {
+ struct flb_splunk {
+     flb_sds_t listen;
+     flb_sds_t tcp_port;
+-    const char *tag_key;
++    flb_sds_t tag_key;
++    struct flb_record_accessor *ra_tag_key;
+ 
+     /* Success HTTP headers */
+     struct mk_list *success_headers;
+diff --git a/plugins/in_splunk/splunk_config.c b/plugins/in_splunk/splunk_config.c
+index a7c5886..3907d5a 100644
+--- a/plugins/in_splunk/splunk_config.c
++++ b/plugins/in_splunk/splunk_config.c
+@@ -229,11 +229,25 @@ struct flb_splunk *splunk_config_create(struct flb_input_instance *ins)
+         }
+     }
+ 
++    /* Create record accessor for tag_key if specified */
++    if (ctx->tag_key) {
++        ctx->ra_tag_key = flb_ra_create(ctx->tag_key, FLB_TRUE);
++        if (!ctx->ra_tag_key) {
++            flb_plg_error(ctx->ins, "invalid record accessor pattern for tag_key: %s", ctx->tag_key);
++            splunk_config_destroy(ctx);
++            return NULL;
++        }
++    }
++
+     return ctx;
+ }
+ 
+ int splunk_config_destroy(struct flb_splunk *ctx)
+ {
++    if (ctx->ra_tag_key) {
++        flb_ra_destroy(ctx->ra_tag_key);
++    }
++
+     /* release all connections */
+     splunk_conn_release_all(ctx);
+ 
+diff --git a/plugins/in_splunk/splunk_prot.c b/plugins/in_splunk/splunk_prot.c
+index cf614b0..f53f24c 100644
+--- a/plugins/in_splunk/splunk_prot.c
++++ b/plugins/in_splunk/splunk_prot.c
+@@ -22,6 +22,8 @@
+ #include 
+ #include 
+ #include 
++#include 
++#include 
+ 
+ #include 
+ #include 
+@@ -149,67 +151,33 @@ static int send_json_message_response(struct splunk_conn *conn, int http_status,
+ /* implements functionality to get tag from key in record */
+ static flb_sds_t tag_key(struct flb_splunk *ctx, msgpack_object *map)
+ {
+-    size_t map_size = map->via.map.size;
+-    msgpack_object_kv *kv;
+-    msgpack_object  key;
+-    msgpack_object  val;
+-    char *key_str = NULL;
+-    char *val_str = NULL;
+-    size_t key_str_size = 0;
+-    size_t val_str_size = 0;
+-    int j;
+-    int check = FLB_FALSE;
+-    int found = FLB_FALSE;
+-    flb_sds_t tag;
++    flb_sds_t tag = NULL;
++    struct flb_ra_value *ra_val;
+ 
+-    kv = map->via.map.ptr;
+-
+-    for(j=0; j < map_size; j++) {
+-        check = FLB_FALSE;
+-        found = FLB_FALSE;
+-        key = (kv+j)->key;
+-        if (key.type == MSGPACK_OBJECT_BIN) {
+-            key_str  = (char *) key.via.bin.ptr;
+-            key_str_size = key.via.bin.size;
+-            check = FLB_TRUE;
+-        }
+-        if (key.type == MSGPACK_OBJECT_STR) {
+-            key_str  = (char *) key.via.str.ptr;
+-            key_str_size = key.via.str.size;
+-            check = FLB_TRUE;
+-        }
++    /* If no record accessor is configured, return NULL */
++    if (!ctx->ra_tag_key) {
++        return NULL;
++    }
+ 
+-        if (check == FLB_TRUE) {
+-            if (strncmp(ctx->tag_key, key_str, key_str_size) == 0) {
+-                val = (kv+j)->val;
+-                if (val.type == MSGPACK_OBJECT_BIN) {
+-                    val_str  = (char *) val.via.bin.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-                if (val.type == MSGPACK_OBJECT_STR) {
+-                    val_str  = (char *) val.via.str.ptr;
+-                    val_str_size = val.via.str.size;
+-                    found = FLB_TRUE;
+-                    break;
+-                }
+-            }
+-        }
++    /* Use record accessor to get the value */
++    ra_val = flb_ra_get_value_object(ctx->ra_tag_key, *map);
++    if (!ra_val) {
++        flb_plg_debug(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
++        return NULL;
+     }
+ 
+-    if (found == FLB_TRUE) {
+-        tag = flb_sds_create_len(val_str, val_str_size);
+-        if (!tag) {
+-            flb_errno();
+-            return NULL;
+-        }
+-        return tag;
++    /* Convert the value to string */
++    if (ra_val->type == FLB_RA_STRING) {
++        tag = flb_sds_create_len(ra_val->o.via.str.ptr, ra_val->o.via.str.size);
++    }
++    else {
++        flb_plg_debug(ctx->ins, "tag_key %s value is not a string", ctx->tag_key);
+     }
+ 
++    /* Clean up the record accessor value */
++    flb_ra_key_value_destroy(ra_val);
+ 
+-    flb_plg_error(ctx->ins, "Could not find tag_key %s in record", ctx->tag_key);
+-    return NULL;
++    return tag;
+ }
+ 
+ /*
+-- 
+2.45.4
+
diff --git a/SPECS/fluent-bit/CVE-2025-58749.patch b/SPECS/fluent-bit/CVE-2025-58749.patch
new file mode 100644
index 0000000000..8b210db8c2
--- /dev/null
+++ b/SPECS/fluent-bit/CVE-2025-58749.patch
@@ -0,0 +1,48 @@
+From 95f506a6e77d3ac7588eac7263f95558edfa7f3b Mon Sep 17 00:00:00 2001
+From: Liu Jia 
+Date: Mon, 15 Sep 2025 15:19:51 +0800
+Subject: [PATCH] Merge commit from fork
+
+* fix overflow in check_bulk_memory_overflow
+
+Upstream Patch reference: https://github.com/bytecodealliance/wasm-micro-runtime/commit/95f506a6e77d3ac7588eac7263f95558edfa7f3b.patch
+---
+ .../core/iwasm/compilation/aot_emit_memory.c       | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c b/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c
+index 8c35c3f..6a01c25 100644
+--- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c
++++ b/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c
+@@ -880,7 +880,7 @@ static LLVMValueRef
+ check_bulk_memory_overflow(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
+                            LLVMValueRef offset, LLVMValueRef bytes)
+ {
+-    LLVMValueRef maddr, max_addr, cmp;
++    LLVMValueRef maddr, max_addr, cmp, cmp1, offset1;
+     LLVMValueRef mem_base_addr;
+     LLVMBasicBlockRef block_curr = LLVMGetInsertBlock(comp_ctx->builder);
+     LLVMBasicBlockRef check_succ;
+@@ -922,8 +922,18 @@ check_bulk_memory_overflow(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
+         if (mem_data_size > 0 && mem_offset + mem_len <= mem_data_size) {
+             /* inside memory space */
+             /* maddr = mem_base_addr + moffset */
++            /* Perform zero extension in advance to avoid LLVMBuildInBoundsGEP2
++             * interpreting a negative address due to sign extension when
++             * mem_offset >= 2GiB */
++            if (comp_ctx->pointer_size == sizeof(uint64)) {
++                offset1 = I64_CONST(mem_offset);
++            }
++            else {
++                offset1 = I32_CONST((uint32)mem_offset);
++            }
++            CHECK_LLVM_CONST(offset1);
+             if (!(maddr = LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE,
+-                                                mem_base_addr, &offset, 1,
++                                                mem_base_addr, &offset1, 1,
+                                                 "maddr"))) {
+                 aot_set_last_error("llvm build add failed.");
+                 goto fail;
+-- 
+2.45.4
+
diff --git a/SPECS/fluent-bit/CVE-2025-62408.patch b/SPECS/fluent-bit/CVE-2025-62408.patch
new file mode 100644
index 0000000000..1e00daf2a5
--- /dev/null
+++ b/SPECS/fluent-bit/CVE-2025-62408.patch
@@ -0,0 +1,357 @@
+From 714bf5675c541bd1e668a8db8e67ce012651e618 Mon Sep 17 00:00:00 2001
+From: Brad House 
+Date: Mon, 8 Dec 2025 10:12:08 -0500
+Subject: [PATCH] Merge commit from fork
+
+* reproducer test case
+
+* enqueue callbacks to be processed within process_answer rather than calling directly as that may lead to the connection being destroyed
+
+* combine requeue and endqueue into a single queue with a flag to simplify the implementation
+
+* add back queue notification
+
+Modified to apply to Azure Linux
+Upstream Patch Reference: https://github.com/c-ares/c-ares/commit/714bf5675c541bd1e668a8db8e67ce012651e618.patch
+---
+ lib/c-ares-1.33.1/src/lib/ares_private.h    | 10 +--
+ lib/c-ares-1.33.1/src/lib/ares_process.c    | 97 ++++++++++++++++-----
+ lib/c-ares-1.33.1/src/lib/ares_qcache.c     | 20 +++--
+ lib/c-ares-1.33.1/test/ares-test-mock-ai.cc | 32 +++++++
+ 4 files changed, 125 insertions(+), 34 deletions(-)
+
+diff --git a/lib/c-ares-1.33.1/src/lib/ares_private.h b/lib/c-ares-1.33.1/src/lib/ares_private.h
+index 2605c9e..c1bf536 100644
+--- a/lib/c-ares-1.33.1/src/lib/ares_private.h
++++ b/lib/c-ares-1.33.1/src/lib/ares_private.h
+@@ -466,7 +466,7 @@ ares_status_t ares__requeue_query(ares_query_t            *query,
+                                   const ares_timeval_t    *now,
+                                   ares_status_t            status,
+                                   ares_bool_t              inc_try_count,
+-                                  const ares_dns_record_t *dnsrec,
++                                  ares_dns_record_t       *dnsrec,
+                                   ares__array_t           **requeue);
+ 
+ /*! Count the number of labels (dots+1) in a domain */
+@@ -764,10 +764,10 @@ ares_status_t ares__qcache_create(ares_rand_state *rand_state,
+                                   unsigned int     max_ttl,
+                                   ares__qcache_t **cache_out);
+ void          ares__qcache_flush(ares__qcache_t *cache);
+-ares_status_t ares_qcache_insert(ares_channel_t       *channel,
+-                                 const ares_timeval_t *now,
+-                                 const ares_query_t   *query,
+-                                 ares_dns_record_t    *dnsrec);
++ares_status_t ares_qcache_insert(ares_channel_t          *channel,
++                                 const ares_timeval_t    *now,
++                                 const ares_query_t      *query,
++                                 const ares_dns_record_t *dnsrec);
+ ares_status_t ares_qcache_fetch(ares_channel_t           *channel,
+                                 const ares_timeval_t     *now,
+                                 const ares_dns_record_t  *dnsrec,
+diff --git a/lib/c-ares-1.33.1/src/lib/ares_process.c b/lib/c-ares-1.33.1/src/lib/ares_process.c
+index e84c36a..fa042dd 100644
+--- a/lib/c-ares-1.33.1/src/lib/ares_process.c
++++ b/lib/c-ares-1.33.1/src/lib/ares_process.c
+@@ -66,7 +66,8 @@ static ares_bool_t same_address(const struct sockaddr  *sa,
+                                 const struct ares_addr *aa);
+ static void        end_query(ares_channel_t *channel, ares_server_t *server,
+                              ares_query_t *query, ares_status_t status,
+-                             const ares_dns_record_t *dnsrec);
++                             ares_dns_record_t *dnsrec,
++                             ares__array_t **requeue);
+ 
+ static void        ares__query_disassociate_from_conn(ares_query_t *query)
+ {
+@@ -300,16 +301,27 @@ static void write_tcp_data(ares_channel_t *channel, fd_set *write_fds,
+   }
+ }
+ 
++typedef enum {
++  REQUEUE_REQUEUE  = 1,
++  REQUEUE_ENDQUERY = 2
++} requeue_type_t;
++
+ /* Simple data structure to store a query that needs to be requeued with
+  * optional server */
+ typedef struct {
+-  unsigned short qid;
+-  ares_server_t *server; /* optional */
++  requeue_type_t     type;   /* type of entry, requeue or endquery */
++  unsigned short     qid;    /* query id */
++  ares_server_t     *server; /* requeue only: optional */
++  ares_status_t      status; /* endquery only */
++  ares_dns_record_t *dnsrec; /* endquery only: optional */
+ } ares_requeue_t;
+ 
+-static ares_status_t ares_append_requeue(ares__array_t **requeue,
+-                                         ares_query_t *query,
+-                                         ares_server_t *server)
++static ares_status_t ares_append_requeue_int(ares__array_t     **requeue,
++                                             requeue_type_t     type,
++                                             ares_query_t      *query,
++                                             ares_server_t     *server,
++                                             ares_status_t      status,
++                                             ares_dns_record_t *dnsrec)
+ {
+   ares_requeue_t entry;
+ 
+@@ -322,11 +334,30 @@ static ares_status_t ares_append_requeue(ares__array_t **requeue,
+ 
+   ares__query_disassociate_from_conn(query);
+ 
++  entry.type   = type;
+   entry.qid    = query->qid;
+   entry.server = server;
++  entry.status = status;
++  entry.dnsrec = dnsrec;
+   return ares__array_insertdata_last(*requeue, &entry);
+ }
+ 
++static ares_status_t ares_append_requeue(ares__array_t **requeue,
++                                         ares_query_t  *query,
++                                         ares_server_t *server)
++{
++  return ares_append_requeue_int(requeue, REQUEUE_REQUEUE, query, server, 0,
++    NULL);
++}
++
++static ares_status_t ares_append_endqueue(ares__array_t     **requeue,
++                                          ares_query_t      *query,
++                                          ares_status_t      status,
++                                          ares_dns_record_t *dnsrec)
++{
++  return ares_append_requeue_int(requeue, REQUEUE_ENDQUERY, query, NULL, status,
++    dnsrec);
++}
+ 
+ /* If any TCP socket selects true for reading, read some data,
+  * allocate a buffer if we finish reading the length word, and process
+@@ -423,13 +454,24 @@ cleanup:
+       break;
+     }
+ 
+-    /* Query disappeared */
+     query = ares__htable_szvp_get_direct(channel->queries_by_qid, entry.qid);
+-    if (query == NULL) {
+-      continue;
++    if (entry.type == REQUEUE_REQUEUE) {
++      /* query disappeared */
++      if (query == NULL) {
++        continue;
++      }
++      ares__send_query(query, now);
++    } else { /* REQUEUE_ENDQUERY */
++      if (query != NULL) {
++        query->callback(query->arg, entry.status, query->timeouts, entry.dnsrec);
++        ares__free_query(query);
++      }
++      ares_dns_record_destroy(entry.dnsrec);
+     }
+-
+-    ares__send_query(query, now);
++  }
++  /* Don't forget to send notification if queue emptied */
++  if (requeue != NULL) {
++    ares_queue_notify_empty(channel);
+   }
+   ares__array_destroy(requeue);
+ }
+@@ -749,7 +791,7 @@ static ares_status_t process_answer(ares_channel_t      *channel,
+       ares_dns_get_opt_rr_const(rdnsrec) == NULL) {
+     status = rewrite_without_edns(query);
+     if (status != ARES_SUCCESS) {
+-      end_query(channel, server, query, status, NULL);
++      end_query(channel, server, query, status, NULL, NULL);
+       goto cleanup;
+     }
+ 
+@@ -795,6 +837,7 @@ static ares_status_t process_answer(ares_channel_t      *channel,
+       server_increment_failures(server, query->using_tcp);
+       status = ares__requeue_query(query, now, status, ARES_TRUE, rdnsrec,
+                                    requeue);
++      rdnsrec = NULL; /* Free'd by ares_requeue_query() */
+ 
+       if (status != ARES_ENOMEM) {
+         /* Should any of these cause a connection termination?
+@@ -807,12 +850,11 @@ static ares_status_t process_answer(ares_channel_t      *channel,
+ 
+   /* If cache insertion was successful, it took ownership.  We ignore
+    * other cache insertion failures. */
+-  if (ares_qcache_insert(channel, now, query, rdnsrec) == ARES_SUCCESS) {
+-    is_cached = ARES_TRUE;
+-  }
++  ares_qcache_insert(channel, now, query, rdnsrec);
+ 
+   server_set_good(server, query->using_tcp);
+-  end_query(channel, server, query, ARES_SUCCESS, rdnsrec);
++  end_query(channel, server, query, ARES_SUCCESS, rdnsrec, requeue);
++  rdnsrec = NULL; /* Free'd by the requeue */
+ 
+   status = ARES_SUCCESS;
+ 
+@@ -845,7 +887,7 @@ ares_status_t ares__requeue_query(ares_query_t            *query,
+                                   const ares_timeval_t    *now,
+                                   ares_status_t            status,
+                                   ares_bool_t              inc_try_count,
+-                                  const ares_dns_record_t *dnsrec,
++                                  ares_dns_record_t       *dnsrec,
+                                   ares__array_t           **requeue)
+ {
+   ares_channel_t *channel = query->channel;
+@@ -862,6 +904,7 @@ ares_status_t ares__requeue_query(ares_query_t            *query,
+   }
+ 
+   if (query->try_count < max_tries && !query->no_retries) {
++    ares_dns_record_destroy(dnsrec);
+     if (requeue != NULL) {
+       return ares_append_requeue(requeue, query, NULL);
+     }
+@@ -873,7 +916,7 @@ ares_status_t ares__requeue_query(ares_query_t            *query,
+     query->error_status = ARES_ETIMEOUT;
+   }
+ 
+-  end_query(channel, NULL, query, query->error_status, dnsrec);
++  end_query(channel, NULL, query, query->error_status, dnsrec, requeue);
+   return ARES_ETIMEOUT;
+ }
+ 
+@@ -1151,7 +1194,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
+   }
+ 
+   if (server == NULL) {
+-    end_query(channel, server, query, ARES_ENOSERVER /* ? */, NULL);
++    end_query(channel, server, query, ARES_ENOSERVER /* ? */, NULL, NULL);
+     return ARES_ENOSERVER;
+   }
+ 
+@@ -1172,7 +1215,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
+ 
+       /* Anything else is not retryable, likely ENOMEM */
+       default:
+-        end_query(channel, server, query, status, NULL);
++        end_query(channel, server, query, status, NULL, NULL);
+         return status;
+     }
+   }
+@@ -1186,7 +1229,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
+ 
+     case ARES_ENOMEM:
+       /* Not retryable */
+-      end_query(channel, server, query, status, NULL);
++      end_query(channel, server, query, status, NULL, NULL);
+       return status;
+ 
+     /* These conditions are retryable as they are server-specific
+@@ -1220,7 +1263,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
+     ares__slist_insert(channel->queries_by_timeout, query);
+   if (!query->node_queries_by_timeout) {
+     /* LCOV_EXCL_START: OutOfMemory */
+-    end_query(channel, server, query, ARES_ENOMEM, NULL);
++    end_query(channel, server, query, ARES_ENOMEM, NULL, NULL);
+     return ARES_ENOMEM;
+     /* LCOV_EXCL_STOP */
+   }
+@@ -1233,7 +1276,7 @@ ares_status_t ares__send_query(ares_query_t *query, const ares_timeval_t *now)
+ 
+   if (query->node_queries_to_conn == NULL) {
+     /* LCOV_EXCL_START: OutOfMemory */
+-    end_query(channel, server, query, ARES_ENOMEM, NULL);
++    end_query(channel, server, query, ARES_ENOMEM, NULL, NULL);
+     return ARES_ENOMEM;
+     /* LCOV_EXCL_STOP */
+   }
+@@ -1344,10 +1387,16 @@ static void ares_detach_query(ares_query_t *query)
+ 
+ static void end_query(ares_channel_t *channel, ares_server_t *server,
+                       ares_query_t *query, ares_status_t status,
+-                      const ares_dns_record_t *dnsrec)
++                      ares_dns_record_t *dnsrec, ares__array_t **requeue)
+ {
+   ares_metrics_record(query, server, status, dnsrec);
+ 
++  /* Delay calling the query callback */
++  if (requeue != NULL) {
++    ares_append_endqueue(requeue, query, status, dnsrec);
++    return;
++  }
++
+   /* Invoke the callback. */
+   query->callback(query->arg, status, query->timeouts, dnsrec);
+   ares__free_query(query);
+diff --git a/lib/c-ares-1.33.1/src/lib/ares_qcache.c b/lib/c-ares-1.33.1/src/lib/ares_qcache.c
+index 9725212..8a5b4b0 100644
+--- a/lib/c-ares-1.33.1/src/lib/ares_qcache.c
++++ b/lib/c-ares-1.33.1/src/lib/ares_qcache.c
+@@ -422,10 +422,20 @@ done:
+   return status;
+ }
+ 
+-ares_status_t ares_qcache_insert(ares_channel_t       *channel,
+-                                 const ares_timeval_t *now,
+-                                 const ares_query_t   *query,
+-                                 ares_dns_record_t    *dnsrec)
++ares_status_t ares_qcache_insert(ares_channel_t          *channel,
++                                 const ares_timeval_t    *now,
++                                 const ares_query_t      *query,
++                                 const ares_dns_record_t *dnsrec)
+ {
+-  return ares__qcache_insert(channel->qcache, dnsrec, query->query, now);
++  ares_dns_record_t *dupdns = ares_dns_record_duplicate(dnsrec);
++  ares_status_t      status;
++
++  if (dupdns == NULL) {
++    return ARES_ENOMEM;
++  }
++  status = ares_qcache_insert(channel->qcache, dupdns, query->query, now);
++  if (status != ARES_SUCCESS) {
++    ares_dns_record_destroy(dupdns);
++  }
++  return status;
+ }
+diff --git a/lib/c-ares-1.33.1/test/ares-test-mock-ai.cc b/lib/c-ares-1.33.1/test/ares-test-mock-ai.cc
+index ad61b04..9771a21 100644
+--- a/lib/c-ares-1.33.1/test/ares-test-mock-ai.cc
++++ b/lib/c-ares-1.33.1/test/ares-test-mock-ai.cc
+@@ -805,7 +805,39 @@ TEST_P(MockUDPChannelTestAI, TriggerResendThenConnFailEDNS) {
+   EXPECT_THAT(result.ai_, IncludesV6Address("2121:0000:0000:0000:0000:0000:0000:0303"));
+ }
+ 
++TEST_P(MockUDPChannelTestAI, ConnectionRefusedOnSearchDomainRetry) {
++  DNSPacket badrsp4;
++  badrsp4.set_response().set_aa()
++    .add_question(new DNSQuestion("www.google.com", T_A))
++    .set_rcode(NXDOMAIN);
++
++  EXPECT_CALL(server_, OnRequest("www.google.com", T_A))
++    .WillOnce(SetReplyAndFailSend(&server_, &badrsp4));
++
++  DNSPacket goodrsp4;
++  goodrsp4.set_response().set_aa()
++    .add_question(new DNSQuestion("www.google.com.first.com", T_A))
++    .add_answer(new DNSARR("www.google.com.first.com", 0x0100, {0x01, 0x02, 0x03, 0x04}));
++
++  EXPECT_CALL(server_, OnRequest("www.google.com.first.com", T_A))
++    .WillOnce(SetReply(&server_, &goodrsp4));
++
++  ares_socket_functions sock_funcs;
++  memset(&sock_funcs, 0, sizeof(sock_funcs));
+ 
++  sock_funcs.asendv = ares_sendv_fail;
++
++  ares_set_socket_functions(channel_, &sock_funcs, NULL);
++
++  AddrInfoResult result;
++  struct ares_addrinfo_hints hints = {0, 0, 0, 0};
++  hints.ai_family = AF_INET;
++  hints.ai_flags = ARES_AI_NOSORT;
++  ares_getaddrinfo(channel_, "www.google.com", NULL, &hints,
++                   AddrInfoCallback, &result);
++
++  Process();
++}
+ 
+ class MockEDNSChannelTestAI : public MockFlagsChannelOptsTestAI {
+  public:
+-- 
+2.43.0
+
diff --git a/SPECS/fluent-bit/fluent-bit.signatures.json b/SPECS/fluent-bit/fluent-bit.signatures.json
index cb3ed9d7fe..e48e6bf823 100644
--- a/SPECS/fluent-bit/fluent-bit.signatures.json
+++ b/SPECS/fluent-bit/fluent-bit.signatures.json
@@ -1,6 +1,6 @@
 {
  "Signatures": {
-  "fluent-bit-3.1.9.tar.gz": "ac3a3e235e7f8a92d35f10c99f400f0b0571417a92e3c4caa467073733d42547",
+  "fluent-bit-3.1.10.tar.gz": "9ec909e8ce04bc8f3b09862c781956c40da18f60e8ae92b154114b4e20edc5fa",
   "fluent_bit.fc": "d59e8180da8c7000c56362ace40e628e9caf7c21047df2a41a1b00dd6c96d5ab",
   "fluent_bit.te": "af9350c3885430cc075212b4a1bedc381062c54d187dc58138dc285131283663"
  }
diff --git a/SPECS/fluent-bit/fluent-bit.spec b/SPECS/fluent-bit/fluent-bit.spec
index 4d22720ed3..a8ed045be2 100644
--- a/SPECS/fluent-bit/fluent-bit.spec
+++ b/SPECS/fluent-bit/fluent-bit.spec
@@ -1,12 +1,13 @@
 Summary:        Fast and Lightweight Log processor and forwarder for Linux, BSD and OSX
 Name:           fluent-bit
-Version:        3.1.9
-Release:        17%{?dist}
+Version:        3.1.10
+Release:        4%{?dist}
 License:        Apache-2.0
 Vendor:         Intel Corporation
 Distribution:   Edge Microvisor Toolkit
 URL:            https://fluentbit.io
 Source0:        https://github.com/fluent/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
+# add selinux policies for BMA
 Source1:        fluent_bit.te
 Source2:        fluent_bit.fc
 Patch0:         CVE-2024-34250.patch
@@ -15,9 +16,12 @@ Patch2:         CVE-2024-27532.patch
 Patch3:         CVE-2024-50608.patch
 Patch4:         CVE-2024-50609.patch
 Patch5:         CVE-2025-31498.patch
-Patch6:         CVE-2025-29087.patch
-Patch7:         CVE-2023-53154.patch
-Patch8:         CVE-2025-54126.patch
+Patch6:         CVE-2025-54126.patch
+Patch7:         CVE-2025-58749.patch
+Patch8:         CVE-2025-12970.patch
+Patch9:         CVE-2025-12977.patch
+Patch10:        CVE-2025-12969.patch
+Patch11:        CVE-2025-62408.patch
 BuildRequires:  bison
 BuildRequires:  cmake
 BuildRequires:  cyrus-sasl-devel
@@ -187,6 +191,17 @@ install -m 644 %{modulename}.pp %{buildroot}%{_datadir}/selinux/packages/%{modul
 %selinux_modules_uninstall -s %{selinuxtype} %{modulename}
 
 %changelog
+* Mon Feb 23 2026 Lee Chee Yang  - 3.1.10-4
+- merge from Azure Linux 3.0.20260107-3.0
+- Patch for CVE-2025-62408
+- Patch for CVE-2025-12977 and CVE-2025-12969
+
+* Mon Jan 5 2025 Lee Chee Yang  - 3.1.10-2
+- merge from Azure Linux 3.0.20251206-3.0
+- Upgrade to 3.1.10
+- Patch for CVE-2025-12970
+- Patch for CVE-2025-58749
+
 * Thu Nov 05 2025 Kishan Mochi  - 3.1.9-17
 - remove inbm selinux
 
diff --git a/SPECS/gh/0001-Fix-false-negative-in-TestMigrationWriteErrors-when-.patch b/SPECS/gh/0001-Fix-false-negative-in-TestMigrationWriteErrors-when-.patch
deleted file mode 100644
index a3dc44dc3e..0000000000
--- a/SPECS/gh/0001-Fix-false-negative-in-TestMigrationWriteErrors-when-.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 82441ca6f9736bc542e699c8cbf46f80542ed618 Mon Sep 17 00:00:00 2001
-From: Vince Perri <5596945+vinceaperri@users.noreply.github.com>
-Date: Tue, 19 Nov 2024 23:29:08 +0000
-Subject: [PATCH] Fix false-negative in TestMigrationWriteErrors when root
-
----
- internal/config/migrate_test.go | 44 ++++++++++++++++++++++++++++++++-
- 1 file changed, 43 insertions(+), 1 deletion(-)
-
-diff --git a/internal/config/migrate_test.go b/internal/config/migrate_test.go
-index 783f605..7557149 100644
---- a/internal/config/migrate_test.go
-+++ b/internal/config/migrate_test.go
-@@ -6,13 +6,20 @@ import (
- 	"io"
- 	"os"
- 	"path/filepath"
-+	"syscall"
- 	"testing"
-+	"unsafe"
- 
- 	ghmock "github.com/cli/cli/v2/internal/gh/mock"
- 	ghConfig "github.com/cli/go-gh/v2/pkg/config"
- 	"github.com/stretchr/testify/require"
- )
- 
-+const (
-+	FS_IOC_SETFLAGS = 0x40086602
-+	FS_IMMUTABLE_FL = 0x00000010
-+)
-+
- func TestMigrationAppliedSuccessfully(t *testing.T) {
- 	readConfig := StubWriteConfig(t)
- 
-@@ -215,6 +222,9 @@ func TestMigrationWriteErrors(t *testing.T) {
- 
- 			// Then the error is wrapped and bubbled
- 			require.ErrorContains(t, err, tt.wantErrContains)
-+
-+			// Make the file writeable again so we can clean up
-+			makeFileWriteable(t, filepath.Join(tempDir, tt.unwriteableFile))
- 		})
- 	}
- }
-@@ -226,7 +236,39 @@ func makeFileUnwriteable(t *testing.T, file string) {
- 	require.NoError(t, err)
- 	f.Close()
- 
--	require.NoError(t, os.Chmod(file, 0000))
-+	if os.Geteuid() == 0 {
-+		fd, err := syscall.Open(file, syscall.O_RDONLY, 0)
-+		require.NoError(t, err)
-+		defer syscall.Close(fd)
-+
-+		var flags uint
-+		_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(FS_IOC_SETFLAGS), uintptr(unsafe.Pointer(&flags)))
-+		require.Zero(t, errno)
-+
-+		flags |= FS_IMMUTABLE_FL
-+		_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(FS_IOC_SETFLAGS), uintptr(unsafe.Pointer(&flags)))
-+		require.Zero(t, errno)
-+	} else {
-+		require.NoError(t, os.Chmod(file, 0000))
-+	}
-+}
-+
-+func makeFileWriteable(t *testing.T, file string) {
-+	t.Helper()
-+
-+	if os.Geteuid() == 0 {
-+		fd, err := syscall.Open(file, syscall.O_RDONLY, 0)
-+		require.NoError(t, err)
-+		defer syscall.Close(fd)
-+
-+		var flags uint
-+		_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(FS_IOC_SETFLAGS), uintptr(unsafe.Pointer(&flags)))
-+		require.Zero(t, errno)
-+
-+		flags &^= FS_IMMUTABLE_FL
-+		_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr(FS_IOC_SETFLAGS), uintptr(unsafe.Pointer(&flags)))
-+		require.Zero(t, errno)
-+	}
- }
- 
- func mockMigration(doFunc func(config *ghConfig.Config) error) *ghmock.MigrationMock {
--- 
-2.34.1
-
diff --git a/SPECS/gh/CVE-2024-45337.patch b/SPECS/gh/CVE-2024-45337.patch
deleted file mode 100644
index 868ef502b5..0000000000
--- a/SPECS/gh/CVE-2024-45337.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 66fd5d19c5ea8c7f4f7ff69bcc93a7c8231ce4cf Mon Sep 17 00:00:00 2001
-From: Roland Shoemaker 
-Date: Tue, 3 Dec 2024 09:03:03 -0800
-Subject: [PATCH] ssh: make the public key cache a 1-entry FIFO cache
-
-Users of the the ssh package seem to extremely commonly misuse the
-PublicKeyCallback API, assuming that the key passed in the last call
-before a connection is established is the key used for authentication.
-Some users then make authorization decisions based on this key. This
-property is not documented, and may not be correct, due to the caching
-behavior of the package, resulting in users making incorrect
-authorization decisions about the connection.
-
-This change makes the cache a one entry FIFO cache, making the assumed
-property, that the last call to PublicKeyCallback represents the key
-actually used for authentication, actually hold.
-
-Thanks to Damien Tournoud, Patrick Dawkins, Vince Parker, and
-Jules Duvivier from the Platform.sh / Upsun engineering team
-for reporting this issue.
-
-Fixes golang/go#70779
-Fixes CVE-2024-45337
-
-Change-Id: Ife7c7b4045d8b6bcd7e3a417bdfae370c709797f
-Reviewed-on: https://go-review.googlesource.com/c/crypto/+/635315
-Reviewed-by: Roland Shoemaker 
-Auto-Submit: Gopher Robot 
-Reviewed-by: Damien Neil 
-Reviewed-by: Nicola Murino 
-LUCI-TryBot-Result: Go LUCI 
-Signed-off-by: Muhammad Falak R Wani 
----
- vendor/golang.org/x/crypto/ssh/server.go | 15 +++++++++++----
- 1 file changed, 11 insertions(+), 4 deletions(-)
-
-diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go
-index c2dfe32..39dcc09 100644
---- a/vendor/golang.org/x/crypto/ssh/server.go
-+++ b/vendor/golang.org/x/crypto/ssh/server.go
-@@ -149,7 +149,7 @@ func (s *ServerConfig) AddHostKey(key Signer) {
- }
- 
- // cachedPubKey contains the results of querying whether a public key is
--// acceptable for a user.
-+// acceptable for a user. This is a FIFO cache.
- type cachedPubKey struct {
- 	user       string
- 	pubKeyData []byte
-@@ -157,7 +157,13 @@ type cachedPubKey struct {
- 	perms      *Permissions
- }
- 
--const maxCachedPubKeys = 16
-+// maxCachedPubKeys is the number of cache entries we store.
-+//
-+// Due to consistent misuse of the PublicKeyCallback API, we have reduced this
-+// to 1, such that the only key in the cache is the most recently seen one. This
-+// forces the behavior that the last call to PublicKeyCallback will always be
-+// with the key that is used for authentication.
-+const maxCachedPubKeys = 1
- 
- // pubKeyCache caches tests for public keys.  Since SSH clients
- // will query whether a public key is acceptable before attempting to
-@@ -179,9 +185,10 @@ func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {
- 
- // add adds the given tuple to the cache.
- func (c *pubKeyCache) add(candidate cachedPubKey) {
--	if len(c.keys) < maxCachedPubKeys {
--		c.keys = append(c.keys, candidate)
-+	if len(c.keys) >= maxCachedPubKeys {
-+		c.keys = c.keys[1:]
- 	}
-+	c.keys = append(c.keys, candidate)
- }
- 
- // ServerConn is an authenticated SSH connection, as seen from the
--- 
-2.34.1
-
diff --git a/SPECS/gh/CVE-2024-45338.patch b/SPECS/gh/CVE-2024-45338.patch
deleted file mode 100644
index 7dc58f35e9..0000000000
--- a/SPECS/gh/CVE-2024-45338.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From a61bc7a45809410b36644afd5a29c14f138a1485 Mon Sep 17 00:00:00 2001
-From: Rohit Rawat 
-Date: Thu, 2 Jan 2025 10:22:12 +0000
-Subject: [PATCH] Fix CVE CVE-2024-45338 in gh
-
----
- vendor/golang.org/x/net/html/doctype.go | 2 +-
- vendor/golang.org/x/net/html/foreign.go | 3 +--
- vendor/golang.org/x/net/html/parse.go   | 4 ++--
- 3 files changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go
-index c484e5a..bca3ae9 100644
---- a/vendor/golang.org/x/net/html/doctype.go
-+++ b/vendor/golang.org/x/net/html/doctype.go
-@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) {
- 			}
- 		}
- 		if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
--			strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
-+			strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") {
- 			quirks = true
- 		}
- 	}
-diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go
-index 9da9e9d..e8515d8 100644
---- a/vendor/golang.org/x/net/html/foreign.go
-+++ b/vendor/golang.org/x/net/html/foreign.go
-@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool {
- 		if n.Data == "annotation-xml" {
- 			for _, a := range n.Attr {
- 				if a.Key == "encoding" {
--					val := strings.ToLower(a.Val)
--					if val == "text/html" || val == "application/xhtml+xml" {
-+					if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") {
- 						return true
- 					}
- 				}
-diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go
-index 46a89ed..5b8374b 100644
---- a/vendor/golang.org/x/net/html/parse.go
-+++ b/vendor/golang.org/x/net/html/parse.go
-@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool {
- 			if p.tok.DataAtom == a.Input {
- 				for _, t := range p.tok.Attr {
- 					if t.Key == "type" {
--						if strings.ToLower(t.Val) == "hidden" {
-+						if strings.EqualFold(t.Val, "hidden") {
- 							// Skip setting framesetOK = false
- 							return true
- 						}
-@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool {
- 			return inHeadIM(p)
- 		case a.Input:
- 			for _, t := range p.tok.Attr {
--				if t.Key == "type" && strings.ToLower(t.Val) == "hidden" {
-+				if t.Key == "type" && strings.EqualFold(t.Val, "hidden") {
- 					p.addElement()
- 					p.oe.pop()
- 					return true
--- 
-2.39.4
-
diff --git a/SPECS/gh/CVE-2024-53858.nopatch b/SPECS/gh/CVE-2024-53858.nopatch
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/SPECS/gh/CVE-2024-53859.patch b/SPECS/gh/CVE-2024-53859.patch
deleted file mode 100644
index 4f4d9284ae..0000000000
--- a/SPECS/gh/CVE-2024-53859.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 5d6079f8ad16f553cdaea1d56fedcb4a3a1db082 Mon Sep 17 00:00:00 2001
-From: William Martin 
-Date: Thu, 31 Oct 2024 14:07:48 +0100
-Subject: [PATCH] Fix token exposure for non-gh hosts in codespaces
-
-This commit introduces a fix for `GITHUB_TOKEN` being exposed to non-github hosts while in a codespace. We no longer return the `GITHUB_TOKEN` for any host except github.com and github.localhost while in a codespace (while the env var `CODESPACES` is `true`).
-
-This commit also changes how tokens are returned when no oAuth token is found in a config. Previously, an empty string and the `oauthToken` source was returned. Now, we return an empty string and the `defaultSource` source. The intention behind this change is to make more logical sense by not returning an `oauthToken` source when we didn't get any token. It's also worth mentioning that this change also improves our test coverage - all lines in `tokenForHost` are now covered by tests, and we don't have unreachable code.
-
-Co-authored-by: Kynan Ware <47394200+BagToad@users.noreply.github.com>
-
-Modified patch to apply to AzureLinux
-Modified-by: Sandeep Karambelkar 
----
- pkg/auth/auth.go      | 27 ++++++++----
- 1 file changed, 91 insertions(+), 33 deletions(-)
-
-diff --git a/vendor/github.com/cli/go-gh/v2/pkg/auth/auth.go b/vendor/github.com/cli/go-gh/v2/pkg/auth/auth.go
-index a903736..4378e75 100644
---- a/vendor/github.com/cli/go-gh/v2/pkg/auth/auth.go
-+++ b/vendor/github.com/cli/go-gh/v2/pkg/auth/auth.go
-@@ -63,6 +63,15 @@ func TokenFromEnvOrConfig(host string) (string, string) {
-
- func tokenForHost(cfg *config.Config, host string) (string, string) {
- 	host = NormalizeHostname(host)
-+
-+	if isCodespaces, _ := strconv.ParseBool(os.Getenv(codespaces)); isCodespaces {
-+		if host == github || host == localhost {
-+			if token := os.Getenv(githubToken); token != "" {
-+				return token, githubToken
-+			}
-+		}
-+	}
-+
- 	if IsEnterprise(host) {
- 		if token := os.Getenv(ghEnterpriseToken); token != "" {
- 			return token, ghEnterpriseToken
-@@ -70,25 +79,25 @@ func tokenForHost(cfg *config.Config, host string) (string, string) {
- 		if token := os.Getenv(githubEnterpriseToken); token != "" {
- 			return token, githubEnterpriseToken
- 		}
--		if isCodespaces, _ := strconv.ParseBool(os.Getenv(codespaces)); isCodespaces {
--			if token := os.Getenv(githubToken); token != "" {
--				return token, githubToken
--			}
--		}
- 		if cfg != nil {
--			token, _ := cfg.Get([]string{hostsKey, host, oauthToken})
--			return token, oauthToken
-+			if token, _ := cfg.Get([]string{hostsKey, host, oauthToken}); token != "" {
-+				return token, oauthToken
-+			}
- 		}
-+		return "", defaultSource
- 	}
-+
- 	if token := os.Getenv(ghToken); token != "" {
- 		return token, ghToken
- 	}
- 	if token := os.Getenv(githubToken); token != "" {
- 		return token, githubToken
- 	}
-+
- 	if cfg != nil {
--		token, _ := cfg.Get([]string{hostsKey, host, oauthToken})
--		return token, oauthToken
-+		if token, _ := cfg.Get([]string{hostsKey, host, oauthToken}); token != "" {
-+			return token, oauthToken
-+		}
- 	}
- 	return "", defaultSource
- }
diff --git a/SPECS/gh/CVE-2024-54132.patch b/SPECS/gh/CVE-2024-54132.patch
deleted file mode 100644
index a32a42eb48..0000000000
--- a/SPECS/gh/CVE-2024-54132.patch
+++ /dev/null
@@ -1,1349 +0,0 @@
-From 8da27d2c8ac8b781cf34a5e04ed57cfe4b68fa55 Mon Sep 17 00:00:00 2001
-From: Andy Feller 
-Date: Tue, 19 Nov 2024 17:55:18 -0500
-Subject: [PATCH 1/5] Second attempt to address exploit
-
-This builds off suggestion to reuse logic used already within `gh run download` for detecting path traversals.
-
-This largely works but runs into an issue where detection logic doesn't handle non-separated traversal.
----
- pkg/cmd/run/download/download.go      |   5 ++
- pkg/cmd/run/download/download_test.go | 102 ++++++++++++++++++++++++++
- pkg/cmd/run/download/zip.go           |   3 +
- 3 files changed, 110 insertions(+)
-
-diff --git a/pkg/cmd/run/download/download.go b/pkg/cmd/run/download/download.go
-index 99ec45bbeec..168cb6fcc8c 100644
---- a/pkg/cmd/run/download/download.go
-+++ b/pkg/cmd/run/download/download.go
-@@ -169,6 +169,11 @@ func runDownload(opts *DownloadOptions) error {
- 		if len(wantPatterns) != 0 || len(wantNames) != 1 {
- 			destDir = filepath.Join(destDir, a.Name)
- 		}
-+
-+		if !filepathDescendsFrom(destDir, opts.DestinationDir) {
-+			return fmt.Errorf("error downloading %s: would result in path traversal", a.Name)
-+		}
-+
- 		err := opts.Platform.Download(a.DownloadURL, destDir)
- 		if err != nil {
- 			return fmt.Errorf("error downloading %s: %w", a.Name, err)
-diff --git a/pkg/cmd/run/download/download_test.go b/pkg/cmd/run/download/download_test.go
-index 3c1c8f2d862..f07d661289f 100644
---- a/pkg/cmd/run/download/download_test.go
-+++ b/pkg/cmd/run/download/download_test.go
-@@ -289,6 +289,108 @@ func Test_runDownload(t *testing.T) {
- 					})
- 			},
- 		},
-+		{
-+			name: "given artifact name contains `..`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: ".",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "..",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ..: would result in path traversal",
-+		},
-+		{
-+			name: "given artifact name contains `..`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: "imaginary-dir",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "..",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ..: would result in path traversal",
-+		},
-+		{
-+			name: "given artifact name contains `../etc/passwd`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: ".",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "../etc/passwd",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ../etc/passwd: would result in path traversal",
-+		},
-+		{
-+			name: "given artifact name contains `../etc/passwd`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: "imaginary-dir",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "../etc/passwd",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ../etc/passwd: would result in path traversal",
-+		},
-+		{
-+			name: "given artifact name contains `../../etc/passwd`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: ".",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "../../etc/passwd",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ../../etc/passwd: would result in path traversal",
-+		},
-+		{
-+			name: "given artifact name contains `../../etc/passwd`, verify an error about path traversal is returned",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: "imaginary-dir",
-+			},
-+			mockAPI: func(p *mockPlatform) {
-+				p.On("List", "2345").Return([]shared.Artifact{
-+					{
-+						Name:        "../../etc/passwd",
-+						DownloadURL: "http://download.com/artifact1.zip",
-+						Expired:     false,
-+					},
-+				}, nil)
-+			},
-+			wantErr: "error downloading ../../etc/passwd: would result in path traversal",
-+		},
- 	}
- 	for _, tt := range tests {
- 		t.Run(tt.name, func(t *testing.T) {
-diff --git a/pkg/cmd/run/download/zip.go b/pkg/cmd/run/download/zip.go
-index ab5723e9468..f6a27afdd66 100644
---- a/pkg/cmd/run/download/zip.go
-+++ b/pkg/cmd/run/download/zip.go
-@@ -73,6 +73,9 @@ func getPerm(m os.FileMode) os.FileMode {
- func filepathDescendsFrom(p, dir string) bool {
- 	p = filepath.Clean(p)
- 	dir = filepath.Clean(dir)
-+	if dir == "." && p == ".." {
-+		return false
-+	}
- 	if dir == "." && !filepath.IsAbs(p) {
- 		return !strings.HasPrefix(p, ".."+string(filepath.Separator))
- 	}
-
-From 83cf41155646380d3df4037d3f2ac683147f194a Mon Sep 17 00:00:00 2001
-From: Tyler McGoffin 
-Date: Tue, 19 Nov 2024 16:08:31 -0800
-Subject: [PATCH 2/5] Improve test names so there is no repetition
-
----
- pkg/cmd/run/download/download_test.go | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/pkg/cmd/run/download/download_test.go b/pkg/cmd/run/download/download_test.go
-index f07d661289f..fb445ccd4e9 100644
---- a/pkg/cmd/run/download/download_test.go
-+++ b/pkg/cmd/run/download/download_test.go
-@@ -290,7 +290,7 @@ func Test_runDownload(t *testing.T) {
- 			},
- 		},
- 		{
--			name: "given artifact name contains `..`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `..` and the DestinationDir is `.`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: ".",
-@@ -307,7 +307,7 @@ func Test_runDownload(t *testing.T) {
- 			wantErr: "error downloading ..: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `..`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `..` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: "imaginary-dir",
-@@ -324,7 +324,7 @@ func Test_runDownload(t *testing.T) {
- 			wantErr: "error downloading ..: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../etc/passwd`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `../etc/passwd` and the DestinationDir is `.`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: ".",
-@@ -341,7 +341,7 @@ func Test_runDownload(t *testing.T) {
- 			wantErr: "error downloading ../etc/passwd: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../etc/passwd`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `../etc/passwd` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: "imaginary-dir",
-@@ -358,7 +358,7 @@ func Test_runDownload(t *testing.T) {
- 			wantErr: "error downloading ../etc/passwd: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../../etc/passwd`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `../../etc/passwd` and the DestinationDir is `.`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: ".",
-@@ -375,7 +375,7 @@ func Test_runDownload(t *testing.T) {
- 			wantErr: "error downloading ../../etc/passwd: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../../etc/passwd`, verify an error about path traversal is returned",
-+			name: "given artifact name contains `../../etc/passwd` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: "imaginary-dir",
-
-From e7c5706336d851b39930c7315132f89b25e77d4d Mon Sep 17 00:00:00 2001
-From: Andy Feller 
-Date: Thu, 21 Nov 2024 17:02:20 -0500
-Subject: [PATCH 3/5] Refactor download testing, simpler file descends
-
-This incorporates the work done by @williammartin to improve reasoning about `gh run download` behavior through testing while verifying a simpler solution to checking if a path is contained within a directory.
----
- pkg/cmd/run/download/download.go      |   1 +
- pkg/cmd/run/download/download_test.go | 524 +++++++++++++++-----------
- pkg/cmd/run/download/zip.go           |  14 +-
- 3 files changed, 309 insertions(+), 230 deletions(-)
-
-diff --git a/pkg/cmd/run/download/download.go b/pkg/cmd/run/download/download.go
-index 168cb6fcc8c..5bda2ba3da0 100644
---- a/pkg/cmd/run/download/download.go
-+++ b/pkg/cmd/run/download/download.go
-@@ -166,6 +166,7 @@ func runDownload(opts *DownloadOptions) error {
- 			}
- 		}
- 		destDir := opts.DestinationDir
-+		// Why do we only include the artifact name in the destination directory if there are multiple?
- 		if len(wantPatterns) != 0 || len(wantNames) != 1 {
- 			destDir = filepath.Join(destDir, a.Name)
- 		}
-diff --git a/pkg/cmd/run/download/download_test.go b/pkg/cmd/run/download/download_test.go
-index fb445ccd4e9..0df94ccf498 100644
---- a/pkg/cmd/run/download/download_test.go
-+++ b/pkg/cmd/run/download/download_test.go
-@@ -2,8 +2,11 @@ package download
- 
- import (
- 	"bytes"
-+	"errors"
-+	"fmt"
- 	"io"
- 	"net/http"
-+	"os"
- 	"path/filepath"
- 	"testing"
- 
-@@ -14,7 +17,6 @@ import (
- 	"github.com/cli/cli/v2/pkg/iostreams"
- 	"github.com/google/shlex"
- 	"github.com/stretchr/testify/assert"
--	"github.com/stretchr/testify/mock"
- 	"github.com/stretchr/testify/require"
- )
- 
-@@ -143,261 +145,350 @@ func Test_NewCmdDownload(t *testing.T) {
- 	}
- }
- 
-+type testArtifact struct {
-+	artifact shared.Artifact
-+	files    []string
-+}
-+
-+type fakePlatform struct {
-+	runArtifacts map[string][]testArtifact
-+}
-+
-+func (f *fakePlatform) List(runID string) ([]shared.Artifact, error) {
-+	var runIds []string
-+	if runID != "" {
-+		runIds = []string{runID}
-+	} else {
-+		for k := range f.runArtifacts {
-+			runIds = append(runIds, k)
-+		}
-+	}
-+
-+	var artifacts []shared.Artifact
-+	for _, id := range runIds {
-+		for _, a := range f.runArtifacts[id] {
-+			artifacts = append(artifacts, a.artifact)
-+		}
-+	}
-+
-+	return artifacts, nil
-+}
-+
-+func (f *fakePlatform) Download(url string, dir string) error {
-+	if err := os.MkdirAll(dir, 0755); err != nil {
-+		return err
-+	}
-+	// Now to be consistent, we find the artifact with the provided URL.
-+	// It's a bit janky to iterate the runs, to find the right artifact
-+	// rather than keying directly to it, but it allows the setup of the
-+	// fake platform to be declarative rather than imperative.
-+	// Think fakePlatform { artifacts: ... } rather than fakePlatform.makeArtifactAvailable()
-+	for _, testArtifacts := range f.runArtifacts {
-+		for _, testArtifact := range testArtifacts {
-+			if testArtifact.artifact.DownloadURL == url {
-+				for _, file := range testArtifact.files {
-+					path := filepath.Join(dir, file)
-+					return os.WriteFile(path, []byte{}, 0600)
-+				}
-+			}
-+		}
-+	}
-+
-+	return errors.New("no artifact matches the provided URL")
-+}
-+
- func Test_runDownload(t *testing.T) {
- 	tests := []struct {
--		name        string
--		opts        DownloadOptions
--		mockAPI     func(*mockPlatform)
--		promptStubs func(*prompter.MockPrompter)
--		wantErr     string
-+		name          string
-+		opts          DownloadOptions
-+		platform      *fakePlatform
-+		promptStubs   func(*prompter.MockPrompter)
-+		expectedFiles []string
-+		wantErr       string
- 	}{
- 		{
- 			name: "download non-expired",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: "./tmp",
--				Names:          []string(nil),
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "artifact-1",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--					{
--						Name:        "expired-artifact",
--						DownloadURL: "http://download.com/expired.zip",
--						Expired:     true,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "expired-artifact",
-+								DownloadURL: "http://download.com/expired.zip",
-+								Expired:     true,
-+							},
-+							files: []string{
-+								"expired",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.zip",
--						Expired:     false,
--					},
--				}, nil)
--				p.On("Download", "http://download.com/artifact1.zip", filepath.FromSlash("tmp/artifact-1")).Return(nil)
--				p.On("Download", "http://download.com/artifact2.zip", filepath.FromSlash("tmp/artifact-2")).Return(nil)
-+				},
-+			},
-+			expectedFiles: []string{
-+				filepath.Join("artifact-1", "artifact-1-file"),
-+				filepath.Join("artifact-2", "artifact-2-file"),
- 			},
- 		},
- 		{
--			name: "no valid artifacts",
-+			name: "all artifacts are expired",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
--				Names:          []string(nil),
-+				RunID: "2345",
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "artifact-1",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     true,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     true,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     true,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.zip",
--						Expired:     true,
--					},
--				}, nil)
-+				},
- 			},
--			wantErr: "no valid artifacts found to download",
-+			expectedFiles: []string{},
-+			wantErr:       "no valid artifacts found to download",
- 		},
- 		{
- 			name: "no name matches",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
--				Names:          []string{"artifact-3"},
-+				RunID: "2345",
-+				Names: []string{"artifact-3"},
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "artifact-1",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.zip",
--						Expired:     false,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--				}, nil)
-+				},
- 			},
--			wantErr: "no artifact matches any of the names or patterns provided",
-+			expectedFiles: []string{},
-+			wantErr:       "no artifact matches any of the names or patterns provided",
- 		},
- 		{
- 			name: "no pattern matches",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
--				FilePatterns:   []string{"artifiction-*"},
--			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "artifact-1",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.zip",
--						Expired:     false,
--					},
--				}, nil)
--			},
--			wantErr: "no artifact matches any of the names or patterns provided",
--		},
--		{
--			name: "prompt to select artifact",
--			opts: DownloadOptions{
--				RunID:          "",
--				DoPrompt:       true,
--				DestinationDir: ".",
--				Names:          []string(nil),
-+				RunID:        "2345",
-+				FilePatterns: []string{"artifiction-*"},
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "").Return([]shared.Artifact{
--					{
--						Name:        "artifact-1",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--					{
--						Name:        "expired-artifact",
--						DownloadURL: "http://download.com/expired.zip",
--						Expired:     true,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.zip",
--						Expired:     false,
--					},
--					{
--						Name:        "artifact-2",
--						DownloadURL: "http://download.com/artifact2.also.zip",
--						Expired:     false,
--					},
--				}, nil)
--				p.On("Download", "http://download.com/artifact2.zip", ".").Return(nil)
--			},
--			promptStubs: func(pm *prompter.MockPrompter) {
--				pm.RegisterMultiSelect("Select artifacts to download:", nil, []string{"artifact-1", "artifact-2"},
--					func(_ string, _, opts []string) ([]int, error) {
--						return []int{1}, nil
--					})
-+				},
- 			},
-+			expectedFiles: []string{},
-+			wantErr:       "no artifact matches any of the names or patterns provided",
- 		},
- 		{
--			name: "given artifact name contains `..` and the DestinationDir is `.`, verify an error about path traversal is returned",
-+			name: "avoid redownloading files of the same name",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
-+				RunID: "2345",
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "..",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--				}, nil)
--			},
--			wantErr: "error downloading ..: would result in path traversal",
--		},
--		{
--			name: "given artifact name contains `..` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
--			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: "imaginary-dir",
-+				},
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "..",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--				}, nil)
-+			expectedFiles: []string{
-+				filepath.Join("artifact-1", "artifact-1-file"),
- 			},
--			wantErr: "error downloading ..: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../etc/passwd` and the DestinationDir is `.`, verify an error about path traversal is returned",
-+			name: "prompt to select artifact",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
-+				RunID:    "",
-+				DoPrompt: true,
-+				Names:    []string(nil),
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "../etc/passwd",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "expired-artifact",
-+								DownloadURL: "http://download.com/expired.zip",
-+								Expired:     true,
-+							},
-+							files: []string{
-+								"expired",
-+							},
-+						},
- 					},
--				}, nil)
--			},
--			wantErr: "error downloading ../etc/passwd: would result in path traversal",
--		},
--		{
--			name: "given artifact name contains `../etc/passwd` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
--			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: "imaginary-dir",
--			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "../etc/passwd",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
-+					"6789": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
- 					},
--				}, nil)
-+				},
- 			},
--			wantErr: "error downloading ../etc/passwd: would result in path traversal",
--		},
--		{
--			name: "given artifact name contains `../../etc/passwd` and the DestinationDir is `.`, verify an error about path traversal is returned",
--			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: ".",
-+			promptStubs: func(pm *prompter.MockPrompter) {
-+				pm.RegisterMultiSelect("Select artifacts to download:", nil, []string{"artifact-1", "artifact-2"},
-+					func(_ string, _, opts []string) ([]int, error) {
-+						for i, o := range opts {
-+							if o == "artifact-2" {
-+								return []int{i}, nil
-+							}
-+						}
-+						return nil, fmt.Errorf("no artifact-2 found in %v", opts)
-+					})
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "../../etc/passwd",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
--					},
--				}, nil)
-+			expectedFiles: []string{
-+				filepath.Join("artifact-2-file"),
- 			},
--			wantErr: "error downloading ../../etc/passwd: would result in path traversal",
- 		},
- 		{
--			name: "given artifact name contains `../../etc/passwd` and the DestinationDir is `imaginary-dir`, verify an error about path traversal is returned",
-+			name: "handling artifact name with path traversal exploit",
- 			opts: DownloadOptions{
--				RunID:          "2345",
--				DestinationDir: "imaginary-dir",
-+				RunID: "2345",
- 			},
--			mockAPI: func(p *mockPlatform) {
--				p.On("List", "2345").Return([]shared.Artifact{
--					{
--						Name:        "../../etc/passwd",
--						DownloadURL: "http://download.com/artifact1.zip",
--						Expired:     false,
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "..",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"etc/passwd",
-+							},
-+						},
- 					},
--				}, nil)
-+				},
- 			},
--			wantErr: "error downloading ../../etc/passwd: would result in path traversal",
-+			expectedFiles: []string{},
-+			wantErr:       "error downloading ..: would result in path traversal",
- 		},
- 	}
- 	for _, tt := range tests {
- 		t.Run(tt.name, func(t *testing.T) {
- 			opts := &tt.opts
-+			if opts.DestinationDir == "" {
-+				opts.DestinationDir = t.TempDir()
-+			} else {
-+				opts.DestinationDir = filepath.Join(t.TempDir(), opts.DestinationDir)
-+			}
-+
- 			ios, _, stdout, stderr := iostreams.Test()
- 			opts.IO = ios
--			opts.Platform = newMockPlatform(t, tt.mockAPI)
-+			opts.Platform = tt.platform
- 
- 			pm := prompter.NewMockPrompter(t)
- 			opts.Prompter = pm
-@@ -412,34 +503,31 @@ func Test_runDownload(t *testing.T) {
- 				require.NoError(t, err)
- 			}
- 
-+			// Check that the exact number of files exist
-+			require.Equal(t, len(tt.expectedFiles), countFilesInDirRecursively(t, opts.DestinationDir))
-+
-+			// Then check that the exact files are correct
-+			for _, name := range tt.expectedFiles {
-+				require.FileExists(t, filepath.Join(opts.DestinationDir, name))
-+			}
-+
- 			assert.Equal(t, "", stdout.String())
- 			assert.Equal(t, "", stderr.String())
- 		})
- 	}
- }
- 
--type mockPlatform struct {
--	mock.Mock
--}
-+func countFilesInDirRecursively(t *testing.T, dir string) int {
-+	t.Helper()
- 
--func newMockPlatform(t *testing.T, config func(*mockPlatform)) *mockPlatform {
--	m := &mockPlatform{}
--	m.Test(t)
--	t.Cleanup(func() {
--		m.AssertExpectations(t)
--	})
--	if config != nil {
--		config(m)
--	}
--	return m
--}
--
--func (p *mockPlatform) List(runID string) ([]shared.Artifact, error) {
--	args := p.Called(runID)
--	return args.Get(0).([]shared.Artifact), args.Error(1)
--}
-+	count := 0
-+	require.NoError(t, filepath.Walk(dir, func(_ string, info os.FileInfo, err error) error {
-+		require.NoError(t, err)
-+		if !info.IsDir() {
-+			count++
-+		}
-+		return nil
-+	}))
- 
--func (p *mockPlatform) Download(url string, dir string) error {
--	args := p.Called(url, dir)
--	return args.Error(0)
-+	return count
- }
-diff --git a/pkg/cmd/run/download/zip.go b/pkg/cmd/run/download/zip.go
-index f6a27afdd66..52994199a9b 100644
---- a/pkg/cmd/run/download/zip.go
-+++ b/pkg/cmd/run/download/zip.go
-@@ -71,16 +71,6 @@ func getPerm(m os.FileMode) os.FileMode {
- }
- 
- func filepathDescendsFrom(p, dir string) bool {
--	p = filepath.Clean(p)
--	dir = filepath.Clean(dir)
--	if dir == "." && p == ".." {
--		return false
--	}
--	if dir == "." && !filepath.IsAbs(p) {
--		return !strings.HasPrefix(p, ".."+string(filepath.Separator))
--	}
--	if !strings.HasSuffix(dir, string(filepath.Separator)) {
--		dir += string(filepath.Separator)
--	}
--	return strings.HasPrefix(p, dir)
-+	relativePath, _ := filepath.Rel(dir, p)
-+	return !strings.HasPrefix(relativePath, "..")
- }
-
-From cdfc12caf52754ea4026d5338a56ad4e6f822105 Mon Sep 17 00:00:00 2001
-From: Andy Feller 
-Date: Fri, 22 Nov 2024 15:26:11 -0500
-Subject: [PATCH 4/5] Expand logic and tests to handle edge cases
-
-This commit expands filepathDescendsFrom(string, string) to handle edge cases such as mixing absolute and relative paths or artifact name edge cases.
-
-Additionally, tests for filepathDescendsFrom() and downloadrun() have been expanded to verify additional use cases.
----
- pkg/cmd/run/download/download.go      |  11 +-
- pkg/cmd/run/download/download_test.go | 189 +++++++++++++++++++++++++-
- pkg/cmd/run/download/zip.go           |  21 ++-
- pkg/cmd/run/download/zip_test.go      |  80 +++++++++++
- 4 files changed, 297 insertions(+), 4 deletions(-)
-
-diff --git a/pkg/cmd/run/download/download.go b/pkg/cmd/run/download/download.go
-index 5bda2ba3da0..04ce7434051 100644
---- a/pkg/cmd/run/download/download.go
-+++ b/pkg/cmd/run/download/download.go
-@@ -166,8 +166,15 @@ func runDownload(opts *DownloadOptions) error {
- 			}
- 		}
- 		destDir := opts.DestinationDir
--		// Why do we only include the artifact name in the destination directory if there are multiple?
--		if len(wantPatterns) != 0 || len(wantNames) != 1 {
-+
-+		// Isolate the downloaded artifact file to avoid potential conflicts from other downloaded artifacts when:
-+		//
-+		// 1. len(wantPatterns) > 0: Any pattern can result in 2+ artifacts
-+		// 2. len(wantNames) == 0: User wants all artifacts regardless what they are named
-+		// 3. len(wantNames) > 1: User wants multiple, specific artifacts
-+		//
-+		// Otherwise if a single artifact is wanted, then the protective subdirectory is an unnecessary inconvenience.
-+		if len(wantPatterns) > 0 || len(wantNames) != 1 {
- 			destDir = filepath.Join(destDir, a.Name)
- 		}
- 
-diff --git a/pkg/cmd/run/download/download_test.go b/pkg/cmd/run/download/download_test.go
-index 0df94ccf498..aeab2027893 100644
---- a/pkg/cmd/run/download/download_test.go
-+++ b/pkg/cmd/run/download/download_test.go
-@@ -207,7 +207,7 @@ func Test_runDownload(t *testing.T) {
- 		wantErr       string
- 	}{
- 		{
--			name: "download non-expired",
-+			name: "download non-expired to relative directory",
- 			opts: DownloadOptions{
- 				RunID:          "2345",
- 				DestinationDir: "./tmp",
-@@ -253,6 +253,53 @@ func Test_runDownload(t *testing.T) {
- 				filepath.Join("artifact-2", "artifact-2-file"),
- 			},
- 		},
-+		{
-+			name: "download non-expired to absolute directory",
-+			opts: DownloadOptions{
-+				RunID:          "2345",
-+				DestinationDir: "/tmp",
-+			},
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "expired-artifact",
-+								DownloadURL: "http://download.com/expired.zip",
-+								Expired:     true,
-+							},
-+							files: []string{
-+								"expired",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-2",
-+								DownloadURL: "http://download.com/artifact2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-2-file",
-+							},
-+						},
-+					},
-+				},
-+			},
-+			expectedFiles: []string{
-+				filepath.Join("artifact-1", "artifact-1-file"),
-+				filepath.Join("artifact-2", "artifact-2-file"),
-+			},
-+		},
- 		{
- 			name: "all artifacts are expired",
- 			opts: DownloadOptions{
-@@ -322,6 +369,53 @@ func Test_runDownload(t *testing.T) {
- 			expectedFiles: []string{},
- 			wantErr:       "no artifact matches any of the names or patterns provided",
- 		},
-+		{
-+			name: "pattern matches",
-+			opts: DownloadOptions{
-+				RunID:        "2345",
-+				FilePatterns: []string{"artifact-*"},
-+			},
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "non-artifact-2",
-+								DownloadURL: "http://download.com/non-artifact-2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"non-artifact-2-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-3",
-+								DownloadURL: "http://download.com/artifact3.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-3-file",
-+							},
-+						},
-+					},
-+				},
-+			},
-+			expectedFiles: []string{
-+				filepath.Join("artifact-1", "artifact-1-file"),
-+				filepath.Join("artifact-3", "artifact-3-file"),
-+			},
-+		},
- 		{
- 			name: "no pattern matches",
- 			opts: DownloadOptions{
-@@ -357,6 +451,99 @@ func Test_runDownload(t *testing.T) {
- 			expectedFiles: []string{},
- 			wantErr:       "no artifact matches any of the names or patterns provided",
- 		},
-+		{
-+			name: "want specific single artifact",
-+			opts: DownloadOptions{
-+				RunID: "2345",
-+				Names: []string{"non-artifact-2"},
-+			},
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "non-artifact-2",
-+								DownloadURL: "http://download.com/non-artifact-2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"non-artifact-2-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-3",
-+								DownloadURL: "http://download.com/artifact3.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-3-file",
-+							},
-+						},
-+					},
-+				},
-+			},
-+			expectedFiles: []string{
-+				filepath.Join("non-artifact-2-file"),
-+			},
-+		},
-+		{
-+			name: "want specific multiple artifacts",
-+			opts: DownloadOptions{
-+				RunID: "2345",
-+				Names: []string{"artifact-1", "artifact-3"},
-+			},
-+			platform: &fakePlatform{
-+				runArtifacts: map[string][]testArtifact{
-+					"2345": {
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-1",
-+								DownloadURL: "http://download.com/artifact1.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-1-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "non-artifact-2",
-+								DownloadURL: "http://download.com/non-artifact-2.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"non-artifact-2-file",
-+							},
-+						},
-+						{
-+							artifact: shared.Artifact{
-+								Name:        "artifact-3",
-+								DownloadURL: "http://download.com/artifact3.zip",
-+								Expired:     false,
-+							},
-+							files: []string{
-+								"artifact-3-file",
-+							},
-+						},
-+					},
-+				},
-+			},
-+			expectedFiles: []string{
-+				filepath.Join("artifact-1", "artifact-1-file"),
-+				filepath.Join("artifact-3", "artifact-3-file"),
-+			},
-+		},
- 		{
- 			name: "avoid redownloading files of the same name",
- 			opts: DownloadOptions{
-diff --git a/pkg/cmd/run/download/zip.go b/pkg/cmd/run/download/zip.go
-index 52994199a9b..a68b75fd6b7 100644
---- a/pkg/cmd/run/download/zip.go
-+++ b/pkg/cmd/run/download/zip.go
-@@ -71,6 +71,25 @@ func getPerm(m os.FileMode) os.FileMode {
- }
- 
- func filepathDescendsFrom(p, dir string) bool {
--	relativePath, _ := filepath.Rel(dir, p)
-+	// Regardless of the logic below, `p` is never allowed to be current directory `.` or parent directory `..`
-+	// however we check explicitly here before filepath.Rel() which doesn't cover all cases.
-+	p = filepath.Clean(p)
-+
-+	if p == "." || p == ".." {
-+		return false
-+	}
-+
-+	// filepathDescendsFrom() takes advantage of filepath.Rel() to determine if `p` is descended from `dir`:
-+	//
-+	// 1. filepath.Rel() calculates a path to traversal from fictious `dir` to `p`.
-+	// 2. filepath.Rel() errors in a handful of cases where absolute and relative paths are compared as well as certain traversal edge cases
-+	//    For more information, https://github.com/golang/go/blob/00709919d09904b17cfe3bfeb35521cbd3fb04f8/src/path/filepath/path_test.go#L1510-L1515
-+	// 3. If the path to traverse `dir` to `p` requires `..`, then we know it is not descend from / contained in `dir`
-+	//
-+	// As-is, this function requires the caller to ensure `p` and `dir` are either 1) both relative or 2) both absolute.
-+	relativePath, err := filepath.Rel(dir, p)
-+	if err != nil {
-+		return false
-+	}
- 	return !strings.HasPrefix(relativePath, "..")
- }
-diff --git a/pkg/cmd/run/download/zip_test.go b/pkg/cmd/run/download/zip_test.go
-index ca401cdb9ed..b85122ec57a 100644
---- a/pkg/cmd/run/download/zip_test.go
-+++ b/pkg/cmd/run/download/zip_test.go
-@@ -130,6 +130,86 @@ func Test_filepathDescendsFrom(t *testing.T) {
- 			},
- 			want: false,
- 		},
-+		{
-+			name: "deny parent directory filename (`..`) escaping absolute directory",
-+			args: args{
-+				p:   filepath.FromSlash(".."),
-+				dir: filepath.FromSlash("/var/logs/"),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny parent directory filename (`..`) escaping current directory",
-+			args: args{
-+				p:   filepath.FromSlash(".."),
-+				dir: filepath.FromSlash("."),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny parent directory filename (`..`) escaping parent directory",
-+			args: args{
-+				p:   filepath.FromSlash(".."),
-+				dir: filepath.FromSlash(".."),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny parent directory filename (`..`) escaping relative directory",
-+			args: args{
-+				p:   filepath.FromSlash(".."),
-+				dir: filepath.FromSlash("relative-dir"),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny current directory filename (`.`) in absolute directory",
-+			args: args{
-+				p:   filepath.FromSlash("."),
-+				dir: filepath.FromSlash("/var/logs/"),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny current directory filename (`.`) in current directory",
-+			args: args{
-+				p:   filepath.FromSlash("."),
-+				dir: filepath.FromSlash("."),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny current directory filename (`.`) in parent directory",
-+			args: args{
-+				p:   filepath.FromSlash("."),
-+				dir: filepath.FromSlash(".."),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "deny current directory filename (`.`) in relative directory",
-+			args: args{
-+				p:   filepath.FromSlash("."),
-+				dir: filepath.FromSlash("relative-dir"),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "relative path, absolute dir",
-+			args: args{
-+				p:   filepath.FromSlash("whatever"),
-+				dir: filepath.FromSlash("/a/b/c"),
-+			},
-+			want: false,
-+		},
-+		{
-+			name: "absolute path, relative dir",
-+			args: args{
-+				p:   filepath.FromSlash("/a/b/c"),
-+				dir: filepath.FromSlash("whatever"),
-+			},
-+			want: false,
-+		},
- 	}
- 	for _, tt := range tests {
- 		t.Run(tt.name, func(t *testing.T) {
-
-From 8720479b0bfc95450abb2ba88489f2893e4838a9 Mon Sep 17 00:00:00 2001
-From: Andy Feller 
-Date: Tue, 3 Dec 2024 13:33:00 -0500
-Subject: [PATCH 5/5] Consolidate logic for isolating artifacts
-
----
- pkg/cmd/run/download/download.go | 34 ++++++++++++++++++++++----------
- 1 file changed, 24 insertions(+), 10 deletions(-)
-
-diff --git a/pkg/cmd/run/download/download.go b/pkg/cmd/run/download/download.go
-index 04ce7434051..8f25e84a228 100644
---- a/pkg/cmd/run/download/download.go
-+++ b/pkg/cmd/run/download/download.go
-@@ -151,8 +151,10 @@ func runDownload(opts *DownloadOptions) error {
- 	opts.IO.StartProgressIndicator()
- 	defer opts.IO.StopProgressIndicator()
- 
--	// track downloaded artifacts and avoid re-downloading any of the same name
-+	// track downloaded artifacts and avoid re-downloading any of the same name, isolate if multiple artifacts
- 	downloaded := set.NewStringSet()
-+	isolateArtifacts := isolateArtifacts(wantNames, wantPatterns)
-+
- 	for _, a := range artifacts {
- 		if a.Expired {
- 			continue
-@@ -165,16 +167,9 @@ func runDownload(opts *DownloadOptions) error {
- 				continue
- 			}
- 		}
--		destDir := opts.DestinationDir
- 
--		// Isolate the downloaded artifact file to avoid potential conflicts from other downloaded artifacts when:
--		//
--		// 1. len(wantPatterns) > 0: Any pattern can result in 2+ artifacts
--		// 2. len(wantNames) == 0: User wants all artifacts regardless what they are named
--		// 3. len(wantNames) > 1: User wants multiple, specific artifacts
--		//
--		// Otherwise if a single artifact is wanted, then the protective subdirectory is an unnecessary inconvenience.
--		if len(wantPatterns) > 0 || len(wantNames) != 1 {
-+		destDir := opts.DestinationDir
-+		if isolateArtifacts {
- 			destDir = filepath.Join(destDir, a.Name)
- 		}
- 
-@@ -196,6 +191,25 @@ func runDownload(opts *DownloadOptions) error {
- 	return nil
- }
- 
-+func isolateArtifacts(wantNames []string, wantPatterns []string) bool {
-+	if len(wantPatterns) > 0 {
-+		// Patterns can match multiple artifacts
-+		return true
-+	}
-+
-+	if len(wantNames) == 0 {
-+		// All artifacts wanted regardless what they are named
-+		return true
-+	}
-+
-+	if len(wantNames) > 1 {
-+		// Multiple, specific artifacts wanted
-+		return true
-+	}
-+
-+	return false
-+}
-+
- func matchAnyName(names []string, name string) bool {
- 	for _, n := range names {
- 		if name == n {
diff --git a/SPECS/gh/CVE-2025-22869.patch b/SPECS/gh/CVE-2025-22869.patch
deleted file mode 100644
index c0415fddb0..0000000000
--- a/SPECS/gh/CVE-2025-22869.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 041b89a18f81265899e42e6801f830c101a96120 Mon Sep 17 00:00:00 2001
-From: Kanishk-Bansal 
-Date: Sun, 2 Mar 2025 13:46:00 +0000
-Subject: [PATCH] CVE-2025-22869
-
-Upstream Reference : https://github.com/golang/crypto/commit/7292932d45d55c7199324ab0027cc86e8198aa22
-
-ssh: limit the size of the internal packet queue while waiting for KEX
-
-In the SSH protocol, clients and servers execute the key exchange to
-generate one-time session keys used for encryption and authentication.
-The key exchange is performed initially after the connection is
-established and then periodically after a configurable amount of data.
-While a key exchange is in progress, we add the received packets to an
-internal queue until we receive SSH_MSG_KEXINIT from the other side.
-This can result in high memory usage if the other party is slow to
-respond to the SSH_MSG_KEXINIT packet, or memory exhaustion if a
-malicious client never responds to an SSH_MSG_KEXINIT packet during a
-large file transfer.
-We now limit the internal queue to 64 packets: this means 2MB with the
-typical 32KB packet size.
-When the internal queue is full we block further writes until the
-pending key exchange is completed or there is a read or write error.
-
-Thanks to Yuichi Watanabe for reporting this issue.
-
-Change-Id: I1ce2214cc16e08b838d4bc346c74c72addafaeec
-Reviewed-on: https://go-review.googlesource.com/c/crypto/+/652135
-Reviewed-by: Neal Patel 
-Auto-Submit: Gopher Robot 
-Reviewed-by: Roland Shoemaker 
-LUCI-TryBot-Result: Go LUCI 
-
----
- vendor/golang.org/x/crypto/ssh/handshake.go | 47 ++++++++++++++++-----
- 1 file changed, 37 insertions(+), 10 deletions(-)
-
-diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go
-index 70a7369..e14eb6c 100644
---- a/vendor/golang.org/x/crypto/ssh/handshake.go
-+++ b/vendor/golang.org/x/crypto/ssh/handshake.go
-@@ -24,6 +24,11 @@ const debugHandshake = false
- // quickly.
- const chanSize = 16
- 
-+// maxPendingPackets sets the maximum number of packets to queue while waiting
-+// for KEX to complete. This limits the total pending data to maxPendingPackets
-+// * maxPacket bytes, which is ~16.8MB.
-+const maxPendingPackets = 64
-+
- // keyingTransport is a packet based transport that supports key
- // changes. It need not be thread-safe. It should pass through
- // msgNewKeys in both directions.
-@@ -58,11 +63,19 @@ type handshakeTransport struct {
- 	incoming  chan []byte
- 	readError error
- 
--	mu               sync.Mutex
--	writeError       error
--	sentInitPacket   []byte
--	sentInitMsg      *kexInitMsg
--	pendingPackets   [][]byte // Used when a key exchange is in progress.
-+	mu sync.Mutex
-+	// Condition for the above mutex. It is used to notify a completed key
-+	// exchange or a write failure. Writes can wait for this condition while a
-+	// key exchange is in progress.
-+	writeCond      *sync.Cond
-+	writeError     error
-+	sentInitPacket []byte
-+	sentInitMsg    *kexInitMsg
-+	// Used to queue writes when a key exchange is in progress. The length is
-+	// limited by pendingPacketsSize. Once full, writes will block until the key
-+	// exchange is completed or an error occurs. If not empty, it is emptied
-+	// all at once when the key exchange is completed in kexLoop.
-+	pendingPackets   [][]byte
- 	writePacketsLeft uint32
- 	writeBytesLeft   int64
- 
-@@ -114,6 +127,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion,
- 
- 		config: config,
- 	}
-+	t.writeCond = sync.NewCond(&t.mu)
- 	t.resetReadThresholds()
- 	t.resetWriteThresholds()
- 
-@@ -236,6 +250,7 @@ func (t *handshakeTransport) recordWriteError(err error) {
- 	defer t.mu.Unlock()
- 	if t.writeError == nil && err != nil {
- 		t.writeError = err
-+		t.writeCond.Broadcast()
- 	}
- }
- 
-@@ -339,6 +354,8 @@ write:
- 			}
- 		}
- 		t.pendingPackets = t.pendingPackets[:0]
-+		// Unblock writePacket if waiting for KEX.
-+		t.writeCond.Broadcast()
- 		t.mu.Unlock()
- 	}
- 
-@@ -526,11 +543,20 @@ func (t *handshakeTransport) writePacket(p []byte) error {
- 	}
- 
- 	if t.sentInitMsg != nil {
--		// Copy the packet so the writer can reuse the buffer.
--		cp := make([]byte, len(p))
--		copy(cp, p)
--		t.pendingPackets = append(t.pendingPackets, cp)
--		return nil
-+		if len(t.pendingPackets) < maxPendingPackets {
-+			// Copy the packet so the writer can reuse the buffer.
-+			cp := make([]byte, len(p))
-+			copy(cp, p)
-+			t.pendingPackets = append(t.pendingPackets, cp)
-+			return nil
-+		}
-+		for t.sentInitMsg != nil {
-+			// Block and wait for KEX to complete or an error.
-+			t.writeCond.Wait()
-+			if t.writeError != nil {
-+				return t.writeError
-+			}
-+		}
- 	}
- 
- 	if t.writeBytesLeft > 0 {
-@@ -547,6 +573,7 @@ func (t *handshakeTransport) writePacket(p []byte) error {
- 
- 	if err := t.pushPacket(p); err != nil {
- 		t.writeError = err
-+		t.writeCond.Broadcast()
- 	}
- 
- 	return nil
--- 
-2.45.2
-
diff --git a/SPECS/gh/CVE-2025-22872.patch b/SPECS/gh/CVE-2025-22872.patch
deleted file mode 100644
index a9203f2a9a..0000000000
--- a/SPECS/gh/CVE-2025-22872.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 01035da6c5be2080f75765d9ebbb462614d7e81a Mon Sep 17 00:00:00 2001
-From: jykanase 
-Date: Tue, 22 Apr 2025 08:15:38 +0000
-Subject: [PATCH] CVE-2025-22872
-
-Upstream patch reference: https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9
----
- vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++--
- 1 file changed, 16 insertions(+), 2 deletions(-)
-
-diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go
-index 3c57880..6598c1f 100644
---- a/vendor/golang.org/x/net/html/token.go
-+++ b/vendor/golang.org/x/net/html/token.go
-@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType {
- 	if raw {
- 		z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end]))
- 	}
--	// Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.2 - diff --git a/SPECS/gh/CVE-2025-25204.patch b/SPECS/gh/CVE-2025-25204.patch deleted file mode 100644 index 809efc1f95..0000000000 --- a/SPECS/gh/CVE-2025-25204.patch +++ /dev/null @@ -1,47 +0,0 @@ -From bf3a40aef3af6919bba73bfeaadac2d0c169628d Mon Sep 17 00:00:00 2001 -From: Fredrik Skogman -Date: Tue, 11 Feb 2025 09:07:51 +0100 -Subject: [PATCH] Exit with error if no matching predicate type exists - -Signed-off-by: Fredrik Skogman ---- - pkg/cmd/attestation/verify/verify.go | 2 +- - pkg/cmd/attestation/verify/verify_test.go | 12 ++++++++++++ - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/pkg/cmd/attestation/verify/verify.go b/pkg/cmd/attestation/verify/verify.go -index 90242a9fed2..0a8de8b4599 100644 ---- a/pkg/cmd/attestation/verify/verify.go -+++ b/pkg/cmd/attestation/verify/verify.go -@@ -236,7 +236,7 @@ func runVerify(opts *Options) error { - filteredAttestations := verification.FilterAttestations(ec.PredicateType, attestations) - if len(filteredAttestations) == 0 { - opts.Logger.Printf(opts.Logger.ColorScheme.Red("✗ No attestations found with predicate type: %s\n"), opts.PredicateType) -- return err -+ return fmt.Errorf("no matching predicate found") - } - attestations = filteredAttestations - -diff --git a/pkg/cmd/attestation/verify/verify_test.go b/pkg/cmd/attestation/verify/verify_test.go -index 87ffa96f090..092a009d81e 100644 ---- a/pkg/cmd/attestation/verify/verify_test.go -+++ b/pkg/cmd/attestation/verify/verify_test.go -@@ -501,6 +501,18 @@ func TestRunVerify(t *testing.T) { - require.Nil(t, runVerify(&customOpts)) - }) - -+ t.Run("with valid OCI artifact with UseBundleFromRegistry flag and unknown predicate type", func(t *testing.T) { -+ customOpts := publicGoodOpts -+ customOpts.ArtifactPath = "oci://ghcr.io/github/test" -+ customOpts.BundlePath = "" -+ customOpts.UseBundleFromRegistry = true -+ customOpts.PredicateType = "https://predicate.type" -+ -+ err := runVerify(&customOpts) -+ require.Error(t, err) -+ require.ErrorContains(t, err, "no matching predicate found") -+ }) -+ - t.Run("with valid OCI artifact with UseBundleFromRegistry flag but no bundle return from registry", func(t *testing.T) { - customOpts := publicGoodOpts - customOpts.ArtifactPath = "oci://ghcr.io/github/test" diff --git a/SPECS/gh/CVE-2025-27144.patch b/SPECS/gh/CVE-2025-27144.patch deleted file mode 100644 index 818881b1a8..0000000000 --- a/SPECS/gh/CVE-2025-27144.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 72e5dc031b9ecdc0ba2db04b715bb43b8eefcf59 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 09:57:57 +0000 -Subject: [PATCH] CVE-2025-27144 -Upstream Reference : https://github.com/go-jose/go-jose/commit/99b346cec4e86d102284642c5dcbe9bb0cacfc22 ---- - vendor/github.com/go-jose/go-jose/v4/jwe.go | 5 +++-- - vendor/github.com/go-jose/go-jose/v4/jws.go | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/vendor/github.com/go-jose/go-jose/v4/jwe.go b/vendor/github.com/go-jose/go-jose/v4/jwe.go -index 89f03ee3..9f1322dc 100644 ---- a/vendor/github.com/go-jose/go-jose/v4/jwe.go -+++ b/vendor/github.com/go-jose/go-jose/v4/jwe.go -@@ -288,10 +288,11 @@ func ParseEncryptedCompact( - keyAlgorithms []KeyAlgorithm, - contentEncryption []ContentEncryption, - ) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) - if err != nil { -diff --git a/vendor/github.com/go-jose/go-jose/v4/jws.go b/vendor/github.com/go-jose/go-jose/v4/jws.go -index 3a912301..d09d8ba5 100644 ---- a/vendor/github.com/go-jose/go-jose/v4/jws.go -+++ b/vendor/github.com/go-jose/go-jose/v4/jws.go -@@ -327,10 +327,11 @@ func parseSignedCompact( - payload []byte, - signatureAlgorithms []SignatureAlgorithm, - ) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/gh/CVE-2025-48938.patch b/SPECS/gh/CVE-2025-48938.patch deleted file mode 100644 index 34f673b2c3..0000000000 --- a/SPECS/gh/CVE-2025-48938.patch +++ /dev/null @@ -1,98 +0,0 @@ -From f30373d5ac9c1af048f352ce32eaddc7c83a9156 Mon Sep 17 00:00:00 2001 -From: Sreenivasulu Malavathula -Date: Mon, 16 Jun 2025 16:28:52 -0500 -Subject: [PATCH] Address CVE-2025-48938 -Upstream Patch Reference: https://github.com/cli/go-gh/commit/a08820a.diff - ---- - .../cli/go-gh/v2/pkg/browser/browser.go | 59 +++++++++++++++++++ - 1 file changed, 59 insertions(+) - -diff --git a/vendor/github.com/cli/go-gh/v2/pkg/browser/browser.go b/vendor/github.com/cli/go-gh/v2/pkg/browser/browser.go -index 4d56710..d17951a 100644 ---- a/vendor/github.com/cli/go-gh/v2/pkg/browser/browser.go -+++ b/vendor/github.com/cli/go-gh/v2/pkg/browser/browser.go -@@ -2,7 +2,9 @@ - package browser - - import ( -+ "fmt" - "io" -+ "net/url" - "os" - "os/exec" - -@@ -45,9 +47,20 @@ func (b *Browser) Browse(url string) error { - } - - func (b *Browser) browse(url string, env []string) error { -+ // Ensure the URL is supported including the scheme, -+ // overwrite `url` for use within the function. -+ urlParsed, err := isPossibleProtocol(url) -+ if err != nil { -+ return err -+ } -+ -+ url = urlParsed.String() -+ -+ // Use default `gh` browsing module for opening URL if not customized. - if b.launcher == "" { - return cliBrowser.OpenURL(url) - } -+ - launcherArgs, err := shlex.Split(b.launcher) - if err != nil { - return err -@@ -78,3 +91,49 @@ func resolveLauncher() string { - } - return os.Getenv("BROWSER") - } -+ -+func isSupportedScheme(scheme string) bool { -+ switch scheme { -+ case "http", "https", "vscode", "vscode-insiders": -+ return true -+ default: -+ return false -+ } -+} -+ -+func isPossibleProtocol(u string) (*url.URL, error) { -+ // Parse URL for known supported schemes before handling unknown cases. -+ urlParsed, err := url.Parse(u) -+ if err != nil { -+ return nil, fmt.Errorf("opening unparsable URL is unsupported: %s", u) -+ } -+ -+ if isSupportedScheme(urlParsed.Scheme) { -+ return urlParsed, nil -+ } -+ -+ // Disallow any unrecognized URL schemes if explicitly present. -+ if urlParsed.Scheme != "" { -+ return nil, fmt.Errorf("opening unsupport URL scheme: %s", u) -+ } -+ -+ // Disallow URLs that match existing files or directories on the filesystem -+ // as these could be executables or executed by the launcher browser due to -+ // the file extension and/or associated application. -+ // -+ // Symlinks should not be resolved in order to avoid broken links or other -+ // vulnerabilities trying to resolve them. -+ if fileInfo, _ := os.Lstat(u); fileInfo != nil { -+ return nil, fmt.Errorf("opening files or directories is unsupported: %s", u) -+ } -+ -+ // Disallow URLs that match executables found in the user path. -+ exec, _ := safeexec.LookPath(u) -+ if exec != "" { -+ return nil, fmt.Errorf("opening executables is unsupported: %s", u) -+ } -+ -+ // Otherwise, assume HTTP URL using `https` to ensure secure browsing. -+ urlParsed.Scheme = "https" -+ return urlParsed, nil -+} --- -2.45.2 - diff --git a/SPECS/gh/generate_source_tarball.sh b/SPECS/gh/generate_source_tarball.sh deleted file mode 100755 index cc04d4b518..0000000000 --- a/SPECS/gh/generate_source_tarball.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# -# This script downloads the source tarball and uses it to generate the -# vendor tarball for the gh package. It also updates the package's -# signatures.json file for both tarballs, although it doesn't account for -# version changes. -# -# Notes: -# - You require GNU tar version 1.28+. -# - The additional options passed to tar enable generation of a tarball -# with the same hash every time regardless of the environment. See: -# https://reproducible-builds.org/docs/archives/ -# - For the value of "--mtime" we use the date "2021-04-26 00:00Z" to -# simplify future updates. -set -eu - -# get_spec_value extracts the parsed value of a tag from a spec file. -# - spec: The path to the spec file. -# - tag: The tag whose value is extracted. -# The extracted value is returned via stdout. -get_spec_value() { - local spec="$1" - local tag="$2" - local tmp=$(mktemp) - rpmspec -P "$spec" > "$tmp" - grep -E "^${tag}:" "$tmp" | sed -E "s/^$tag:\s*//" - rm "$tmp" -} - -# set_signature_value adds or updates the value of a signature in the -# signatures.json file. -# - signatures_json: The path to the signatures.json file. -# - path: The path to the file whose signature is updated. -set_signature_value() { - local signatures_json="$1" - local path="$2" - local name=$(basename "$path") - local sum=$(sha256sum "$path" | cut -d' ' -f1) - signatures_tmp=$(mktemp) - jq --indent 1 ".Signatures.\"$name\" = \"$sum\"" "$signatures_json" > "$signatures_tmp" - mv "$signatures_tmp" "$signatures_json" -} - -exit_usage() { - echo "Usage: $0 [flags]" - echo "" - echo "Flags:" - echo " --srcTarball src tarball file. If not provided, it will be downloaded according to the spec file." - echo " --outFolder folder where to copy the new tarball(s). If not provided, the tarballs will be copied to the same folder as the script." - echo " --pkgVersion package version. If not provided, it will be extracted from the spec file." - echo " --setSignature set the signature of the tarball(s) in the signatures.json file." - exit 2 -} - -arg_out_folder="" -arg_src_tarball="" -arg_pkg_version="" -arg_set_signatures=0 -while [[ $# -gt 0 ]]; do - case $1 in - -h|--help) - exit_usage - ;; - --outFolder) - # Convert to absolute path - arg_out_folder=$(readlink -f "$2") - shift - ;; - --srcTarball) - arg_src_tarball="$2" - shift - ;; - --pkgVersion) - arg_pkg_version="$2" - shift - ;; - --setSignature) - arg_set_signatures=1 - ;; - -*) - echo "Error: Unknown option: $1" - exit_usage - ;; - *) - echo "Error: Unknown argument: $1" - exit_usage - ;; - esac - - shift -done - -script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) - -out_folder="$arg_out_folder" -if [[ -z "$out_folder" ]]; then - out_folder="$script_dir" -elif [[ ! -d "$out_folder" ]]; then - echo "Error: The output folder does not exist." - exit 1 -fi - -spec_file=$(ls "$script_dir"/*.spec) - -src_tarball="$arg_src_tarball" -if [[ -z "$src_tarball" ]]; then - src_url=$(get_spec_value "$spec_file" "Source0") - if [[ -z "$src_url" ]]; then - echo "Error: Unable to determine the source0 URL from the spec file." - exit 1 - fi - - src_tarball_name=$(echo "$src_url" | grep -oP '(?<=#/)[^/]+') - if [[ -z "$src_tarball_name" ]]; then - echo "Error: Unable to determine the source0 tarball name from the source URL." - exit 1 - fi - - src_tarball="$script_dir/$src_tarball_name" - if [[ ! -f "$src_tarball" ]]; then - wget -O "$src_tarball" "$src_url" - fi -elif [[ ! -f "$src_tarball" ]]; then - echo "Error: The source tarball file does not exist." - exit 1 -fi - -pkg_name=$(get_spec_value "$spec_file" "Name") -if [[ -z "$pkg_name" ]]; then - echo "Error: Unable to determine the package name from the spec file." - exit 1 -fi - -pkg_version="$arg_pkg_version" -if [[ -z "$pkg_version" ]]; then - pkg_version=$(get_spec_value "$spec_file" "Version") - if [[ -z "$pkg_version" ]]; then - echo "Error: Unable to determine the package version from the spec file." - exit 1 - fi -fi - -# Extract the source tarball and generate the vendor tarball. -source_dir=$(mktemp -d) -trap "rm -rf '$source_dir'" EXIT -tar -C "$source_dir" -xf "$src_tarball" -cd "$source_dir"/* -go mod vendor -vendor_tarball="$out_folder/$pkg_name-$pkg_version-vendor.tar.gz" -tar --sort=name \ - --mtime="2021-04-26 00:00Z" \ - --owner=0 \ - --group=0 \ - --numeric-owner \ - --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ - -c \ - -f "$vendor_tarball" \ - vendor - -if [[ $arg_set_signatures -eq 1 ]]; then - signatures_file=$(ls "$script_dir"/*.signatures.json) - set_signature_value "$signatures_file" "$src_tarball" - set_signature_value "$signatures_file" "$vendor_tarball" -fi - -echo "Vendor tarball generated: $vendor_tarball" diff --git a/SPECS/gh/gh.signatures.json b/SPECS/gh/gh.signatures.json deleted file mode 100644 index b5ec83df14..0000000000 --- a/SPECS/gh/gh.signatures.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Signatures": { - "gh-2.62.0.tar.gz": "8b0d44a7fccd0c768d5ef7c3fbd274851b5752084e47761f146852de6539193e", - "gh-2.62.0-vendor.tar.gz": "2b39f75a9a45aa5e7b8d95e6b5fd7a11a7504e6cd7c92e904027f129abe48599" - } -} diff --git a/SPECS/gh/gh.spec b/SPECS/gh/gh.spec deleted file mode 100644 index ec7367feb2..0000000000 --- a/SPECS/gh/gh.spec +++ /dev/null @@ -1,153 +0,0 @@ -Summary: GitHub official command line tool -Name: gh -Version: 2.62.0 -Release: 10%{?dist} -License: MIT -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Applications/Tools -URL: https://github.com/cli/cli -Source0: https://github.com/cli/cli/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz - -# Below is a manually created tarball, no download link. It is generated by running ./generate_source_tarball.sh. -# We're using pre-populated Go modules from this tarball, since network is disabled during build time. -Source1: %{name}-%{version}-vendor.tar.gz - -Patch0: 0001-Fix-false-negative-in-TestMigrationWriteErrors-when-.patch -Patch1: CVE-2024-54132.patch -Patch2: CVE-2024-45337.patch -Patch3: CVE-2024-45338.patch -Patch5: CVE-2024-53859.patch -Patch6: CVE-2025-25204.patch -Patch7: CVE-2025-27144.patch -Patch8: CVE-2025-22869.patch -Patch9: CVE-2025-22872.patch -Patch10: CVE-2025-48938.patch - -BuildRequires: golang < 1.23 -BuildRequires: git -Requires: git -%global debug_package %{nil} -%define our_gopath %{_topdir}/.gopath - -%description -GitHub official command line tool. - -%prep -%autosetup -p1 -n cli-%{version} -a1 - -%build -export GOPATH=%{our_gopath} -# No mod download use vednor cache locally -export GOFLAGS="-buildmode=pie -trimpath -mod=vendor -modcacherw -ldflags=-linkmode=external" -make GH_VERSION="v%{version}" bin/gh manpages - -%install -./bin/gh completion -s bash | install -Dm644 /dev/stdin %{buildroot}%{_datadir}/bash-completion/completions/gh -./bin/gh completion -s fish | install -Dm644 /dev/stdin %{buildroot}%{_datadir}/fish/vendor_completions.d/gh.fish -./bin/gh completion -s zsh | install -Dm644 /dev/stdin %{buildroot}%{_datadir}/zsh/site-functions/_gh - -install -Dm755 bin/gh %{buildroot}%{_bindir}/gh -install -d %{buildroot}%{_mandir}/man1/ -cp share/man/man1/* %{buildroot}%{_mandir}/man1 - -%check -make test - -%files -%defattr(-,root,root) -%license LICENSE -%doc README.md -%{_bindir}/gh -%{_mandir}/man1/* -%{_datadir}/bash-completion/completions/gh -%{_datadir}/fish/vendor_completions.d/gh.fish -%{_datadir}/zsh/site-functions/_gh - -%changelog -* Mon Sep 8 2025 Lee Chee Yang - 2.62.0-10 -- merge from Azure Linux 3.0.20250910-3.0. -- Patch CVE-2025-48938 - -* Fri May 30 2025 Ranjan Dutta - 2.62.0-9 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 - -* Fri Mar 21 2025 Anuj Mittal - 2.62.0-8 -- Bump Release to rebuild - -* Fri Feb 28 2025 Kanishk Bansal - 2.62.0-7 -- Fix CVE-2025-27144, CVE-2025-22869 with an upstream patch - -* Fri Feb 21 2025 Kshitiz Godara - 2.62.0-6 -- Patch CVE-2025-25204 - -* Wed Jan 21 2025 Sandeep Karambelkar - 2.62.0-5 -- Patch CVE-2024-53859, CVE-2024-53858 - -* Tue Dec 31 2024 Rohit Rawat - 2.62.0-4 -- Add patch for CVE-2024-45338 - -* Wed Jan 08 2025 Muhammad Falak - 2.62.0-3 -- Patch CVE-2024-45337 - -* Fri Dec 13 2024 Sandeep Karambelkar - 2.62.0-2 -- Patch CVE-2024-54132 - -* Mon Nov 18 2024 Vince Perri - 2.62.0-1 -- Update to v2.62.0 - -* Tue Oct 15 2024 Muhammad Falak - 2.43.1-2 -- Pin golang version to <= 1.22 - -* Mon Feb 26 2024 Neha Agarwal - 2.43.1-1 -- Update to v2.43.1 - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 2.13.0-16 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 2.13.0-15 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 2.13.0-14 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 2.13.0-13 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 2.13.0-12 -- Bump release to rebuild with go 1.19.10 - -* Wed Apr 26 2023 Olivia Crain - 2.13.0-11 -- Add upstream patch to fix search tests involving relative time - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 2.13.0-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 2.13.0-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 2.13.0-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 2.13.0-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 2.13.0-6 -- Clean up dependencies (remove fish, bash-completion and zsh and add git) - -* Fri Dec 16 2022 Daniel McIlvaney - 2.13.0-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 2.13.0-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 2.13.0-3 -- Bump release to rebuild against Go 1.18.5 - -* Mon Jul 04 2022 Daniel McIlvaney - 2.13.0-2 -- Bump release due to bump in fish to 3.5.0. - -* Thu Jun 30 2022 Suresh Babu Chalamalasetty - 2.13.0-1 -- Original version for CBL-Mariner. -- License verified. diff --git a/SPECS/glibc/0001-Remove-Wno-format-cflag-from-tests.patch b/SPECS/glibc/0001-Remove-Wno-format-cflag-from-tests.patch deleted file mode 100644 index fe35461507..0000000000 --- a/SPECS/glibc/0001-Remove-Wno-format-cflag-from-tests.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 8768893dbd2b055f71c719e5135d9b8720731d81 Mon Sep 17 00:00:00 2001 -From: Rachel Menge -Date: Fri, 7 Jun 2024 21:17:37 +0000 -Subject: [PATCH] Remove -Wno-format cflag from tests - -This flag prevents the error -"c1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]" -The error occurs when glibc is compiled with -Wformat-security which -requires -Wformat and thus conflicts with tests which use -Wno-format ---- - debug/Makefile | 4 ++-- - time/Makefile | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/debug/Makefile b/debug/Makefile -index 434e52f7..05363c26 100644 ---- a/debug/Makefile -+++ b/debug/Makefile -@@ -192,7 +192,7 @@ tests-cc-def-chk = - tests-c-time64-chk = - tests-cc-time64-chk = - --CFLAGS-tst-fortify.c += -Wno-format -Wno-deprecated-declarations -Wno-error -+CFLAGS-tst-fortify.c += -Wno-deprecated-declarations - - # No additional flags for the default tests. - define cflags-default -@@ -215,7 +215,7 @@ src-chk-nongnu = \#undef _GNU_SOURCE - # cannot be disabled via pragmas, so require -Wno-error to be used. - define gen-chk-test - tests-$(1)-$(4)-chk += tst-fortify-$(1)-$(2)-$(3)-$(4) --CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += $(no-fortify-source),-D_FORTIFY_SOURCE=$(3) -Wno-format \ -+CFLAGS-tst-fortify-$(1)-$(2)-$(3)-$(4).$(1) += $(no-fortify-source),-D_FORTIFY_SOURCE=$(3) \ - -Wno-deprecated-declarations \ - -Wno-error - $(eval $(call cflags-$(2),$(1),$(3),$(4))) -diff --git a/time/Makefile b/time/Makefile -index 1d2e667c..8b878bcc 100644 ---- a/time/Makefile -+++ b/time/Makefile -@@ -102,7 +102,7 @@ CFLAGS-nanosleep.c += -fexceptions -fasynchronous-unwind-tables - CFLAGS-mktime.c += $(config-cflags-wno-ignored-attributes) - - # Don't warn about Y2k problem in strftime format string. --CFLAGS-test_time.c += -Wno-format -+CFLAGS-test_time.c += -Wformat - - test_time-ARGS= EST5EDT CST - --- -2.34.1 - diff --git a/SPECS/glibc/CVE-2018-20796.nopatch b/SPECS/glibc/CVE-2018-20796.nopatch deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/SPECS/glibc/CVE-2019-6488.nopatch b/SPECS/glibc/CVE-2019-6488.nopatch deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/SPECS/glibc/CVE-2020-1751.nopatch b/SPECS/glibc/CVE-2020-1751.nopatch deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/SPECS/glibc/CVE-2020-6096.nopatch b/SPECS/glibc/CVE-2020-6096.nopatch deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/SPECS/glibc/CVE-2023-4527.patch b/SPECS/glibc/CVE-2023-4527.patch deleted file mode 100644 index de489ab9d4..0000000000 --- a/SPECS/glibc/CVE-2023-4527.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 6562a534ff741667d0725729ebc521bb0dac0e73 Mon Sep 17 00:00:00 2001 -From: Kanishk Bansal -Date: Thu, 22 May 2025 08:46:55 +0000 -Subject: [PATCH] CVE-2023-4527 - -Upstream Patch Reference : https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b25508dd774b617f99419bdc3cf2ace4560cd2d6 - -https://sourceware.org/cgit/glibc/tree/advisories/GLIBC-SA-2023-0002 - -Signed-off-by: Kanishk Bansal ---- - resolv/Makefile | 2 + - resolv/nss_dns/dns-host.c | 2 +- - resolv/tst-resolv-noaaaa-vc.c | 129 ++++++++++++++++++++++++++++++++++ - 3 files changed, 132 insertions(+), 1 deletion(-) - create mode 100644 resolv/tst-resolv-noaaaa-vc.c - -diff --git a/resolv/Makefile b/resolv/Makefile -index 054b1fa3..2f99eb38 100644 ---- a/resolv/Makefile -+++ b/resolv/Makefile -@@ -102,6 +102,7 @@ tests += \ - tst-resolv-invalid-cname \ - tst-resolv-network \ - tst-resolv-noaaaa \ -+ tst-resolv-noaaaa-vc \ - tst-resolv-nondecimal \ - tst-resolv-res_init-multi \ - tst-resolv-search \ -@@ -293,6 +294,7 @@ $(objpfx)tst-resolv-res_init-thread: $(objpfx)libresolv.so \ - $(objpfx)tst-resolv-invalid-cname: $(objpfx)libresolv.so \ - $(shared-thread-library) - $(objpfx)tst-resolv-noaaaa: $(objpfx)libresolv.so $(shared-thread-library) -+$(objpfx)tst-resolv-noaaaa-vc: $(objpfx)libresolv.so $(shared-thread-library) - $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library) - $(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library) - $(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library) -diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c -index 1d60c51f..5d0ab30d 100644 ---- a/resolv/nss_dns/dns-host.c -+++ b/resolv/nss_dns/dns-host.c -@@ -427,7 +427,7 @@ _nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat, - { - n = __res_context_search (ctx, name, C_IN, T_A, - dns_packet_buffer, sizeof (dns_packet_buffer), -- NULL, NULL, NULL, NULL, NULL); -+ &alt_dns_packet_buffer, NULL, NULL, NULL, NULL); - if (n >= 0) - status = gaih_getanswer_noaaaa (alt_dns_packet_buffer, n, - &abuf, pat, errnop, herrnop, ttlp); -diff --git a/resolv/tst-resolv-noaaaa-vc.c b/resolv/tst-resolv-noaaaa-vc.c -new file mode 100644 -index 00000000..9f5aebd9 ---- /dev/null -+++ b/resolv/tst-resolv-noaaaa-vc.c -@@ -0,0 +1,129 @@ -+/* Test the RES_NOAAAA resolver option with a large response. -+ Copyright (C) 2022-2023 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C 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. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* Used to keep track of the number of queries. */ -+static volatile unsigned int queries; -+ -+/* If true, add a large TXT record at the start of the answer section. */ -+static volatile bool stuff_txt; -+ -+static void -+response (const struct resolv_response_context *ctx, -+ struct resolv_response_builder *b, -+ const char *qname, uint16_t qclass, uint16_t qtype) -+{ -+ /* If not using TCP, just force its use. */ -+ if (!ctx->tcp) -+ { -+ struct resolv_response_flags flags = {.tc = true}; -+ resolv_response_init (b, flags); -+ resolv_response_add_question (b, qname, qclass, qtype); -+ return; -+ } -+ -+ /* The test needs to send four queries, the first three are used to -+ grow the NSS buffer via the ERANGE handshake. */ -+ ++queries; -+ TEST_VERIFY (queries <= 4); -+ -+ /* AAAA queries are supposed to be disabled. */ -+ TEST_COMPARE (qtype, T_A); -+ TEST_COMPARE (qclass, C_IN); -+ TEST_COMPARE_STRING (qname, "example.com"); -+ -+ struct resolv_response_flags flags = {}; -+ resolv_response_init (b, flags); -+ resolv_response_add_question (b, qname, qclass, qtype); -+ -+ resolv_response_section (b, ns_s_an); -+ -+ if (stuff_txt) -+ { -+ resolv_response_open_record (b, qname, qclass, T_TXT, 60); -+ int zero = 0; -+ for (int i = 0; i <= 15000; ++i) -+ resolv_response_add_data (b, &zero, sizeof (zero)); -+ resolv_response_close_record (b); -+ } -+ -+ for (int i = 0; i < 200; ++i) -+ { -+ resolv_response_open_record (b, qname, qclass, qtype, 60); -+ char ipv4[4] = {192, 0, 2, i + 1}; -+ resolv_response_add_data (b, &ipv4, sizeof (ipv4)); -+ resolv_response_close_record (b); -+ } -+} -+ -+static int -+do_test (void) -+{ -+ struct resolv_test *obj = resolv_test_start -+ ((struct resolv_redirect_config) -+ { -+ .response_callback = response -+ }); -+ -+ _res.options |= RES_NOAAAA; -+ -+ for (int do_stuff_txt = 0; do_stuff_txt < 2; ++do_stuff_txt) -+ { -+ queries = 0; -+ stuff_txt = do_stuff_txt; -+ -+ struct addrinfo *ai = NULL; -+ int ret; -+ ret = getaddrinfo ("example.com", "80", -+ &(struct addrinfo) -+ { -+ .ai_family = AF_UNSPEC, -+ .ai_socktype = SOCK_STREAM, -+ }, &ai); -+ -+ char *expected_result; -+ { -+ struct xmemstream mem; -+ xopen_memstream (&mem); -+ for (int i = 0; i < 200; ++i) -+ fprintf (mem.out, "address: STREAM/TCP 192.0.2.%d 80\n", i + 1); -+ xfclose_memstream (&mem); -+ expected_result = mem.buffer; -+ } -+ -+ check_addrinfo ("example.com", ai, ret, expected_result); -+ -+ free (expected_result); -+ freeaddrinfo (ai); -+ } -+ -+ resolv_test_end (obj); -+ return 0; -+} -+ -+#include --- -2.45.3 - diff --git a/SPECS/glibc/CVE-2023-4806.patch b/SPECS/glibc/CVE-2023-4806.patch deleted file mode 100644 index c8973010fe..0000000000 --- a/SPECS/glibc/CVE-2023-4806.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 00ae4f10b504bc4564e9f22f00907093f1ab9338 Mon Sep 17 00:00:00 2001 -From: Siddhesh Poyarekar -Date: Fri, 15 Sep 2023 13:51:12 -0400 -Subject: [PATCH] getaddrinfo: Fix use after free in getcanonname - (CVE-2023-4806) - -When an NSS plugin only implements the _gethostbyname2_r and -_getcanonname_r callbacks, getaddrinfo could use memory that was freed -during tmpbuf resizing, through h_name in a previous query response. - -The backing store for res->at->name when doing a query with -gethostbyname3_r or gethostbyname2_r is tmpbuf, which is reallocated in -gethosts during the query. For AF_INET6 lookup with AI_ALL | -AI_V4MAPPED, gethosts gets called twice, once for a v6 lookup and second -for a v4 lookup. In this case, if the first call reallocates tmpbuf -enough number of times, resulting in a malloc, th->h_name (that -res->at->name refers to) ends up on a heap allocated storage in tmpbuf. -Now if the second call to gethosts also causes the plugin callback to -return NSS_STATUS_TRYAGAIN, tmpbuf will get freed, resulting in a UAF -reference in res->at->name. This then gets dereferenced in the -getcanonname_r plugin call, resulting in the use after free. - -Fix this by copying h_name over and freeing it at the end. This -resolves BZ #30843, which is assigned CVE-2023-4806. - -Signed-off-by: Siddhesh Poyarekar -(cherry picked from commit 973fe93a5675c42798b2161c6f29c01b0e243994) - -Signed-off-by: Kanishk Bansal - ---- - nss/Makefile | 15 ++++- - nss/nss_test_gai_hv2_canonname.c | 56 +++++++++++++++++ - nss/tst-nss-gai-hv2-canonname.c | 63 +++++++++++++++++++ - nss/tst-nss-gai-hv2-canonname.h | 1 + - .../postclean.req | 0 - .../tst-nss-gai-hv2-canonname.script | 2 + - sysdeps/posix/getaddrinfo.c | 25 +++++--- - 7 files changed, 152 insertions(+), 10 deletions(-) - create mode 100644 nss/nss_test_gai_hv2_canonname.c - create mode 100644 nss/tst-nss-gai-hv2-canonname.c - create mode 100644 nss/tst-nss-gai-hv2-canonname.h - create mode 100644 nss/tst-nss-gai-hv2-canonname.root/postclean.req - create mode 100644 nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script - -diff --git a/nss/Makefile b/nss/Makefile -index 06fcdc450f1..8a5126ecf34 100644 ---- a/nss/Makefile -+++ b/nss/Makefile -@@ -82,6 +82,7 @@ tests-container := \ - tst-nss-test3 \ - tst-reload1 \ - tst-reload2 \ -+ tst-nss-gai-hv2-canonname \ - # tests-container - - # Tests which need libdl -@@ -145,7 +146,8 @@ libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes)) - ifeq ($(build-static-nss),yes) - tests-static += tst-nss-static - endif --extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os -+extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os \ -+ nss_test_gai_hv2_canonname.os - - include ../Rules - -@@ -180,12 +182,16 @@ rtld-tests-LDFLAGS += -Wl,--dynamic-list=nss_test.ver - libof-nss_test1 = extramodules - libof-nss_test2 = extramodules - libof-nss_test_errno = extramodules -+libof-nss_test_gai_hv2_canonname = extramodules - $(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps) - $(build-module) - $(objpfx)/libnss_test2.so: $(objpfx)nss_test2.os $(link-libc-deps) - $(build-module) - $(objpfx)/libnss_test_errno.so: $(objpfx)nss_test_errno.os $(link-libc-deps) - $(build-module) -+$(objpfx)/libnss_test_gai_hv2_canonname.so: \ -+ $(objpfx)nss_test_gai_hv2_canonname.os $(link-libc-deps) -+ $(build-module) - $(objpfx)nss_test2.os : nss_test1.c - # Use the nss_files suffix for these objects as well. - $(objpfx)/libnss_test1.so$(libnss_files.so-version): $(objpfx)/libnss_test1.so -@@ -195,10 +201,14 @@ $(objpfx)/libnss_test2.so$(libnss_files.so-version): $(objpfx)/libnss_test2.so - $(objpfx)/libnss_test_errno.so$(libnss_files.so-version): \ - $(objpfx)/libnss_test_errno.so - $(make-link) -+$(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version): \ -+ $(objpfx)/libnss_test_gai_hv2_canonname.so -+ $(make-link) - $(patsubst %,$(objpfx)%.out,$(tests) $(tests-container)) : \ - $(objpfx)/libnss_test1.so$(libnss_files.so-version) \ - $(objpfx)/libnss_test2.so$(libnss_files.so-version) \ -- $(objpfx)/libnss_test_errno.so$(libnss_files.so-version) -+ $(objpfx)/libnss_test_errno.so$(libnss_files.so-version) \ -+ $(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version) - - ifeq (yes,$(have-thread-library)) - $(objpfx)tst-cancel-getpwuid_r: $(shared-thread-library) -@@ -215,3 +225,4 @@ LDFLAGS-tst-nss-test3 = -Wl,--disable-new-dtags - LDFLAGS-tst-nss-test4 = -Wl,--disable-new-dtags - LDFLAGS-tst-nss-test5 = -Wl,--disable-new-dtags - LDFLAGS-tst-nss-test_errno = -Wl,--disable-new-dtags -+LDFLAGS-tst-nss-test_gai_hv2_canonname = -Wl,--disable-new-dtags -diff --git a/nss/nss_test_gai_hv2_canonname.c b/nss/nss_test_gai_hv2_canonname.c -new file mode 100644 -index 00000000000..4439c83c9f4 ---- /dev/null -+++ b/nss/nss_test_gai_hv2_canonname.c -@@ -0,0 +1,56 @@ -+/* NSS service provider that only provides gethostbyname2_r. -+ Copyright The GNU Toolchain Authors. -+ This file is part of the GNU C Library. -+ -+ The GNU C 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. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include "nss/tst-nss-gai-hv2-canonname.h" -+ -+/* Catch misnamed and functions. */ -+#pragma GCC diagnostic error "-Wmissing-prototypes" -+NSS_DECLARE_MODULE_FUNCTIONS (test_gai_hv2_canonname) -+ -+extern enum nss_status _nss_files_gethostbyname2_r (const char *, int, -+ struct hostent *, char *, -+ size_t, int *, int *); -+ -+enum nss_status -+_nss_test_gai_hv2_canonname_gethostbyname2_r (const char *name, int af, -+ struct hostent *result, -+ char *buffer, size_t buflen, -+ int *errnop, int *herrnop) -+{ -+ return _nss_files_gethostbyname2_r (name, af, result, buffer, buflen, errnop, -+ herrnop); -+} -+ -+enum nss_status -+_nss_test_gai_hv2_canonname_getcanonname_r (const char *name, char *buffer, -+ size_t buflen, char **result, -+ int *errnop, int *h_errnop) -+{ -+ /* We expect QUERYNAME, which is a small enough string that it shouldn't fail -+ the test. */ -+ if (memcmp (QUERYNAME, name, sizeof (QUERYNAME)) -+ || buflen < sizeof (QUERYNAME)) -+ abort (); -+ -+ strncpy (buffer, name, buflen); -+ *result = buffer; -+ return NSS_STATUS_SUCCESS; -+} -diff --git a/nss/tst-nss-gai-hv2-canonname.c b/nss/tst-nss-gai-hv2-canonname.c -new file mode 100644 -index 00000000000..d5f10c07d6a ---- /dev/null -+++ b/nss/tst-nss-gai-hv2-canonname.c -@@ -0,0 +1,63 @@ -+/* Test NSS query path for plugins that only implement gethostbyname2 -+ (#30843). -+ Copyright The GNU Toolchain Authors. -+ This file is part of the GNU C Library. -+ -+ The GNU C 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. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "nss/tst-nss-gai-hv2-canonname.h" -+ -+#define PREPARE do_prepare -+ -+static void do_prepare (int a, char **av) -+{ -+ FILE *hosts = xfopen ("/etc/hosts", "w"); -+ for (unsigned i = 2; i < 255; i++) -+ { -+ fprintf (hosts, "ff01::ff02:ff03:%u:2\ttest.example.com\n", i); -+ fprintf (hosts, "192.168.0.%u\ttest.example.com\n", i); -+ } -+ xfclose (hosts); -+} -+ -+static int -+do_test (void) -+{ -+ __nss_configure_lookup ("hosts", "test_gai_hv2_canonname"); -+ -+ struct addrinfo hints = {}; -+ struct addrinfo *result = NULL; -+ -+ hints.ai_family = AF_INET6; -+ hints.ai_flags = AI_ALL | AI_V4MAPPED | AI_CANONNAME; -+ -+ int ret = getaddrinfo (QUERYNAME, NULL, &hints, &result); -+ -+ if (ret != 0) -+ FAIL_EXIT1 ("getaddrinfo failed: %s\n", gai_strerror (ret)); -+ -+ TEST_COMPARE_STRING (result->ai_canonname, QUERYNAME); -+ -+ freeaddrinfo(result); -+ return 0; -+} -+ -+#include -diff --git a/nss/tst-nss-gai-hv2-canonname.h b/nss/tst-nss-gai-hv2-canonname.h -new file mode 100644 -index 00000000000..14f2a9cb086 ---- /dev/null -+++ b/nss/tst-nss-gai-hv2-canonname.h -@@ -0,0 +1 @@ -+#define QUERYNAME "test.example.com" -diff --git a/nss/tst-nss-gai-hv2-canonname.root/postclean.req b/nss/tst-nss-gai-hv2-canonname.root/postclean.req -new file mode 100644 -index 00000000000..e69de29bb2d -diff --git a/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script b/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script -new file mode 100644 -index 00000000000..31848b4a285 ---- /dev/null -+++ b/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script -@@ -0,0 +1,2 @@ -+cp $B/nss/libnss_test_gai_hv2_canonname.so $L/libnss_test_gai_hv2_canonname.so.2 -+su -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index 0356b622be6..b2236b105c1 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -120,6 +120,7 @@ struct gaih_result - { - struct gaih_addrtuple *at; - char *canon; -+ char *h_name; - bool free_at; - bool got_ipv6; - }; -@@ -165,6 +166,7 @@ gaih_result_reset (struct gaih_result *res) - if (res->free_at) - free (res->at); - free (res->canon); -+ free (res->h_name); - memset (res, 0, sizeof (*res)); - } - -@@ -203,9 +205,8 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp, - return 0; - } - --/* Convert struct hostent to a list of struct gaih_addrtuple objects. h_name -- is not copied, and the struct hostent object must not be deallocated -- prematurely. The new addresses are appended to the tuple array in RES. */ -+/* Convert struct hostent to a list of struct gaih_addrtuple objects. The new -+ addresses are appended to the tuple array in RES. */ - static bool - convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, int family, - struct hostent *h, struct gaih_result *res) -@@ -238,6 +239,15 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, int family, - res->at = array; - res->free_at = true; - -+ /* Duplicate h_name because it may get reclaimed when the underlying storage -+ is freed. */ -+ if (res->h_name == NULL) -+ { -+ res->h_name = __strdup (h->h_name); -+ if (res->h_name == NULL) -+ return false; -+ } -+ - /* Update the next pointers on reallocation. */ - for (size_t i = 0; i < old; i++) - array[i].next = array + i + 1; -@@ -262,7 +272,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, int family, - } - array[i].next = array + i + 1; - } -- array[0].name = h->h_name; - array[count - 1].next = NULL; - - return true; -@@ -324,15 +333,15 @@ gethosts (nss_gethostbyname3_r fct, int family, const char *name, - memory allocation failure. The returned string is allocated on the - heap; the caller has to free it. */ - static char * --getcanonname (nss_action_list nip, struct gaih_addrtuple *at, const char *name) -+getcanonname (nss_action_list nip, const char *hname, const char *name) - { - nss_getcanonname_r *cfct = __nss_lookup_function (nip, "getcanonname_r"); - char *s = (char *) name; - if (cfct != NULL) - { - char buf[256]; -- if (DL_CALL_FCT (cfct, (at->name ?: name, buf, sizeof (buf), -- &s, &errno, &h_errno)) != NSS_STATUS_SUCCESS) -+ if (DL_CALL_FCT (cfct, (hname ?: name, buf, sizeof (buf), &s, &errno, -+ &h_errno)) != NSS_STATUS_SUCCESS) - /* If the canonical name cannot be determined, use the passed - string. */ - s = (char *) name; -@@ -771,7 +780,7 @@ get_nss_addresses (const char *name, const struct addrinfo *req, - if ((req->ai_flags & AI_CANONNAME) != 0 - && res->canon == NULL) - { -- char *canonbuf = getcanonname (nip, res->at, name); -+ char *canonbuf = getcanonname (nip, res->h_name, name); - if (canonbuf == NULL) - { - __resolv_context_put (res_ctx); diff --git a/SPECS/glibc/CVE-2023-4911.patch b/SPECS/glibc/CVE-2023-4911.patch deleted file mode 100644 index 98da4526b6..0000000000 --- a/SPECS/glibc/CVE-2023-4911.patch +++ /dev/null @@ -1,126 +0,0 @@ -backport of https://sourceware.org/git/?p=glibc.git;a=patch;h=1056e5b4c3f2d90ed2b4a55f96add28da2f4c8fa - -diff -ru glibc-2.38-orig/elf/dl-tunables.c glibc-2.38/elf/dl-tunables.c ---- glibc-2.38-orig/elf/dl-tunables.c 2024-06-17 21:53:23.756408666 +0000 -+++ glibc-2.38/elf/dl-tunables.c 2024-06-17 23:01:00.207961672 +0000 -@@ -180,11 +180,7 @@ - /* If we reach the end of the string before getting a valid name-value - pair, bail out. */ - if (p[len] == '\0') -- { -- if (__libc_enable_secure) -- tunestr[off] = '\0'; -- return; -- } -+ break; - - /* We did not find a valid name-value pair before encountering the - colon. */ -@@ -244,9 +240,16 @@ - } - } - -- if (p[len] != '\0') -- p += len + 1; -+ /* We reached the end while processing the tunable string. */ -+ if (p[len] == '\0') -+ break; -+ -+ p += len + 1; - } -+ -+ /* Terminate tunestr before we leave. */ -+ if (__libc_enable_secure) -+ tunestr[off] = '\0'; - } - - /* Enable the glibc.malloc.check tunable in SETUID/SETGID programs only when -diff -ru glibc-2.38-orig/elf/tst-env-setuid-tunables.c glibc-2.38/elf/tst-env-setuid-tunables.c ---- glibc-2.38-orig/elf/tst-env-setuid-tunables.c 2024-06-17 21:53:23.808408845 +0000 -+++ glibc-2.38/elf/tst-env-setuid-tunables.c 2024-06-17 23:26:01.648142768 +0000 -@@ -50,6 +50,8 @@ - "glibc.malloc.perturb=0x800:not_valid.malloc.check=2:glibc.malloc.mmap_threshold=4096", - "glibc.not_valid.check=2:glibc.malloc.mmap_threshold=4096", - "not_valid.malloc.check=2:glibc.malloc.mmap_threshold=4096", -+ "glibc.malloc.mmap_threshold=glibc.malloc.mmap_threshold=4096", -+ "glibc.malloc.check=2", - "glibc.malloc.garbage=2:glibc.maoc.mmap_threshold=4096:glibc.malloc.check=2", - "glibc.malloc.check=4:glibc.malloc.garbage=2:glibc.maoc.mmap_threshold=4096", - ":glibc.malloc.garbage=2:glibc.malloc.check=1", -@@ -68,6 +70,8 @@ - "glibc.malloc.perturb=0x800:glibc.malloc.mmap_threshold=4096", - "glibc.malloc.mmap_threshold=4096", - "glibc.malloc.mmap_threshold=4096", -+ "glibc.malloc.mmap_threshold=glibc.malloc.mmap_threshold=4096", -+ "", - "", - "", - "", -@@ -81,11 +85,18 @@ - { - const char *val = getenv ("GLIBC_TUNABLES"); - -+ printf (" [%d] GLIBC_TUNABLES is %s\n", off, val); -+ fflush (stdout); - if (val != NULL && strcmp (val, resultstrings[off]) == 0) - return 0; - - if (val != NULL) -- printf ("[%d] Unexpected GLIBC_TUNABLES VALUE %s\n", off, val); -+ printf (" [%d] Unexpected GLIBC_TUNABLES VALUE %s, expected %s\n", -+ off, val, resultstrings[off]); -+ else -+ printf (" [%d] GLIBC_TUNABLES environment variable absent\n", off); -+ -+ fflush (stdout); - - return 1; - } -@@ -106,7 +117,9 @@ - if (ret != 0) - exit (1); - -- exit (EXIT_SUCCESS); -+ /* Special return code to make sure that the child executed all the way -+ through. */ -+ exit (42); - } - else - { -@@ -117,10 +130,15 @@ - { - char buf[INT_BUFSIZE_BOUND (int)]; - -- printf ("Spawned test for %s (%d)\n", teststrings[i], i); -- snprintf (buf, sizeof (buf), "%d\n", i); -- if (setenv ("GLIBC_TUNABLES", teststrings[i], 1) != 0) -- exit (1); -+ printf ("[%d] Spawned test for %s\n", i, teststrings[i]); -+ snprintf (buf, sizeof (buf), "%d\n", i); -+ fflush (stdout); -+ if (setenv ("GLIBC_TUNABLES", teststrings[i], 1) != 0) -+ { -+ printf (" [%d] Failed to set GLIBC_TUNABLES: %m", i); -+ support_record_failure (); -+ continue; -+ } - - int status = support_capture_subprogram_self_sgid (buf); - -@@ -128,9 +146,14 @@ - if (WEXITSTATUS (status) == EXIT_UNSUPPORTED) - return EXIT_UNSUPPORTED; - -- ret |= status; -+ if (WEXITSTATUS (status) != 42) -+ { -+ printf (" [%d] child failed with status %d\n", i, -+ WEXITSTATUS (status)); -+ support_record_failure (); -+ } - } -- return ret; -+ return 0; - } - } - diff --git a/SPECS/glibc/CVE-2023-5156.patch b/SPECS/glibc/CVE-2023-5156.patch deleted file mode 100644 index 562e11bb29..0000000000 --- a/SPECS/glibc/CVE-2023-5156.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 5ee59ca371b99984232d7584fe2b1a758b4421d3 Mon Sep 17 00:00:00 2001 -From: Romain Geissler -Date: Mon, 25 Sep 2023 01:21:51 +0100 -Subject: [PATCH] Fix leak in getaddrinfo introduced by the fix for - CVE-2023-4806 [BZ #30843] - -This patch fixes a very recently added leak in getaddrinfo. - -This was assigned CVE-2023-5156. - -Resolves: BZ #30884 -Related: BZ #30842 - -Reviewed-by: Siddhesh Poyarekar -(cherry picked from commit ec6b95c3303c700eb89eebeda2d7264cc184a796) - -Signed-off-by: Kanishk Bansal - ---- - nss/Makefile | 20 ++++++++++++++++++++ - nss/tst-nss-gai-hv2-canonname.c | 3 +++ - sysdeps/posix/getaddrinfo.c | 4 +--- - 3 files changed, 24 insertions(+), 3 deletions(-) - -diff --git a/nss/Makefile b/nss/Makefile -index 8a5126ecf34..668ba34b187 100644 ---- a/nss/Makefile -+++ b/nss/Makefile -@@ -149,6 +149,15 @@ endif - extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os \ - nss_test_gai_hv2_canonname.os - -+ifeq ($(run-built-tests),yes) -+ifneq (no,$(PERL)) -+tests-special += $(objpfx)mtrace-tst-nss-gai-hv2-canonname.out -+endif -+endif -+ -+generated += mtrace-tst-nss-gai-hv2-canonname.out \ -+ tst-nss-gai-hv2-canonname.mtrace -+ - include ../Rules - - ifeq (yes,$(have-selinux)) -@@ -217,6 +226,17 @@ endif - $(objpfx)tst-nss-files-alias-leak.out: $(objpfx)/libnss_files.so - $(objpfx)tst-nss-files-alias-truncated.out: $(objpfx)/libnss_files.so - -+tst-nss-gai-hv2-canonname-ENV = \ -+ MALLOC_TRACE=$(objpfx)tst-nss-gai-hv2-canonname.mtrace \ -+ LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so -+$(objpfx)mtrace-tst-nss-gai-hv2-canonname.out: \ -+ $(objpfx)tst-nss-gai-hv2-canonname.out -+ { test -r $(objpfx)tst-nss-gai-hv2-canonname.mtrace \ -+ || ( echo "tst-nss-gai-hv2-canonname.mtrace does not exist"; exit 77; ) \ -+ && $(common-objpfx)malloc/mtrace \ -+ $(objpfx)tst-nss-gai-hv2-canonname.mtrace; } > $@; \ -+ $(evaluate-test) -+ - # Disable DT_RUNPATH on NSS tests so that the glibc internal NSS - # functions can load testing NSS modules via DT_RPATH. - LDFLAGS-tst-nss-test1 = -Wl,--disable-new-dtags -diff --git a/nss/tst-nss-gai-hv2-canonname.c b/nss/tst-nss-gai-hv2-canonname.c -index d5f10c07d6a..7db53cf09da 100644 ---- a/nss/tst-nss-gai-hv2-canonname.c -+++ b/nss/tst-nss-gai-hv2-canonname.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - #include - #include - #include "nss/tst-nss-gai-hv2-canonname.h" -@@ -41,6 +42,8 @@ static void do_prepare (int a, char **av) - static int - do_test (void) - { -+ mtrace (); -+ - __nss_configure_lookup ("hosts", "test_gai_hv2_canonname"); - - struct addrinfo hints = {}; -diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c -index b2236b105c1..13082305d3f 100644 ---- a/sysdeps/posix/getaddrinfo.c -+++ b/sysdeps/posix/getaddrinfo.c -@@ -1196,9 +1196,7 @@ gaih_inet (const char *name, const struct gaih_service *service, - if (malloc_name) - free ((char *) name); - free (addrmem); -- if (res.free_at) -- free (res.at); -- free (res.canon); -+ gaih_result_reset (&res); - - return result; - } diff --git a/SPECS/glibc/CVE-2023-6246.patch b/SPECS/glibc/CVE-2023-6246.patch deleted file mode 100644 index 45c76b29a1..0000000000 --- a/SPECS/glibc/CVE-2023-6246.patch +++ /dev/null @@ -1,181 +0,0 @@ -From 23514c72b780f3da097ecf33a793b7ba9c2070d2 Mon Sep 17 00:00:00 2001 -From: Arjun Shankar -Date: Mon, 15 Jan 2024 17:44:43 +0100 -Subject: [PATCH] syslog: Fix heap buffer overflow in __vsyslog_internal - (CVE-2023-6246) - -__vsyslog_internal did not handle a case where printing a SYSLOG_HEADER -containing a long program name failed to update the required buffer -size, leading to the allocation and overflow of a too-small buffer on -the heap. This commit fixes that. It also adds a new regression test -that uses glibc.malloc.check. - -Reviewed-by: Adhemerval Zanella -Reviewed-by: Carlos O'Donell -Tested-by: Carlos O'Donell -(cherry picked from commit 6bd0e4efcc78f3c0115e5ea9739a1642807450da) ---- - misc/Makefile | 8 ++- - misc/syslog.c | 50 +++++++++++++------ - misc/tst-syslog-long-progname.c | 39 +++++++++++++++ - .../postclean.req | 0 - 4 files changed, 82 insertions(+), 15 deletions(-) - create mode 100644 misc/tst-syslog-long-progname.c - create mode 100644 misc/tst-syslog-long-progname.root/postclean.req - -diff --git a/misc/Makefile b/misc/Makefile -index fe0d49c1de..90b31952c5 100644 ---- a/misc/Makefile -+++ b/misc/Makefile -@@ -289,7 +289,10 @@ tests-special += $(objpfx)tst-error1-mem.out \ - $(objpfx)tst-allocate_once-mem.out - endif - --tests-container := tst-syslog -+tests-container := \ -+ tst-syslog \ -+ tst-syslog-long-progname \ -+ # tests-container - - CFLAGS-select.c += -fexceptions -fasynchronous-unwind-tables - CFLAGS-tsearch.c += $(uses-callbacks) -@@ -351,6 +354,9 @@ $(objpfx)tst-allocate_once-mem.out: $(objpfx)tst-allocate_once.out - $(common-objpfx)malloc/mtrace $(objpfx)tst-allocate_once.mtrace > $@; \ - $(evaluate-test) - -+tst-syslog-long-progname-ENV = GLIBC_TUNABLES=glibc.malloc.check=3 \ -+ LD_PRELOAD=libc_malloc_debug.so.0 -+ - $(objpfx)tst-select: $(librt) - $(objpfx)tst-select-time64: $(librt) - $(objpfx)tst-pselect: $(librt) -diff --git a/misc/syslog.c b/misc/syslog.c -index 1b8cb722c5..814d224a1e 100644 ---- a/misc/syslog.c -+++ b/misc/syslog.c -@@ -124,8 +124,9 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - { - /* Try to use a static buffer as an optimization. */ - char bufs[1024]; -- char *buf = NULL; -- size_t bufsize = 0; -+ char *buf = bufs; -+ size_t bufsize; -+ - int msgoff; - int saved_errno = errno; - -@@ -177,29 +178,50 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - #define SYSLOG_HEADER_WITHOUT_TS(__pri, __msgoff) \ - "<%d>: %n", __pri, __msgoff - -- int l; -+ int l, vl; - if (has_ts) - l = __snprintf (bufs, sizeof bufs, - SYSLOG_HEADER (pri, timestamp, &msgoff, pid)); - else - l = __snprintf (bufs, sizeof bufs, - SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff)); -+ -+ char *pos; -+ size_t len; -+ - if (0 <= l && l < sizeof bufs) - { -- va_list apc; -- va_copy (apc, ap); -+ /* At this point, there is still a chance that we can print the -+ remaining part of the log into bufs and use that. */ -+ pos = bufs + l; -+ len = sizeof (bufs) - l; -+ } -+ else -+ { -+ buf = NULL; -+ /* We already know that bufs is too small to use for this log message. -+ The next vsnprintf into bufs is used only to calculate the total -+ required buffer length. We will discard bufs contents and allocate -+ an appropriately sized buffer later instead. */ -+ pos = bufs; -+ len = sizeof (bufs); -+ } - -- /* Restore errno for %m format. */ -- __set_errno (saved_errno); -+ { -+ va_list apc; -+ va_copy (apc, ap); - -- int vl = __vsnprintf_internal (bufs + l, sizeof bufs - l, fmt, apc, -- mode_flags); -- if (0 <= vl && vl < sizeof bufs - l) -- buf = bufs; -- bufsize = l + vl; -+ /* Restore errno for %m format. */ -+ __set_errno (saved_errno); - -- va_end (apc); -- } -+ vl = __vsnprintf_internal (pos, len, fmt, apc, mode_flags); -+ -+ if (!(0 <= vl && vl < len)) -+ buf = NULL; -+ -+ bufsize = l + vl; -+ va_end (apc); -+ } - - if (buf == NULL) - { -diff --git a/misc/tst-syslog-long-progname.c b/misc/tst-syslog-long-progname.c -new file mode 100644 -index 0000000000..88f37a8a00 ---- /dev/null -+++ b/misc/tst-syslog-long-progname.c -@@ -0,0 +1,39 @@ -+/* Test heap buffer overflow in syslog with long __progname (CVE-2023-6246) -+ Copyright (C) 2023 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C 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. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+extern char * __progname; -+ -+static int -+do_test (void) -+{ -+ char long_progname[2048]; -+ -+ memset (long_progname, 'X', sizeof (long_progname) - 1); -+ long_progname[sizeof (long_progname) - 1] = '\0'; -+ -+ __progname = long_progname; -+ -+ syslog (LOG_INFO, "Hello, World!"); -+ -+ return 0; -+} -+ -+#include -diff --git a/misc/tst-syslog-long-progname.root/postclean.req b/misc/tst-syslog-long-progname.root/postclean.req -new file mode 100644 -index 0000000000..e69de29bb2 --- -2.43.5 - diff --git a/SPECS/glibc/CVE-2023-6779.patch b/SPECS/glibc/CVE-2023-6779.patch deleted file mode 100644 index 3690e606f2..0000000000 --- a/SPECS/glibc/CVE-2023-6779.patch +++ /dev/null @@ -1,106 +0,0 @@ -From d0338312aace5bbfef85e03055e1212dd0e49578 Mon Sep 17 00:00:00 2001 -From: Arjun Shankar -Date: Mon, 15 Jan 2024 17:44:44 +0100 -Subject: [PATCH] syslog: Fix heap buffer overflow in __vsyslog_internal - (CVE-2023-6779) - -__vsyslog_internal used the return value of snprintf/vsnprintf to -calculate buffer sizes for memory allocation. If these functions (for -any reason) failed and returned -1, the resulting buffer would be too -small to hold output. This commit fixes that. - -All snprintf/vsnprintf calls are checked for negative return values and -the function silently returns upon encountering them. - -Reviewed-by: Carlos O'Donell -(cherry picked from commit 7e5a0c286da33159d47d0122007aac016f3e02cd) ---- - misc/syslog.c | 39 ++++++++++++++++++++++++++++----------- - 1 file changed, 28 insertions(+), 11 deletions(-) - -diff --git a/misc/syslog.c b/misc/syslog.c -index 814d224a1e..53440e47ad 100644 ---- a/misc/syslog.c -+++ b/misc/syslog.c -@@ -185,11 +185,13 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - else - l = __snprintf (bufs, sizeof bufs, - SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff)); -+ if (l < 0) -+ goto out; - - char *pos; - size_t len; - -- if (0 <= l && l < sizeof bufs) -+ if (l < sizeof bufs) - { - /* At this point, there is still a chance that we can print the - remaining part of the log into bufs and use that. */ -@@ -215,12 +217,15 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - __set_errno (saved_errno); - - vl = __vsnprintf_internal (pos, len, fmt, apc, mode_flags); -+ va_end (apc); -+ -+ if (vl < 0) -+ goto out; - -- if (!(0 <= vl && vl < len)) -+ if (vl >= len) - buf = NULL; - - bufsize = l + vl; -- va_end (apc); - } - - if (buf == NULL) -@@ -231,25 +236,37 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - /* Tell the cancellation handler to free this buffer. */ - clarg.buf = buf; - -+ int cl; - if (has_ts) -- __snprintf (buf, l + 1, -- SYSLOG_HEADER (pri, timestamp, &msgoff, pid)); -+ cl = __snprintf (buf, l + 1, -+ SYSLOG_HEADER (pri, timestamp, &msgoff, pid)); - else -- __snprintf (buf, l + 1, -- SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff)); -+ cl = __snprintf (buf, l + 1, -+ SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff)); -+ if (cl != l) -+ goto out; - - va_list apc; - va_copy (apc, ap); -- __vsnprintf_internal (buf + l, bufsize - l + 1, fmt, apc, -- mode_flags); -+ cl = __vsnprintf_internal (buf + l, bufsize - l + 1, fmt, apc, -+ mode_flags); - va_end (apc); -+ -+ if (cl != vl) -+ goto out; - } - else - { -+ int bl; - /* Nothing much to do but emit an error message. */ -- bufsize = __snprintf (bufs, sizeof bufs, -- "out of memory[%d]", __getpid ()); -+ bl = __snprintf (bufs, sizeof bufs, -+ "out of memory[%d]", __getpid ()); -+ if (bl < 0 || bl >= sizeof bufs) -+ goto out; -+ -+ bufsize = bl; - buf = bufs; -+ msgoff = 0; - } - } - --- -2.43.5 - diff --git a/SPECS/glibc/CVE-2023-6780.patch b/SPECS/glibc/CVE-2023-6780.patch deleted file mode 100644 index 209368253a..0000000000 --- a/SPECS/glibc/CVE-2023-6780.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d37c2b20a4787463d192b32041c3406c2bd91de0 Mon Sep 17 00:00:00 2001 -From: Arjun Shankar -Date: Mon, 15 Jan 2024 17:44:45 +0100 -Subject: [PATCH] syslog: Fix integer overflow in __vsyslog_internal - (CVE-2023-6780) - -__vsyslog_internal calculated a buffer size by adding two integers, but -did not first check if the addition would overflow. This commit fixes -that. - -Reviewed-by: Carlos O'Donell -Tested-by: Carlos O'Donell -(cherry picked from commit ddf542da94caf97ff43cc2875c88749880b7259b) ---- - misc/syslog.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/misc/syslog.c b/misc/syslog.c -index 53440e47ad..4af87f54fd 100644 ---- a/misc/syslog.c -+++ b/misc/syslog.c -@@ -41,6 +41,7 @@ static char sccsid[] = "@(#)syslog.c 8.4 (Berkeley) 3/18/94"; - #include - #include - #include -+#include - - static int LogType = SOCK_DGRAM; /* type of socket connection */ - static int LogFile = -1; /* fd for log */ -@@ -219,7 +220,7 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - vl = __vsnprintf_internal (pos, len, fmt, apc, mode_flags); - va_end (apc); - -- if (vl < 0) -+ if (vl < 0 || vl >= INT_MAX - l) - goto out; - - if (vl >= len) --- -2.43.5 - diff --git a/SPECS/glibc/CVE-2024-33599.patch b/SPECS/glibc/CVE-2024-33599.patch deleted file mode 100644 index 2d5610b282..0000000000 --- a/SPECS/glibc/CVE-2024-33599.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 5968aebb86164034b8f8421b4abab2f837a5bdaf Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Thu, 25 Apr 2024 15:00:45 +0200 -Subject: [PATCH] CVE-2024-33599: nscd: Stack-based buffer overflow in netgroup - cache (bug 31677) - -Using alloca matches what other caches do. The request length is -bounded by MAXKEYLEN. - -Reviewed-by: Carlos O'Donell -(cherry picked from commit 87801a8fd06db1d654eea3e4f7626ff476a9bdaa) - -Signed-off-by: Kanishk Bansal - ---- - nscd/netgroupcache.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 06b7d7b6ca8..31b721bbee2 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -502,12 +502,13 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - = (struct indataset *) mempool_alloc (db, - sizeof (*dataset) + req->key_len, - 1); -- struct indataset dataset_mem; - bool cacheable = true; - if (__glibc_unlikely (dataset == NULL)) - { - cacheable = false; -- dataset = &dataset_mem; -+ /* The alloca is safe because nscd_run_worker verfies that -+ key_len is not larger than MAXKEYLEN. */ -+ dataset = alloca (sizeof (*dataset) + req->key_len); - } - - datahead_init_pos (&dataset->head, sizeof (*dataset) + req->key_len, diff --git a/SPECS/glibc/CVE-2024-33600.patch b/SPECS/glibc/CVE-2024-33600.patch deleted file mode 100644 index cf1c0687f0..0000000000 --- a/SPECS/glibc/CVE-2024-33600.patch +++ /dev/null @@ -1,86 +0,0 @@ -From e4cb5367b33c57ae078da755c7432cf33681defa Mon Sep 17 00:00:00 2001 -From: Kanishk Bansal -Date: Thu, 22 May 2025 09:27:05 +0000 -Subject: [PATCH] CVE-2024-33600 - -Upstream Patch Reference : https://github.com/bminor/glibc/commit/541ea5172aa658c4bd5c6c6d6fd13903c3d5bb0a, https://github.com/bminor/glibc/commit/2ae9446c1b7a3064743b4a51c0bbae668ee43e4c - -Signed-off-by: Kanishk Bansal ---- - nscd/netgroupcache.c | 25 +++++++++++++------------ - 1 file changed, 13 insertions(+), 12 deletions(-) - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index 31b721bb..c3cd79de 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -147,7 +147,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - /* No such service. */ - cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout, - &key_copy); -- goto writeout; -+ goto maybe_cache_add; - } - - memset (&data, '\0', sizeof (data)); -@@ -348,7 +348,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - { - cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout, - &key_copy); -- goto writeout; -+ goto maybe_cache_add; - } - - total = buffilled; -@@ -410,14 +410,12 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - - if (he == NULL && fd != -1) -- { -- /* We write the dataset before inserting it to the database -- since while inserting this thread might block and so would -- unnecessarily let the receiver wait. */ -- writeout: -+ /* We write the dataset before inserting it to the database since -+ while inserting this thread might block and so would -+ unnecessarily let the receiver wait. */ - writeall (fd, &dataset->resp, dataset->head.recsize); -- } - -+ maybe_cache_add: - if (cacheable) - { - /* If necessary, we also propagate the data to disk. */ -@@ -513,14 +511,15 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - - datahead_init_pos (&dataset->head, sizeof (*dataset) + req->key_len, - sizeof (innetgroup_response_header), -- he == NULL ? 0 : dh->nreloads + 1, result->head.ttl); -+ he == NULL ? 0 : dh->nreloads + 1, -+ result == NULL ? db->negtimeout : result->head.ttl); - /* Set the notfound status and timeout based on the result from - getnetgrent. */ -- dataset->head.notfound = result->head.notfound; -+ dataset->head.notfound = result == NULL || result->head.notfound; - dataset->head.timeout = timeout; - - dataset->resp.version = NSCD_VERSION; -- dataset->resp.found = result->resp.found; -+ dataset->resp.found = result != NULL && result->resp.found; - /* Until we find a matching entry the result is 0. */ - dataset->resp.result = 0; - -@@ -568,7 +567,9 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - goto out; - } - -- if (he == NULL) -+ /* addgetnetgrentX may have already sent a notfound response. Do -+ not send another one. */ -+ if (he == NULL && dataset->resp.found) - { - /* We write the dataset before inserting it to the database - since while inserting this thread might block and so would --- -2.45.3 - diff --git a/SPECS/glibc/CVE-2024-33601.patch b/SPECS/glibc/CVE-2024-33601.patch deleted file mode 100644 index 4829bfc0b9..0000000000 --- a/SPECS/glibc/CVE-2024-33601.patch +++ /dev/null @@ -1,390 +0,0 @@ -From 71af8ca864345d39b746d5cee84b94b430fad5db Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Thu, 25 Apr 2024 15:01:07 +0200 -Subject: [PATCH] CVE-2024-33601, CVE-2024-33602: nscd: netgroup: Use two - buffers in addgetnetgrentX (bug 31680) - -This avoids potential memory corruption when the underlying NSS -callback function does not use the buffer space to store all strings -(e.g., for constant strings). - -Instead of custom buffer management, two scratch buffers are used. -This increases stack usage somewhat. - -Scratch buffer allocation failure is handled by return -1 -(an invalid timeout value) instead of terminating the process. -This fixes bug 31679. - -Reviewed-by: Siddhesh Poyarekar -(cherry picked from commit c04a21e050d64a1193a6daab872bca2528bda44b) - -Signed-off-by: Kanishk Bansal - ---- - nscd/netgroupcache.c | 219 ++++++++++++++++++++++++------------------- - 1 file changed, 121 insertions(+), 98 deletions(-) - -diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c -index c3cd79dec59..cc4e270c1f0 100644 ---- a/nscd/netgroupcache.c -+++ b/nscd/netgroupcache.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - #include "../inet/netgroup.h" - #include "nscd.h" -@@ -65,6 +66,16 @@ struct dataset - char strdata[0]; - }; - -+/* Send a notfound response to FD. Always returns -1 to indicate an -+ ephemeral error. */ -+static time_t -+send_notfound (int fd) -+{ -+ if (fd != -1) -+ TEMP_FAILURE_RETRY (send (fd, ¬found, sizeof (notfound), MSG_NOSIGNAL)); -+ return -1; -+} -+ - /* Sends a notfound message and prepares a notfound dataset to write to the - cache. Returns true if there was enough memory to allocate the dataset and - returns the dataset in DATASETP, total bytes to write in TOTALP and the -@@ -83,8 +94,7 @@ do_notfound (struct database_dyn *db, int fd, request_header *req, - total = sizeof (notfound); - timeout = time (NULL) + db->negtimeout; - -- if (fd != -1) -- TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); -+ send_notfound (fd); - - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1); - /* If we cannot permanently store the result, so be it. */ -@@ -109,11 +119,78 @@ do_notfound (struct database_dyn *db, int fd, request_header *req, - return cacheable; - } - -+struct addgetnetgrentX_scratch -+{ -+ /* This is the result that the caller should use. It can be NULL, -+ point into buffer, or it can be in the cache. */ -+ struct dataset *dataset; -+ -+ struct scratch_buffer buffer; -+ -+ /* Used internally in addgetnetgrentX as a staging area. */ -+ struct scratch_buffer tmp; -+ -+ /* Number of bytes in buffer that are actually used. */ -+ size_t buffer_used; -+}; -+ -+static void -+addgetnetgrentX_scratch_init (struct addgetnetgrentX_scratch *scratch) -+{ -+ scratch->dataset = NULL; -+ scratch_buffer_init (&scratch->buffer); -+ scratch_buffer_init (&scratch->tmp); -+ -+ /* Reserve space for the header. */ -+ scratch->buffer_used = sizeof (struct dataset); -+ static_assert (sizeof (struct dataset) < sizeof (scratch->tmp.__space), -+ "initial buffer space"); -+ memset (scratch->tmp.data, 0, sizeof (struct dataset)); -+} -+ -+static void -+addgetnetgrentX_scratch_free (struct addgetnetgrentX_scratch *scratch) -+{ -+ scratch_buffer_free (&scratch->buffer); -+ scratch_buffer_free (&scratch->tmp); -+} -+ -+/* Copy LENGTH bytes from S into SCRATCH. Returns NULL if SCRATCH -+ could not be resized, otherwise a pointer to the copy. */ -+static char * -+addgetnetgrentX_append_n (struct addgetnetgrentX_scratch *scratch, -+ const char *s, size_t length) -+{ -+ while (true) -+ { -+ size_t remaining = scratch->buffer.length - scratch->buffer_used; -+ if (remaining >= length) -+ break; -+ if (!scratch_buffer_grow_preserve (&scratch->buffer)) -+ return NULL; -+ } -+ char *copy = scratch->buffer.data + scratch->buffer_used; -+ memcpy (copy, s, length); -+ scratch->buffer_used += length; -+ return copy; -+} -+ -+/* Copy S into SCRATCH, including its null terminator. Returns false -+ if SCRATCH could not be resized. */ -+static bool -+addgetnetgrentX_append (struct addgetnetgrentX_scratch *scratch, const char *s) -+{ -+ if (s == NULL) -+ s = ""; -+ return addgetnetgrentX_append_n (scratch, s, strlen (s) + 1) != NULL; -+} -+ -+/* Caller must initialize and free *SCRATCH. If the return value is -+ negative, this function has sent a notfound response. */ - static time_t - addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - const char *key, uid_t uid, struct hashentry *he, -- struct datahead *dh, struct dataset **resultp, -- void **tofreep) -+ struct datahead *dh, struct addgetnetgrentX_scratch *scratch) - { - if (__glibc_unlikely (debug_level > 0)) - { -@@ -132,14 +209,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - - char *key_copy = NULL; - struct __netgrent data; -- size_t buflen = MAX (1024, sizeof (*dataset) + req->key_len); -- size_t buffilled = sizeof (*dataset); -- char *buffer = NULL; - size_t nentries = 0; - size_t group_len = strlen (key) + 1; - struct name_list *first_needed - = alloca (sizeof (struct name_list) + group_len); -- *tofreep = NULL; - - if (netgroup_database == NULL - && !__nss_database_get (nss_database_netgroup, &netgroup_database)) -@@ -151,8 +224,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - - memset (&data, '\0', sizeof (data)); -- buffer = xmalloc (buflen); -- *tofreep = buffer; - first_needed->next = first_needed; - memcpy (first_needed->name, key, group_len); - data.needed_groups = first_needed; -@@ -195,8 +266,8 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - while (1) - { - int e; -- status = getfct.f (&data, buffer + buffilled, -- buflen - buffilled - req->key_len, &e); -+ status = getfct.f (&data, scratch->tmp.data, -+ scratch->tmp.length, &e); - if (status == NSS_STATUS_SUCCESS) - { - if (data.type == triple_val) -@@ -204,68 +275,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - const char *nhost = data.val.triple.host; - const char *nuser = data.val.triple.user; - const char *ndomain = data.val.triple.domain; -- -- size_t hostlen = strlen (nhost ?: "") + 1; -- size_t userlen = strlen (nuser ?: "") + 1; -- size_t domainlen = strlen (ndomain ?: "") + 1; -- -- if (nhost == NULL || nuser == NULL || ndomain == NULL -- || nhost > nuser || nuser > ndomain) -- { -- const char *last = nhost; -- if (last == NULL -- || (nuser != NULL && nuser > last)) -- last = nuser; -- if (last == NULL -- || (ndomain != NULL && ndomain > last)) -- last = ndomain; -- -- size_t bufused -- = (last == NULL -- ? buffilled -- : last + strlen (last) + 1 - buffer); -- -- /* We have to make temporary copies. */ -- size_t needed = hostlen + userlen + domainlen; -- -- if (buflen - req->key_len - bufused < needed) -- { -- buflen += MAX (buflen, 2 * needed); -- /* Save offset in the old buffer. We don't -- bother with the NULL check here since -- we'll do that later anyway. */ -- size_t nhostdiff = nhost - buffer; -- size_t nuserdiff = nuser - buffer; -- size_t ndomaindiff = ndomain - buffer; -- -- char *newbuf = xrealloc (buffer, buflen); -- /* Fix up the triplet pointers into the new -- buffer. */ -- nhost = (nhost ? newbuf + nhostdiff -- : NULL); -- nuser = (nuser ? newbuf + nuserdiff -- : NULL); -- ndomain = (ndomain ? newbuf + ndomaindiff -- : NULL); -- *tofreep = buffer = newbuf; -- } -- -- nhost = memcpy (buffer + bufused, -- nhost ?: "", hostlen); -- nuser = memcpy ((char *) nhost + hostlen, -- nuser ?: "", userlen); -- ndomain = memcpy ((char *) nuser + userlen, -- ndomain ?: "", domainlen); -- } -- -- char *wp = buffer + buffilled; -- wp = memmove (wp, nhost ?: "", hostlen); -- wp += hostlen; -- wp = memmove (wp, nuser ?: "", userlen); -- wp += userlen; -- wp = memmove (wp, ndomain ?: "", domainlen); -- wp += domainlen; -- buffilled = wp - buffer; -+ if (!(addgetnetgrentX_append (scratch, nhost) -+ && addgetnetgrentX_append (scratch, nuser) -+ && addgetnetgrentX_append (scratch, ndomain))) -+ return send_notfound (fd); - ++nentries; - } - else -@@ -317,8 +330,8 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE) - { -- buflen *= 2; -- *tofreep = buffer = xrealloc (buffer, buflen); -+ if (!scratch_buffer_grow (&scratch->tmp)) -+ return send_notfound (fd); - } - else if (status == NSS_STATUS_RETURN - || status == NSS_STATUS_NOTFOUND -@@ -351,10 +364,17 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - goto maybe_cache_add; - } - -- total = buffilled; -+ /* Capture the result size without the key appended. */ -+ total = scratch->buffer_used; -+ -+ /* Make a copy of the key. The scratch buffer must not move after -+ this point. */ -+ key_copy = addgetnetgrentX_append_n (scratch, key, req->key_len); -+ if (key_copy == NULL) -+ return send_notfound (fd); - - /* Fill in the dataset. */ -- dataset = (struct dataset *) buffer; -+ dataset = scratch->buffer.data; - timeout = datahead_init_pos (&dataset->head, total + req->key_len, - total - offsetof (struct dataset, resp), - he == NULL ? 0 : dh->nreloads + 1, -@@ -363,11 +383,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - dataset->resp.version = NSCD_VERSION; - dataset->resp.found = 1; - dataset->resp.nresults = nentries; -- dataset->resp.result_len = buffilled - sizeof (*dataset); -- -- assert (buflen - buffilled >= req->key_len); -- key_copy = memcpy (buffer + buffilled, key, req->key_len); -- buffilled += req->key_len; -+ dataset->resp.result_len = total - sizeof (*dataset); - - /* Now we can determine whether on refill we have to create a new - record or not. */ -@@ -398,7 +414,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - if (__glibc_likely (newp != NULL)) - { - /* Adjust pointer into the memory block. */ -- key_copy = (char *) newp + (key_copy - buffer); -+ key_copy = (char *) newp + (key_copy - (char *) dataset); - - dataset = memcpy (newp, dataset, total + req->key_len); - cacheable = true; -@@ -439,7 +455,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, - } - - out: -- *resultp = dataset; -+ scratch->dataset = dataset; - - return timeout; - } -@@ -460,6 +476,9 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - if (user != NULL) - key = strchr (key, '\0') + 1; - const char *domain = *key++ ? key : NULL; -+ struct addgetnetgrentX_scratch scratch; -+ -+ addgetnetgrentX_scratch_init (&scratch); - - if (__glibc_unlikely (debug_level > 0)) - { -@@ -475,12 +494,8 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - group, group_len, - db, uid); - time_t timeout; -- void *tofree; - if (result != NULL) -- { -- timeout = result->head.timeout; -- tofree = NULL; -- } -+ timeout = result->head.timeout; - else - { - request_header req_get = -@@ -489,7 +504,10 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - .key_len = group_len - }; - timeout = addgetnetgrentX (db, -1, &req_get, group, uid, NULL, NULL, -- &result, &tofree); -+ &scratch); -+ result = scratch.dataset; -+ if (timeout < 0) -+ goto out; - } - - struct indataset -@@ -603,7 +621,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req, - } - - out: -- free (tofree); -+ addgetnetgrentX_scratch_free (&scratch); - return timeout; - } - -@@ -613,11 +631,12 @@ addgetnetgrentX_ignore (struct database_dyn *db, int fd, request_header *req, - const char *key, uid_t uid, struct hashentry *he, - struct datahead *dh) - { -- struct dataset *ignore; -- void *tofree; -- time_t timeout = addgetnetgrentX (db, fd, req, key, uid, he, dh, -- &ignore, &tofree); -- free (tofree); -+ struct addgetnetgrentX_scratch scratch; -+ addgetnetgrentX_scratch_init (&scratch); -+ time_t timeout = addgetnetgrentX (db, fd, req, key, uid, he, dh, &scratch); -+ addgetnetgrentX_scratch_free (&scratch); -+ if (timeout < 0) -+ timeout = 0; - return timeout; - } - -@@ -661,5 +680,9 @@ readdinnetgr (struct database_dyn *db, struct hashentry *he, - .key_len = he->len - }; - -- return addinnetgrX (db, -1, &req, db->data + he->key, he->owner, he, dh); -+ int timeout = addinnetgrX (db, -1, &req, db->data + he->key, he->owner, -+ he, dh); -+ if (timeout < 0) -+ timeout = 0; -+ return timeout; - } diff --git a/SPECS/glibc/CVE-2025-0395.patch b/SPECS/glibc/CVE-2025-0395.patch deleted file mode 100644 index 0def90aa7c..0000000000 --- a/SPECS/glibc/CVE-2025-0395.patch +++ /dev/null @@ -1,173 +0,0 @@ -From e4b60c61eba1812eeaeaea5d1520ba86ead98607 Mon Sep 17 00:00:00 2001 -From: Kanishk Bansal -Date: Thu, 22 May 2025 09:35:53 +0000 -Subject: [PATCH] CVE-2025-0395 - -Upstream Patch Reference : https://github.com/bminor/glibc/commit/c32fd59314c343db88c3ea4a203870481d33c3d2, https://github.com/bminor/glibc/commit/f984e2d7e8299726891a1a497a3c36cd5542a0bf - -Signed-off-by: Kanishk Bansal ---- - assert/Makefile | 1 + - assert/assert.c | 4 +- - assert/tst-assert-sa-2025-0001.c | 92 ++++++++++++++++++++++++++++++++ - sysdeps/posix/libc_fatal.c | 4 +- - 4 files changed, 99 insertions(+), 2 deletions(-) - create mode 100644 assert/tst-assert-sa-2025-0001.c - -diff --git a/assert/Makefile b/assert/Makefile -index 67f4e6a5..b0fc9fc4 100644 ---- a/assert/Makefile -+++ b/assert/Makefile -@@ -38,6 +38,7 @@ tests := \ - test-assert-perr \ - tst-assert-c++ \ - tst-assert-g++ \ -+ tst-assert-sa-2025-0001 \ - # tests - - ifeq ($(have-cxx-thread_local),yes) -diff --git a/assert/assert.c b/assert/assert.c -index b7c7a4a1..65a9fedf 100644 ---- a/assert/assert.c -+++ b/assert/assert.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -64,7 +65,8 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file, - (void) __fxprintf (NULL, "%s", str); - (void) fflush (stderr); - -- total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1); -+ total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1, -+ GLRO(dl_pagesize)); - struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); - if (__glibc_likely (buf != MAP_FAILED)) -diff --git a/assert/tst-assert-sa-2025-0001.c b/assert/tst-assert-sa-2025-0001.c -new file mode 100644 -index 00000000..102cb007 ---- /dev/null -+++ b/assert/tst-assert-sa-2025-0001.c -@@ -0,0 +1,92 @@ -+/* Test for CVE-2025-0395. -+ Copyright The GNU Toolchain Authors. -+ This file is part of the GNU C Library. -+ -+ The GNU C 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. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* Test that a large enough __progname does not result in a buffer overflow -+ when printing an assertion failure. This was CVE-2025-0395. */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+extern const char *__progname; -+ -+int -+do_test (int argc, char **argv) -+{ -+ -+ support_need_proc ("Reads /proc/self/maps to add guards to writable maps."); -+ ignore_stderr (); -+ -+ /* XXX assumes that the assert is on a 2 digit line number. */ -+ const char *prompt = ": %s:99: do_test: Assertion `argc < 1' failed.\n"; -+ -+ int ret = fprintf (stderr, prompt, __FILE__); -+ if (ret < 0) -+ FAIL_EXIT1 ("fprintf failed: %m\n"); -+ -+ size_t pagesize = getpagesize (); -+ size_t namesize = pagesize - 1 - ret; -+ -+ /* Alter the progname so that the assert message fills the entire page. */ -+ char progname[namesize]; -+ memset (progname, 'A', namesize - 1); -+ progname[namesize - 1] = '\0'; -+ __progname = progname; -+ -+ FILE *f = xfopen ("/proc/self/maps", "r"); -+ char *line = NULL; -+ size_t len = 0; -+ uintptr_t prev_to = 0; -+ -+ /* Pad the beginning of every writable mapping with a PROT_NONE map. This -+ ensures that the mmap in the assert_fail path never ends up below a -+ writable map and will terminate immediately in case of a buffer -+ overflow. */ -+ while (xgetline (&line, &len, f)) -+ { -+ uintptr_t from, to; -+ char perm[4]; -+ -+ sscanf (line, "%" SCNxPTR "-%" SCNxPTR " %c%c%c%c ", -+ &from, &to, -+ &perm[0], &perm[1], &perm[2], &perm[3]); -+ -+ bool writable = (memchr (perm, 'w', 4) != NULL); -+ -+ if (prev_to != 0 && from - prev_to > pagesize && writable) -+ xmmap ((void *) from - pagesize, pagesize, PROT_NONE, -+ MAP_ANONYMOUS | MAP_PRIVATE, 0); -+ -+ prev_to = to; -+ } -+ -+ xfclose (f); -+ -+ assert (argc < 1); -+ return 0; -+} -+ -+#define EXPECTED_SIGNAL SIGABRT -+#define TEST_FUNCTION_ARGV do_test -+#include -diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c -index 70edcc10..5b9e4b79 100644 ---- a/sysdeps/posix/libc_fatal.c -+++ b/sysdeps/posix/libc_fatal.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -123,7 +124,8 @@ __libc_message (const char *fmt, ...) - - WRITEV_FOR_FATAL (fd, iov, nlist, total); - -- total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1); -+ total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1, -+ GLRO(dl_pagesize)); - struct abort_msg_s *buf = __mmap (NULL, total, - PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); --- -2.45.3 - diff --git a/SPECS/glibc/CVE-2025-4802.patch b/SPECS/glibc/CVE-2025-4802.patch deleted file mode 100644 index b766e5da8d..0000000000 --- a/SPECS/glibc/CVE-2025-4802.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 3be3728df2f1912c80abd3288bc6e3a25ad679e4 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Mon, 6 Nov 2023 17:25:49 -0300 -Subject: [PATCH] elf: Ignore LD_LIBRARY_PATH and debug env var for setuid for - static - -It mimics the ld.so behavior. - -Checked on x86_64-linux-gnu. -Reviewed-by: Siddhesh Poyarekar - -(cherry picked from commit 5451fa962cd0a90a0e2ec1d8910a559ace02bba0) - -Changes: - - git/elf/dl-support.c - (missing commit 55f41ef8de4a4d0c5762d78659e11202d3c765d4 - ("elf: Remove LD_PROFILE for static binaries")) ---- - elf/dl-support.c | 32 ++++++++++++++++---------------- - 1 file changed, 16 insertions(+), 16 deletions(-) - -diff --git a/elf/dl-support.c b/elf/dl-support.c -index 44a54dea074..d57e6505835 100644 ---- a/elf/dl-support.c -+++ b/elf/dl-support.c -@@ -276,8 +276,6 @@ _dl_non_dynamic_init (void) - _dl_main_map.l_phdr = GL(dl_phdr); - _dl_main_map.l_phnum = GL(dl_phnum); - -- _dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1; -- - /* Set up the data structures for the system-supplied DSO early, - so they can influence _dl_init_paths. */ - setup_vdso (NULL, NULL); -@@ -285,6 +283,22 @@ _dl_non_dynamic_init (void) - /* With vDSO setup we can initialize the function pointers. */ - setup_vdso_pointers (); - -+ if (__libc_enable_secure) -+ { -+ static const char unsecure_envvars[] = -+ UNSECURE_ENVVARS -+ ; -+ const char *cp = unsecure_envvars; -+ -+ while (cp < unsecure_envvars + sizeof (unsecure_envvars)) -+ { -+ __unsetenv (cp); -+ cp = strchr (cp, '\0') + 1; -+ } -+ } -+ -+ _dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1; -+ - /* Initialize the data structures for the search paths for shared - objects. */ - _dl_init_paths (getenv ("LD_LIBRARY_PATH"), "LD_LIBRARY_PATH", -@@ -306,20 +320,6 @@ _dl_non_dynamic_init (void) - _dl_profile_output - = &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0]; - -- if (__libc_enable_secure) -- { -- static const char unsecure_envvars[] = -- UNSECURE_ENVVARS -- ; -- const char *cp = unsecure_envvars; -- -- while (cp < unsecure_envvars + sizeof (unsecure_envvars)) -- { -- __unsetenv (cp); -- cp = strchr (cp, '\0') + 1; -- } -- } -- - #ifdef DL_PLATFORM_INIT - DL_PLATFORM_INIT; - #endif diff --git a/SPECS/glibc/glibc-2.34_pthread_cond_wait.patch b/SPECS/glibc/glibc-2.34_pthread_cond_wait.patch deleted file mode 100644 index bf04421f81..0000000000 --- a/SPECS/glibc/glibc-2.34_pthread_cond_wait.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -ruN a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c ---- a/nptl/pthread_cond_wait.c 2021-11-05 15:04:17.337600296 -0700 -+++ b/nptl/pthread_cond_wait.c 2021-11-05 15:05:23.813388264 -0700 -@@ -589,6 +589,15 @@ - the signal from, which cause it to block using the - futex). */ - futex_wake (cond->__data.__g_signals + g, 1, private); -+ -+ /* We might be wrong about stealing, we got the signal -+ from the an old g1, but ended up returning it to -+ a different g1. We can't tell whether it is the case. -+ If it is, we now caused another issue: -+ now g_refs[g1] is one less than g_size[g1]. -+ The mitigation step is to broadcast g1 and g2, let every -+ waiter wake up spuriosly. */ -+ __pthread_cond_broadcast(cond); - break; - } - /* TODO Back off. */ diff --git a/SPECS/glibc/glibc-2.35-fhs-1.patch b/SPECS/glibc/glibc-2.35-fhs-1.patch deleted file mode 100644 index 4ac8d106bb..0000000000 --- a/SPECS/glibc/glibc-2.35-fhs-1.patch +++ /dev/null @@ -1,72 +0,0 @@ -Submitted By: Armin K. -Date: 2013-02-11 -Initial Package Version: 2.17 -Upstream Status: Not Applicable -Origin: Self -Description: This patch removes references to /var/db directory which is not part - of FHS and replaces them with more suitable directories in /var - hierarchy - /var/cache/nscd for nscd and /var/lib/nss_db for nss_db. - ---- a/Makeconfig 2012-12-25 04:02:13.000000000 +0100 -+++ b/Makeconfig 2013-02-11 01:32:32.500667439 +0100 -@@ -250,7 +250,7 @@ - - # Directory for the database files and Makefile for nss_db. - ifndef vardbdir --vardbdir = $(localstatedir)/db -+vardbdir = $(localstatedir)/lib/nss_db - endif - inst_vardbdir = $(install_root)$(vardbdir) - ---- a/nscd/nscd.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/nscd/nscd.h 2013-02-11 01:32:32.500667439 +0100 -@@ -112,11 +112,11 @@ - - - /* Paths of the file for the persistent storage. */ --#define _PATH_NSCD_PASSWD_DB "/var/db/nscd/passwd" --#define _PATH_NSCD_GROUP_DB "/var/db/nscd/group" --#define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts" --#define _PATH_NSCD_SERVICES_DB "/var/db/nscd/services" --#define _PATH_NSCD_NETGROUP_DB "/var/db/nscd/netgroup" -+#define _PATH_NSCD_PASSWD_DB "/var/cache/nscd/passwd" -+#define _PATH_NSCD_GROUP_DB "/var/cache/nscd/group" -+#define _PATH_NSCD_HOSTS_DB "/var/cache/nscd/hosts" -+#define _PATH_NSCD_SERVICES_DB "/var/cache/nscd/services" -+#define _PATH_NSCD_NETGROUP_DB "/var/cache/nscd/netgroup" - - /* Path used when not using persistent storage. */ - #define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX" ---- a/nss/db-Makefile 2012-12-25 04:02:13.000000000 +0100 -+++ b/nss/db-Makefile 2013-02-11 01:32:32.500667439 +0100 -@@ -22,7 +22,7 @@ - /etc/rpc /etc/services /etc/shadow /etc/gshadow \ - /etc/netgroup) - --VAR_DB = /var/db -+VAR_DB = /var/lib/nss_db - - AWK = awk - MAKEDB = makedb --quiet ---- a/sysdeps/generic/paths.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/sysdeps/generic/paths.h 2013-02-11 01:32:32.500667439 +0100 -@@ -68,7 +68,7 @@ - /* Provide trailing slash, since mostly used for building pathnames. */ - #define _PATH_DEV "/dev/" - #define _PATH_TMP "/tmp/" --#define _PATH_VARDB "/var/db/" -+#define _PATH_VARDB "/var/lib/nss_db/" - #define _PATH_VARRUN "/var/run/" - #define _PATH_VARTMP "/var/tmp/" - ---- a/sysdeps/unix/sysv/linux/paths.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/sysdeps/unix/sysv/linux/paths.h 2013-02-11 01:32:32.504000831 +0100 -@@ -68,7 +68,7 @@ - /* Provide trailing slash, since mostly used for building pathnames. */ - #define _PATH_DEV "/dev/" - #define _PATH_TMP "/tmp/" --#define _PATH_VARDB "/var/db/" -+#define _PATH_VARDB "/var/lib/nss_db/" - #define _PATH_VARRUN "/var/run/" - #define _PATH_VARTMP "/var/tmp/" - diff --git a/SPECS/glibc/glibc-2.38-fhs-1.patch b/SPECS/glibc/glibc-2.38-fhs-1.patch deleted file mode 100644 index 4ac8d106bb..0000000000 --- a/SPECS/glibc/glibc-2.38-fhs-1.patch +++ /dev/null @@ -1,72 +0,0 @@ -Submitted By: Armin K. -Date: 2013-02-11 -Initial Package Version: 2.17 -Upstream Status: Not Applicable -Origin: Self -Description: This patch removes references to /var/db directory which is not part - of FHS and replaces them with more suitable directories in /var - hierarchy - /var/cache/nscd for nscd and /var/lib/nss_db for nss_db. - ---- a/Makeconfig 2012-12-25 04:02:13.000000000 +0100 -+++ b/Makeconfig 2013-02-11 01:32:32.500667439 +0100 -@@ -250,7 +250,7 @@ - - # Directory for the database files and Makefile for nss_db. - ifndef vardbdir --vardbdir = $(localstatedir)/db -+vardbdir = $(localstatedir)/lib/nss_db - endif - inst_vardbdir = $(install_root)$(vardbdir) - ---- a/nscd/nscd.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/nscd/nscd.h 2013-02-11 01:32:32.500667439 +0100 -@@ -112,11 +112,11 @@ - - - /* Paths of the file for the persistent storage. */ --#define _PATH_NSCD_PASSWD_DB "/var/db/nscd/passwd" --#define _PATH_NSCD_GROUP_DB "/var/db/nscd/group" --#define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts" --#define _PATH_NSCD_SERVICES_DB "/var/db/nscd/services" --#define _PATH_NSCD_NETGROUP_DB "/var/db/nscd/netgroup" -+#define _PATH_NSCD_PASSWD_DB "/var/cache/nscd/passwd" -+#define _PATH_NSCD_GROUP_DB "/var/cache/nscd/group" -+#define _PATH_NSCD_HOSTS_DB "/var/cache/nscd/hosts" -+#define _PATH_NSCD_SERVICES_DB "/var/cache/nscd/services" -+#define _PATH_NSCD_NETGROUP_DB "/var/cache/nscd/netgroup" - - /* Path used when not using persistent storage. */ - #define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX" ---- a/nss/db-Makefile 2012-12-25 04:02:13.000000000 +0100 -+++ b/nss/db-Makefile 2013-02-11 01:32:32.500667439 +0100 -@@ -22,7 +22,7 @@ - /etc/rpc /etc/services /etc/shadow /etc/gshadow \ - /etc/netgroup) - --VAR_DB = /var/db -+VAR_DB = /var/lib/nss_db - - AWK = awk - MAKEDB = makedb --quiet ---- a/sysdeps/generic/paths.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/sysdeps/generic/paths.h 2013-02-11 01:32:32.500667439 +0100 -@@ -68,7 +68,7 @@ - /* Provide trailing slash, since mostly used for building pathnames. */ - #define _PATH_DEV "/dev/" - #define _PATH_TMP "/tmp/" --#define _PATH_VARDB "/var/db/" -+#define _PATH_VARDB "/var/lib/nss_db/" - #define _PATH_VARRUN "/var/run/" - #define _PATH_VARTMP "/var/tmp/" - ---- a/sysdeps/unix/sysv/linux/paths.h 2012-12-25 04:02:13.000000000 +0100 -+++ b/sysdeps/unix/sysv/linux/paths.h 2013-02-11 01:32:32.504000831 +0100 -@@ -68,7 +68,7 @@ - /* Provide trailing slash, since mostly used for building pathnames. */ - #define _PATH_DEV "/dev/" - #define _PATH_TMP "/tmp/" --#define _PATH_VARDB "/var/db/" -+#define _PATH_VARDB "/var/lib/nss_db/" - #define _PATH_VARRUN "/var/run/" - #define _PATH_VARTMP "/var/tmp/" - diff --git a/SPECS/glibc/glibc-2.38-memalign_fix-1.patch b/SPECS/glibc/glibc-2.38-memalign_fix-1.patch deleted file mode 100644 index b04c21f3de..0000000000 --- a/SPECS/glibc/glibc-2.38-memalign_fix-1.patch +++ /dev/null @@ -1,585 +0,0 @@ -Submitted By: Xi Ruoyao -Date: 2023-08-13 -Initial Package Version: 2.38 -Upstream Status: Under review -Origin: Upstream & Self - - 1/3: https://sourceware.org/git/?p=glibc.git;a=patch;h=542b11058525 - - 2/3: https://sourceware.org/pipermail/libc-alpha/2023-August/150857.html - - 3/3: Trivial unused code removal -Description: Fixes a regression causing posix_memalign() - very slow in certain conditions to avoid - breaking ffmpeg-based applications. - -From fc01478d06658ace8d57e5328c1e717275acfe84 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Fri, 11 Aug 2023 11:18:17 +0200 -Subject: [PATCH 1/3] malloc: Enable merging of remainders in memalign (bug - 30723) - -Previously, calling _int_free from _int_memalign could put remainders -into the tcache or into fastbins, where they are invisible to the -low-level allocator. This results in missed merge opportunities -because once these freed chunks become available to the low-level -allocator, further memalign allocations (even of the same size are) -likely obstructing merges. - -Furthermore, during forwards merging in _int_memalign, do not -completely give up when the remainder is too small to serve as a -chunk on its own. We can still give it back if it can be merged -with the following unused chunk. This makes it more likely that -memalign calls in a loop achieve a compact memory layout, -independently of initial heap layout. - -Drop some useless (unsigned long) casts along the way, and tweak -the style to more closely match GNU on changed lines. - -Reviewed-by: DJ Delorie -(cherry picked from commit 542b1105852568c3ebc712225ae78b8c8ba31a78) ---- - malloc/malloc.c | 197 +++++++++++++++++++++++++++++------------------- - 1 file changed, 121 insertions(+), 76 deletions(-) - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index e2f1a615a4..948f9759af 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -1086,6 +1086,11 @@ typedef struct malloc_chunk* mchunkptr; - - static void* _int_malloc(mstate, size_t); - static void _int_free(mstate, mchunkptr, int); -+static void _int_free_merge_chunk (mstate, mchunkptr, INTERNAL_SIZE_T); -+static INTERNAL_SIZE_T _int_free_create_chunk (mstate, -+ mchunkptr, INTERNAL_SIZE_T, -+ mchunkptr, INTERNAL_SIZE_T); -+static void _int_free_maybe_consolidate (mstate, INTERNAL_SIZE_T); - static void* _int_realloc(mstate, mchunkptr, INTERNAL_SIZE_T, - INTERNAL_SIZE_T); - static void* _int_memalign(mstate, size_t, size_t); -@@ -4637,31 +4642,52 @@ _int_free (mstate av, mchunkptr p, int have_lock) - if (!have_lock) - __libc_lock_lock (av->mutex); - -- nextchunk = chunk_at_offset(p, size); -- -- /* Lightweight tests: check whether the block is already the -- top block. */ -- if (__glibc_unlikely (p == av->top)) -- malloc_printerr ("double free or corruption (top)"); -- /* Or whether the next chunk is beyond the boundaries of the arena. */ -- if (__builtin_expect (contiguous (av) -- && (char *) nextchunk -- >= ((char *) av->top + chunksize(av->top)), 0)) -- malloc_printerr ("double free or corruption (out)"); -- /* Or whether the block is actually not marked used. */ -- if (__glibc_unlikely (!prev_inuse(nextchunk))) -- malloc_printerr ("double free or corruption (!prev)"); -- -- nextsize = chunksize(nextchunk); -- if (__builtin_expect (chunksize_nomask (nextchunk) <= CHUNK_HDR_SZ, 0) -- || __builtin_expect (nextsize >= av->system_mem, 0)) -- malloc_printerr ("free(): invalid next size (normal)"); -+ _int_free_merge_chunk (av, p, size); - -- free_perturb (chunk2mem(p), size - CHUNK_HDR_SZ); -+ if (!have_lock) -+ __libc_lock_unlock (av->mutex); -+ } -+ /* -+ If the chunk was allocated via mmap, release via munmap(). -+ */ -+ -+ else { -+ munmap_chunk (p); -+ } -+} -+ -+/* Try to merge chunk P of SIZE bytes with its neighbors. Put the -+ resulting chunk on the appropriate bin list. P must not be on a -+ bin list yet, and it can be in use. */ -+static void -+_int_free_merge_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size) -+{ -+ mchunkptr nextchunk = chunk_at_offset(p, size); -+ -+ /* Lightweight tests: check whether the block is already the -+ top block. */ -+ if (__glibc_unlikely (p == av->top)) -+ malloc_printerr ("double free or corruption (top)"); -+ /* Or whether the next chunk is beyond the boundaries of the arena. */ -+ if (__builtin_expect (contiguous (av) -+ && (char *) nextchunk -+ >= ((char *) av->top + chunksize(av->top)), 0)) -+ malloc_printerr ("double free or corruption (out)"); -+ /* Or whether the block is actually not marked used. */ -+ if (__glibc_unlikely (!prev_inuse(nextchunk))) -+ malloc_printerr ("double free or corruption (!prev)"); -+ -+ INTERNAL_SIZE_T nextsize = chunksize(nextchunk); -+ if (__builtin_expect (chunksize_nomask (nextchunk) <= CHUNK_HDR_SZ, 0) -+ || __builtin_expect (nextsize >= av->system_mem, 0)) -+ malloc_printerr ("free(): invalid next size (normal)"); -+ -+ free_perturb (chunk2mem(p), size - CHUNK_HDR_SZ); - -- /* consolidate backward */ -- if (!prev_inuse(p)) { -- prevsize = prev_size (p); -+ /* Consolidate backward. */ -+ if (!prev_inuse(p)) -+ { -+ INTERNAL_SIZE_T prevsize = prev_size (p); - size += prevsize; - p = chunk_at_offset(p, -((long) prevsize)); - if (__glibc_unlikely (chunksize(p) != prevsize)) -@@ -4669,9 +4695,25 @@ _int_free (mstate av, mchunkptr p, int have_lock) - unlink_chunk (av, p); - } - -- if (nextchunk != av->top) { -+ /* Write the chunk header, maybe after merging with the following chunk. */ -+ size = _int_free_create_chunk (av, p, size, nextchunk, nextsize); -+ _int_free_maybe_consolidate (av, size); -+} -+ -+/* Create a chunk at P of SIZE bytes, with SIZE potentially increased -+ to cover the immediately following chunk NEXTCHUNK of NEXTSIZE -+ bytes (if NEXTCHUNK is unused). The chunk at P is not actually -+ read and does not have to be initialized. After creation, it is -+ placed on the appropriate bin list. The function returns the size -+ of the new chunk. */ -+static INTERNAL_SIZE_T -+_int_free_create_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T size, -+ mchunkptr nextchunk, INTERNAL_SIZE_T nextsize) -+{ -+ if (nextchunk != av->top) -+ { - /* get and clear inuse bit */ -- nextinuse = inuse_bit_at_offset(nextchunk, nextsize); -+ bool nextinuse = inuse_bit_at_offset (nextchunk, nextsize); - - /* consolidate forward */ - if (!nextinuse) { -@@ -4686,8 +4728,8 @@ _int_free (mstate av, mchunkptr p, int have_lock) - been given one chance to be used in malloc. - */ - -- bck = unsorted_chunks(av); -- fwd = bck->fd; -+ mchunkptr bck = unsorted_chunks (av); -+ mchunkptr fwd = bck->fd; - if (__glibc_unlikely (fwd->bk != bck)) - malloc_printerr ("free(): corrupted unsorted chunks"); - p->fd = fwd; -@@ -4706,61 +4748,52 @@ _int_free (mstate av, mchunkptr p, int have_lock) - check_free_chunk(av, p); - } - -- /* -- If the chunk borders the current high end of memory, -- consolidate into top -- */ -- -- else { -+ else -+ { -+ /* If the chunk borders the current high end of memory, -+ consolidate into top. */ - size += nextsize; - set_head(p, size | PREV_INUSE); - av->top = p; - check_chunk(av, p); - } - -- /* -- If freeing a large space, consolidate possibly-surrounding -- chunks. Then, if the total unused topmost memory exceeds trim -- threshold, ask malloc_trim to reduce top. -- -- Unless max_fast is 0, we don't know if there are fastbins -- bordering top, so we cannot tell for sure whether threshold -- has been reached unless fastbins are consolidated. But we -- don't want to consolidate on each free. As a compromise, -- consolidation is performed if FASTBIN_CONSOLIDATION_THRESHOLD -- is reached. -- */ -+ return size; -+} - -- if ((unsigned long)(size) >= FASTBIN_CONSOLIDATION_THRESHOLD) { -+/* If freeing a large space, consolidate possibly-surrounding -+ chunks. Then, if the total unused topmost memory exceeds trim -+ threshold, ask malloc_trim to reduce top. */ -+static void -+_int_free_maybe_consolidate (mstate av, INTERNAL_SIZE_T size) -+{ -+ /* Unless max_fast is 0, we don't know if there are fastbins -+ bordering top, so we cannot tell for sure whether threshold has -+ been reached unless fastbins are consolidated. But we don't want -+ to consolidate on each free. As a compromise, consolidation is -+ performed if FASTBIN_CONSOLIDATION_THRESHOLD is reached. */ -+ if (size >= FASTBIN_CONSOLIDATION_THRESHOLD) -+ { - if (atomic_load_relaxed (&av->have_fastchunks)) - malloc_consolidate(av); - -- if (av == &main_arena) { -+ if (av == &main_arena) -+ { - #ifndef MORECORE_CANNOT_TRIM -- if ((unsigned long)(chunksize(av->top)) >= -- (unsigned long)(mp_.trim_threshold)) -- systrim(mp_.top_pad, av); -+ if (chunksize (av->top) >= mp_.trim_threshold) -+ systrim (mp_.top_pad, av); - #endif -- } else { -- /* Always try heap_trim(), even if the top chunk is not -- large, because the corresponding heap might go away. */ -- heap_info *heap = heap_for_ptr(top(av)); -+ } -+ else -+ { -+ /* Always try heap_trim, even if the top chunk is not large, -+ because the corresponding heap might go away. */ -+ heap_info *heap = heap_for_ptr (top (av)); - -- assert(heap->ar_ptr == av); -- heap_trim(heap, mp_.top_pad); -- } -+ assert (heap->ar_ptr == av); -+ heap_trim (heap, mp_.top_pad); -+ } - } -- -- if (!have_lock) -- __libc_lock_unlock (av->mutex); -- } -- /* -- If the chunk was allocated via mmap, release via munmap(). -- */ -- -- else { -- munmap_chunk (p); -- } - } - - /* -@@ -5221,7 +5254,7 @@ _int_memalign (mstate av, size_t alignment, size_t bytes) - (av != &main_arena ? NON_MAIN_ARENA : 0)); - set_inuse_bit_at_offset (newp, newsize); - set_head_size (p, leadsize | (av != &main_arena ? NON_MAIN_ARENA : 0)); -- _int_free (av, p, 1); -+ _int_free_merge_chunk (av, p, leadsize); - p = newp; - - assert (newsize >= nb && -@@ -5232,15 +5265,27 @@ _int_memalign (mstate av, size_t alignment, size_t bytes) - if (!chunk_is_mmapped (p)) - { - size = chunksize (p); -- if ((unsigned long) (size) > (unsigned long) (nb + MINSIZE)) -+ mchunkptr nextchunk = chunk_at_offset(p, size); -+ INTERNAL_SIZE_T nextsize = chunksize(nextchunk); -+ if (size > nb) - { - remainder_size = size - nb; -- remainder = chunk_at_offset (p, nb); -- set_head (remainder, remainder_size | PREV_INUSE | -- (av != &main_arena ? NON_MAIN_ARENA : 0)); -- set_head_size (p, nb); -- _int_free (av, remainder, 1); -- } -+ if (remainder_size >= MINSIZE -+ || nextchunk == av->top -+ || !inuse_bit_at_offset (nextchunk, nextsize)) -+ { -+ /* We can only give back the tail if it is larger than -+ MINSIZE, or if the following chunk is unused (top -+ chunk or unused in-heap chunk). Otherwise we would -+ create a chunk that is smaller than MINSIZE. */ -+ remainder = chunk_at_offset (p, nb); -+ set_head_size (p, nb); -+ remainder_size = _int_free_create_chunk (av, remainder, -+ remainder_size, -+ nextchunk, nextsize); -+ _int_free_maybe_consolidate (av, remainder_size); -+ } -+ } - } - - check_inuse_chunk (av, p); --- -2.41.0 - -From b37e836b7cc2dba672e1de1cc7e076ba1c712614 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Fri, 11 Aug 2023 17:48:13 +0200 -Subject: [PATCH 2/3] malloc: Remove bin scanning from memalign (bug 30723) - -On the test workload (mpv --cache=yes with VP9 video decoding), the -bin scanning has a very poor success rate (less than 2%). The tcache -scanning has about 50% success rate, so keep that. - -Update comments in malloc/tst-memalign-2 to indicate the purpose -of the tests. Even with the scanning removed, the additional -merging opportunities since commit 542b1105852568c3ebc712225ae78b -("malloc: Enable merging of remainders in memalign (bug 30723)") -are sufficient to pass the existing large bins test. - -Link: https://sourceware.org/pipermail/libc-alpha/2023-August/150857.html ---- - malloc/malloc.c | 127 ++-------------------------------------- - malloc/tst-memalign-2.c | 7 ++- - 2 files changed, 10 insertions(+), 124 deletions(-) - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 948f9759af..9c2cab7a59 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -5082,7 +5082,6 @@ _int_memalign (mstate av, size_t alignment, size_t bytes) - mchunkptr remainder; /* spare room at end to split off */ - unsigned long remainder_size; /* its size */ - INTERNAL_SIZE_T size; -- mchunkptr victim; - - nb = checked_request2size (bytes); - if (nb == 0) -@@ -5101,129 +5100,13 @@ _int_memalign (mstate av, size_t alignment, size_t bytes) - we don't find anything in those bins, the common malloc code will - scan starting at 2x. */ - -- /* This will be set if we found a candidate chunk. */ -- victim = NULL; -+ /* Call malloc with worst case padding to hit alignment. */ -+ m = (char *) (_int_malloc (av, nb + alignment + MINSIZE)); - -- /* Fast bins are singly-linked, hard to remove a chunk from the middle -- and unlikely to meet our alignment requirements. We have not done -- any experimentation with searching for aligned fastbins. */ -+ if (m == 0) -+ return 0; /* propagate failure */ - -- if (av != NULL) -- { -- int first_bin_index; -- int first_largebin_index; -- int last_bin_index; -- -- if (in_smallbin_range (nb)) -- first_bin_index = smallbin_index (nb); -- else -- first_bin_index = largebin_index (nb); -- -- if (in_smallbin_range (nb * 2)) -- last_bin_index = smallbin_index (nb * 2); -- else -- last_bin_index = largebin_index (nb * 2); -- -- first_largebin_index = largebin_index (MIN_LARGE_SIZE); -- -- int victim_index; /* its bin index */ -- -- for (victim_index = first_bin_index; -- victim_index < last_bin_index; -- victim_index ++) -- { -- victim = NULL; -- -- if (victim_index < first_largebin_index) -- { -- /* Check small bins. Small bin chunks are doubly-linked despite -- being the same size. */ -- -- mchunkptr fwd; /* misc temp for linking */ -- mchunkptr bck; /* misc temp for linking */ -- -- bck = bin_at (av, victim_index); -- fwd = bck->fd; -- while (fwd != bck) -- { -- if (chunk_ok_for_memalign (fwd, alignment, nb) > 0) -- { -- victim = fwd; -- -- /* Unlink it */ -- victim->fd->bk = victim->bk; -- victim->bk->fd = victim->fd; -- break; -- } -- -- fwd = fwd->fd; -- } -- } -- else -- { -- /* Check large bins. */ -- mchunkptr fwd; /* misc temp for linking */ -- mchunkptr bck; /* misc temp for linking */ -- mchunkptr best = NULL; -- size_t best_size = 0; -- -- bck = bin_at (av, victim_index); -- fwd = bck->fd; -- -- while (fwd != bck) -- { -- int extra; -- -- if (chunksize (fwd) < nb) -- break; -- extra = chunk_ok_for_memalign (fwd, alignment, nb); -- if (extra > 0 -- && (extra <= best_size || best == NULL)) -- { -- best = fwd; -- best_size = extra; -- } -- -- fwd = fwd->fd; -- } -- victim = best; -- -- if (victim != NULL) -- { -- unlink_chunk (av, victim); -- break; -- } -- } -- -- if (victim != NULL) -- break; -- } -- } -- -- /* Strategy: find a spot within that chunk that meets the alignment -- request, and then possibly free the leading and trailing space. -- This strategy is incredibly costly and can lead to external -- fragmentation if header and footer chunks are unused. */ -- -- if (victim != NULL) -- { -- p = victim; -- m = chunk2mem (p); -- set_inuse (p); -- if (av != &main_arena) -- set_non_main_arena (p); -- } -- else -- { -- /* Call malloc with worst case padding to hit alignment. */ -- -- m = (char *) (_int_malloc (av, nb + alignment + MINSIZE)); -- -- if (m == 0) -- return 0; /* propagate failure */ -- -- p = mem2chunk (m); -- } -+ p = mem2chunk (m); - - if ((((unsigned long) (m)) % alignment) != 0) /* misaligned */ - { -diff --git a/malloc/tst-memalign-2.c b/malloc/tst-memalign-2.c -index f229283dbf..ecd6fa249e 100644 ---- a/malloc/tst-memalign-2.c -+++ b/malloc/tst-memalign-2.c -@@ -86,7 +86,8 @@ do_test (void) - TEST_VERIFY (tcache_allocs[i].ptr1 == tcache_allocs[i].ptr2); - } - -- /* Test for non-head tcache hits. */ -+ /* Test for non-head tcache hits. This exercises the memalign -+ scanning code to find matching allocations. */ - for (i = 0; i < array_length (ptr); ++ i) - { - if (i == 4) -@@ -113,7 +114,9 @@ do_test (void) - free (p); - TEST_VERIFY (count > 0); - -- /* Large bins test. */ -+ /* Large bins test. This verifies that the over-allocated parts -+ that memalign releases for future allocations can be reused by -+ memalign itself at least in some cases. */ - - for (i = 0; i < LN; ++ i) - { --- -2.41.0 - -From 26973f7b09c33e67f6bcbc79371796c8dd334528 Mon Sep 17 00:00:00 2001 -From: Xi Ruoyao -Date: Mon, 14 Aug 2023 11:05:18 +0800 -Subject: [PATCH 3/3] malloc: Remove unused functions and variables - -Remove unused chunk_ok_for_memalign function and unused local variables -in _int_free. - -Signed-off-by: Xi Ruoyao ---- - malloc/malloc.c | 42 ------------------------------------------ - 1 file changed, 42 deletions(-) - -diff --git a/malloc/malloc.c b/malloc/malloc.c -index 9c2cab7a59..d0bbbf3710 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -4488,12 +4488,6 @@ _int_free (mstate av, mchunkptr p, int have_lock) - { - INTERNAL_SIZE_T size; /* its size */ - mfastbinptr *fb; /* associated fastbin */ -- mchunkptr nextchunk; /* next contiguous chunk */ -- INTERNAL_SIZE_T nextsize; /* its size */ -- int nextinuse; /* true if nextchunk is used */ -- INTERNAL_SIZE_T prevsize; /* size of previous contiguous chunk */ -- mchunkptr bck; /* misc temp for linking */ -- mchunkptr fwd; /* misc temp for linking */ - - size = chunksize (p); - -@@ -5032,42 +5026,6 @@ _int_realloc (mstate av, mchunkptr oldp, INTERNAL_SIZE_T oldsize, - ------------------------------ memalign ------------------------------ - */ - --/* Returns 0 if the chunk is not and does not contain the requested -- aligned sub-chunk, else returns the amount of "waste" from -- trimming. NB is the *chunk* byte size, not the user byte -- size. */ --static size_t --chunk_ok_for_memalign (mchunkptr p, size_t alignment, size_t nb) --{ -- void *m = chunk2mem (p); -- INTERNAL_SIZE_T size = chunksize (p); -- void *aligned_m = m; -- -- if (__glibc_unlikely (misaligned_chunk (p))) -- malloc_printerr ("_int_memalign(): unaligned chunk detected"); -- -- aligned_m = PTR_ALIGN_UP (m, alignment); -- -- INTERNAL_SIZE_T front_extra = (intptr_t) aligned_m - (intptr_t) m; -- -- /* We can't trim off the front as it's too small. */ -- if (front_extra > 0 && front_extra < MINSIZE) -- return 0; -- -- /* If it's a perfect fit, it's an exception to the return value rule -- (we would return zero waste, which looks like "not usable"), so -- handle it here by returning a small non-zero value instead. */ -- if (size == nb && front_extra == 0) -- return 1; -- -- /* If the block we need fits in the chunk, calculate total waste. */ -- if (size > nb + front_extra) -- return size - nb; -- -- /* Can't use this chunk. */ -- return 0; --} -- - /* BYTES is user requested bytes, not requested chunksize bytes. */ - static void * - _int_memalign (mstate av, size_t alignment, size_t bytes) --- -2.41.0 - diff --git a/SPECS/glibc/glibc.signatures.json b/SPECS/glibc/glibc.signatures.json deleted file mode 100644 index e6dc92731d..0000000000 --- a/SPECS/glibc/glibc.signatures.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Signatures": { - "glibc-2.38.tar.xz": "fb82998998b2b29965467bc1b69d152e9c307d2cf301c9eafb4555b770ef3fd2", - "locale-gen.conf": "94182ce116a42e38ce783d2a867dca1eaf4d6a347d4bff9aac4d6e61cbbfc8f4", - "locale-gen.sh": "df7169cb9f126875e0a57a4700261e16e6eba2a98312d739f972377150ba9964" - } -} diff --git a/SPECS/glibc/glibc.spec b/SPECS/glibc/glibc.spec deleted file mode 100644 index 7a72b87d9f..0000000000 --- a/SPECS/glibc/glibc.spec +++ /dev/null @@ -1,613 +0,0 @@ -%global security_hardening nonow -%define glibc_target_cpu %{_build} - -# Don't depend on bash by default -%define __requires_exclude ^/(bin|usr/bin).*$ - -# Enable frame pointers for package -%define _include_frame_pointers 1 - -Summary: Main C library -Name: glibc -Version: 2.38 -Release: 12%{?dist} -License: BSD AND GPLv2+ AND Inner-Net AND ISC AND LGPLv2+ AND MIT -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Applications/System -URL: https://www.gnu.org/software/libc -Source0: https://ftp.gnu.org/gnu/glibc/%{name}-%{version}.tar.xz -Source1: locale-gen.sh -Source2: locale-gen.conf -Patch0: https://www.linuxfromscratch.org/patches/downloads/glibc/glibc-2.38-fhs-1.patch -# Only applicable on ARMv7 targets. -Patch1: CVE-2020-6096.nopatch -# Only applicable on x32 targets. -Patch2: CVE-2019-6488.nopatch -# Only applicable on PowerPC targets. -Patch3: CVE-2020-1751.nopatch -# Marked by upstream/Ubuntu/Red Hat as not a security bug, no fix available -# Rationale: Exploit requires crafted pattern in regex compiler meant only for trusted content -Patch4: CVE-2018-20796.nopatch -Patch5: https://www.linuxfromscratch.org/patches/downloads/glibc/glibc-2.38-memalign_fix-1.patch -Patch6: CVE-2023-4911.patch -Patch7: CVE-2023-6246.patch -Patch8: CVE-2023-6779.patch -Patch9: CVE-2023-6780.patch -# Upstream backport for fixing: nscd fails to build with cleanup handler if built with -fexceptions -Patch10: nscd-Do-not-rebuild-getaddrinfo-bug-30709.patch -Patch11: glibc-2.34_pthread_cond_wait.patch -Patch12: CVE-2023-4527.patch -Patch13: CVE-2023-4806.patch -Patch14: CVE-2023-5156.patch -Patch15: CVE-2024-33599.patch -Patch16: CVE-2024-33600.patch -# Patch of CVE-2024-33601 fixes CVE-2024-33602 also -Patch17: CVE-2024-33601.patch -Patch18: CVE-2025-0395.patch - -# Patches for testing -Patch100: 0001-Remove-Wno-format-cflag-from-tests.patch - -BuildRequires: bison -BuildRequires: gawk -BuildRequires: gettext -BuildRequires: kernel-headers -BuildRequires: texinfo -Requires: filesystem -Provides: %{name}-common = %{version}-%{release} -Provides: /sbin/ldconfig -Provides: nss_db = %{version}-%{release} -Provides: rtld(GNU_HASH) -ExcludeArch: armv7 ppc i386 i686 - -%description -This library provides the basic routines for allocating memory, -searching directories, opening and closing files, reading and -writing files, string handling, pattern matching, arithmetic, -and so on. - -%package devel -Summary: Header files for glibc -Group: Applications/System -Requires: %{name} = %{version}-%{release} -Provides: %{name}-headers = %{version}-%{release} - -%description devel -These are the header files of glibc. - -%package static -Summary: Static glibc library and runtimes -Group: Applications/System -Requires: %{name}-devel = %{version}-%{release} -Provides: %{name}-static%{?_isa} = %{version}-%{release} - -%description static -These are the static artefacts for glibc. - -%package lang -Summary: Additional language files for glibc -Group: Applications/System -Requires: %{name} = %{version}-%{release} - -%description lang -These are the additional language files of glibc. - -%package i18n -Summary: Additional internationalization files for glibc -Group: Applications/System -Requires: %{name} = %{version}-%{release} -Provides: %{name}-locale-source = %{version}-%{release} - -%description i18n -These are the additional internationalization files of glibc. - -%package iconv -Summary: gconv modules for glibc -Group: Applications/System -Requires: %{name} = %{version}-%{release} - -%description iconv -These are gconv modules for iconv(). - -%package tools -Summary: tools for glibc -Group: Applications/System -Requires: %{name} = %{version}-%{release} - -%description tools -Extra tools for glibc. - -%package nscd -Summary: Name Service Cache Daemon -Group: Applications/System -Requires: %{name} = %{version}-%{release} - -%description nscd -Name Service Cache Daemon - -%package locales-all -Summary: Locale Data for Localized Programs -Group: Applications/System -Requires: %{name} = %{version}-%{release} -Requires: %{name}-i18n = %{version}-%{release} -Requires: %{name}-lang = %{version}-%{release} - -%description locales-all -Locale data for the internationalization features of glibc - -%prep -%autosetup -p1 -sed -i 's/\\$$(pwd)/`pwd`/' timezone/Makefile -install -vdm 755 %{_builddir}/%{name}-build -# do not try to explicitly provide GLIBC_PRIVATE versioned libraries -%define __find_provides %{_builddir}/%{name}-%{version}/find_provides.sh -%define __find_requires %{_builddir}/%{name}-%{version}/find_requires.sh - -# create find-provides and find-requires script in order to ignore GLIBC_PRIVATE errors -cat > find_provides.sh << _EOF -#! /bin/sh -if [ -d /tools ]; then -/tools/lib/rpm/find-provides | grep -v GLIBC_PRIVATE -else -%{_libdir}/rpm/find-provides | grep -v GLIBC_PRIVATE -fi -exit 0 -_EOF -chmod +x find_provides.sh - -cat > find_requires.sh << _EOF -#! /bin/sh -if [ -d /tools ]; then -/tools/lib/rpm/find-requires %{buildroot} %{glibc_target_cpu} | grep -v GLIBC_PRIVATE -else -%{_libdir}/rpm/find-requires %{buildroot} %{glibc_target_cpu} | grep -v GLIBC_PRIVATE -fi -_EOF -chmod +x find_requires.sh -#___EOF - -%build -CFLAGS="`echo " %{build_cflags} " | sed 's/-Wp,-D_FORTIFY_SOURCE=2//'`" -CXXFLAGS="`echo " %{build_cxxflags} " | sed 's/-Wp,-D_FORTIFY_SOURCE=2//'`" -export CFLAGS -export CXXFLAGS - -cd %{_builddir}/%{name}-build -echo "rootsbindir=/usr/sbin" > configparms -../%{name}-%{version}/configure \ - --prefix=%{_prefix} \ - --disable-profile \ - --disable-werror \ - --enable-kernel=4.14 \ - --enable-bind-now \ - --enable-static-pie \ -%ifarch x86_64 - --enable-cet \ -%endif - --disable-silent-rules \ - libc_cv_slibdir=/usr/lib - -make %{?_smp_mflags} - -%install -# Do not remove static libs -pushd %{_builddir}/glibc-build -# Create directories -make install_root=%{buildroot} install -install -vdm 755 %{buildroot}%{_sysconfdir}/ld.so.conf.d -install -vdm 755 %{buildroot}%{_var}/cache/nscd -install -vdm 755 %{buildroot}%{_libdir}/locale -cp -v ../%{name}-%{version}/nscd/nscd.conf %{buildroot}%{_sysconfdir}/nscd.conf -# Install locale generation script and config file -cp -v %{SOURCE2} %{buildroot}%{_sysconfdir} -cp -v %{SOURCE1} %{buildroot}%{_sbindir} -# Remove unwanted cruft -rm -rf %{buildroot}%{_infodir} -# Install configuration files - -# Spaces should not be used in nsswitch.conf in the begining of new line -# Only tab should be used as it expects the same in source code. -# Otherwise "altfiles" will not be added. which may cause dbus.service failure -cat > %{buildroot}%{_sysconfdir}/nsswitch.conf <<- "EOF" -# Begin /etc/nsswitch.conf - - passwd: files - group: files - shadow: files - - hosts: files dns - networks: files - - protocols: files - services: files - ethers: files - rpc: files -# End /etc/nsswitch.conf -EOF -cat > %{buildroot}%{_sysconfdir}/ld.so.conf <<- "EOF" -# Begin /etc/ld.so.conf - %{_prefix}/local/lib - /opt/lib - include %{_sysconfdir}/ld.so.conf.d/*.conf -EOF -popd -%find_lang %{name} --all-name - -# Generate all locales -pushd %{_builddir}/%{name}-build -# Install locales -make %{?_smp_mflags} install_root=%{buildroot} localedata/install-locale-files - -# To reduce footprint of localedata -# hardlink identical locale files together -hardlink -vc %{buildroot}%{_libdir}/locale -popd - -# to do not depend on /bin/bash -sed -i 's@#! /bin/bash@#! /bin/sh@' %{buildroot}%{_bindir}/ldd -# Fix a hard coded path to the executable loader in the ldd script -sed '/RTLDLIST=/s@/usr@@g' -i %{buildroot}%{_bindir}/ldd -sed -i 's@#!/bin/bash@#!/bin/sh@' %{buildroot}%{_bindir}/tzselect - -# Determine which static libs are needed in `glibc-devel` - the rest will be put -# into `glibc-static`. We need to keep the static shims for function that's now -# in `libc.so` (since 2.34 - see https://developers.redhat.com/articles/2021/12/17/why-glibc-234-removed-libpthread) -# and the "statically linked bit" of `libc.so` (called `libc_nonshared.a`) -static_libs_in_devel_pattern="lib\(c_nonshared\|pthread\|dl\|rt\|g\|util\|mcheck\).a" -ls -1 %{buildroot}%{_libdir}/*.a | grep -e "$static_libs_in_devel_pattern" | sed "s:^%{buildroot}::g" > devel.filelist -ls -1 %{buildroot}%{_libdir}/*.a | grep -v -e "$static_libs_in_devel_pattern" | sed "s:^%{buildroot}::g" > static.filelist - -%check -cd %{_builddir}/glibc-build - -# Results have varied based on the environment the tests are being built -# Summary of test results in local VM: -# 3 FAIL : nptl/tst-cancel1, io/tst-lchmod, nptl/tst-mutex10 -# 5040 PASS -# 152 UNSUPPORTED -# 12 XFAIL -# 8 XPASS -# Summary of test results in pipeline (this has shown varying results): -# 7 FAIL -# 5110 PASS -# 79 UNSUPPORTED -# 12 XFAIL -# 8 XPASS -make %{?_smp_mflags} check ||: -n=0 -# expected failures in local VM -grep "^FAIL: nptl/tst-cancel1" tests.sum >/dev/null && n=$((n+1)) ||: -grep "^FAIL: io/tst-lchmod" tests.sum >/dev/null && n=$((n+1)) ||: -grep "^FAIL: nptl/tst-mutex10" tests.sum >/dev/null && n=$((n+1)) ||: -[ `grep ^FAIL tests.sum | wc -l` -eq $n ] - -%post -p /sbin/ldconfig -%postun -p /sbin/ldconfig - -%files -%defattr(-,root,root) -%license COPYING COPYING.LIB LICENSES -%{_libdir}/locale/en_US.utf8 -%{_libdir}/locale/C.utf8 -%dir %{_sysconfdir}/ld.so.conf.d -%config(noreplace) %{_sysconfdir}/nsswitch.conf -%config(noreplace) %{_sysconfdir}/ld.so.conf -%config(noreplace) %{_sysconfdir}/rpc -%config(missingok,noreplace) %{_sysconfdir}/ld.so.cache -%config %{_sysconfdir}/locale-gen.conf -%ifarch aarch64 -/usr/lib/ld-linux-aarch64.so.1 -%endif -#%%exclude /lib64/libpcprofile.so -%{_libdir}/*.so* -%{_sbindir}/ldconfig -%{_sbindir}/locale-gen.sh - -#%%{_sbindir}/zdump -%{_sbindir}/zic -%{_sbindir}/iconvconfig -%{_bindir}/* -%{_libexecdir}/* -%{_datadir}/i18n/charmaps/UTF-8.gz -%{_datadir}/i18n/charmaps/ISO-8859-1.gz -%{_datadir}/i18n/locales/en_US -%{_datarootdir}/locale/locale.alias -%exclude %{_localstatedir}/lib/nss_db/Makefile -%exclude %{_bindir}/mtrace -%exclude %{_bindir}/pcprofiledump -%exclude %{_bindir}/xtrace - -%files iconv -%defattr(-,root,root) -%{_libdir}/gconv/* - -%files tools -%defattr(-,root,root) -%{_bindir}/mtrace -%{_bindir}/pcprofiledump -%{_bindir}/xtrace -%{_sbindir}/sln -%{_libdir}/audit/* -#/lib64/libpcprofile.so - -%files nscd -%defattr(-,root,root) -%config(noreplace) %{_sysconfdir}/nscd.conf -%{_sbindir}/nscd -%dir %{_localstatedir}/cache/nscd - -%files i18n -%defattr(-,root,root) -%{_datadir}/i18n/charmaps/*.gz -%{_datadir}/i18n/locales/* - -%files devel -f devel.filelist -%defattr(-,root,root) -# TODO: Excluding for now to remove dependency on PERL -# /usr/bin/mtrace -# C Runtime files for `-pie`, `-no-pie` and profiled executables as well as for shared libs -%{_libdir}/{,g,M,S}crt1.o -# C Runtime files needed for all targets -%{_libdir}/crt{i,n}.o -%{_includedir}/* - -%files static -f static.filelist -%defattr(-,root,root) -# C Runtime files for `-static-pie` and profiled `-static-pie` -%{_libdir}/{r,gr}crt1.o - -%files -f %{name}.lang lang -%defattr(-,root,root) - -%files locales-all -%defattr(-,root,root) -%{_libdir}/locale/* -%exclude %{_libdir}/locale/en_US.utf8 -%exclude %{_libdir}/locale/C.utf8 - -%changelog -* Mon Aug 25 2025 Andrew Phelps - 2.38-12 -- Bump to rebuild with build-id fix from toolchain gcc - -* Thu May 22 2025 Kanishk Bansal - 2.38-11 -- Patch CVE-2023-4527, CVE-2023-4806, CVE-2024-33599, CVE-2024-33600, CVE-2024-33601, CVE-2025-0395, CVE-2025-4802 -- Fix CVE-2023-5156 - -* Mon May 12 2025 Andrew Phelps - 2.38-10 -- Add glibc-2.34_pthread_cond_wait.patch - -* Wed Feb 19 2025 Chris Co - 2.38-9 -- Re-enable nscd build and packaging - -* Mon Aug 26 2024 Rachel Menge - 2.38-8 -- Enable check section for glibc - -* Wed Aug 21 2024 Chris Co - 2.38-7 -- Fix syslog failing to print issue - -* Mon Jun 17 2024 Nicolas Guibourge - 2.38-6 -- Address CVE-2023-4911, CVE-2023-5156, CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 - -* Wed May 22 2024 Suresh Babu Chalamalasetty - 2.38-5 -- Generate and provide glibc all locales in a sub-package - -* Fri May 10 2024 Chris Co - 2.38-4 -- Enable frame pointers compiler flag - -* Mon Mar 11 2024 Dan Streetman - 2.38-3 -- provide C.utf8 locale - -* Tue Feb 27 2024 Dan Streetman - 2.38-2 -- Do NOT rename en_US.utf8 to en_US.UTF-8 (glibc will reduce UTF-8 to utf8, but NOT utf8 to UTF-8) - -* Thu Nov 02 2023 Andrew Phelps - 2.38-1 -- Upgrade to version 2.38 - -* Wed Oct 04 2023 Minghe Ren - 2.35-6 -- Add patches for CVE-2023-4806 and CVE-2023-5156 - -* Tue Oct 03 2023 Mandeep Plaha - 2.35-5 -- Patch CVE-2023-4911 - -* Fri Jun 30 2023 Andrew Phelps - 2.35-4 -- Restore glibc-debuginfo package - -* Fri Sep 30 2022 Andy Caldwell - 2.35-3 -- Split `glibc-static` into an actual package containing static libraries and runtime - -* Mon May 02 2022 Sriram Nambakam - 2.35-2 -- To remove leading spaces in /etc/nsswitch.conf, use tabs instead of spaces - -* Tue Apr 12 2022 Andrew Phelps - 2.35-1 -- Upgrade to version 2.35 -- Cleanup old patch files - -* Wed Mar 02 2022 Andy Caldwell - 2.34-3 -- Add support for building `-static-pie` binaries against `glibc` -- Add additional BuildRequires - -* Thu Nov 04 2021 Pawel Winogrodzki - 2.34-2 -- Adding missing BR on "perl(File::Find)". -- Fixing licensing information. -- Removing redundant 'Provides'. - -* Thu Oct 14 2021 Andrew Phelps - 2.34-1 -- Upgrade to version 2.34 -- License verified - -* Fri Sep 24 2021 Pawel Winogrodzki - 2.28-19 -- Adding 'Provides' for 'nss_db'. - -* Thu Jul 29 2021 Jon Slobodzian 2.28-18 -- Dash Rolled for Merge from 1.0 branch - -* Fri Apr 02 2021 Thomas Crain - 2.28-17 -- Merge the following releases from 1.0 to dev branch -- lihl@microsoft.com, 2.28-13: Added patch to resolve CVE-2019-7309, Used autosteup -- thcrain@microsoft.com, 2.28-14: Patch CVE-2019-19126 -- mamalisz@microsoft.com, 2.28-15: Exclude binaries(such as bash) from requires list. -- nicolasg@microsoft.com, 2.28-16: Patch CVE-2019-25013 -- thcrain@microsoft.com, 2.28-17: Patch CVE-2021-3326 -- nisamson@microsoft.com, 2.28-18: Patch CVE-2021-27618 - -* Thu Mar 25 2021 Henry Li - 2.28-16 -- Provides glibc-locale-source from glibc-i18n -- Add back exluded files to glibc-i18n - -* Fri Feb 05 2021 Joe Schmitt - 2.28-15 -- Replace incorrect %%{_lib} usage with %%{_libdir} - -* Thu Dec 10 2020 Joe Schmitt - 2.28-14 -- Provide isa version of glibc-static. - -* Mon Sep 28 2020 Ruying Chen - 2.28-13 -- Move some tools from glibc-tools and glibc-iconv to glibc and provide glibc-common -- Provide glibc-static and glibc-headers under glibc-devel - -* Wed Jul 29 2020 Thomas Crain - 2.28-12 -- Ignore CVE-2018-20796, as it is not a security issue - -* Wed Jul 29 2020 Emre Girgin - 2.28-11 -- Disable the debuginfo package for glibc, and use unstripped binaries instead. - -* Fri Jun 26 2020 Ruying Chen - 2.28-10 -- Added provides for binary capability. - -* Thu Jun 11 2020 Henry Beberman - 2.28-9 -- Disable -Wp,-D_FORTIFY_SOURCE=2 to build with hardened cflags. - -* Tue May 19 2020 Emre Girgin - 2.28-8 -- Ignore CVE-2019-6488, CVE-2020-1751, CVE-2020-6096 as they don't apply to aarch64 or x86_64. - -* Sat May 09 2020 Nick Samson - 2.28-7 -- Added %%license line automatically - -* Fri Mar 20 2020 Andrew Phelps - 2.28-6 -- Configure with --disable-werror. - -* Mon Dec 02 2019 Saravanan Somasundaram - 2.28-5 -- Initial CBL-Mariner import from Photon (license: Apache2). - -* Fri Jul 12 2019 Ankit Jain - 2.28-4 -- Replaced spaces with tab in nsswitch.conf file - -* Fri Mar 08 2019 Alexey Makhalov - 2.28-3 -- Fix CVE-2019-9169 - -* Tue Jan 22 2019 Anish Swaminathan - 2.28-2 -- Fix CVE-2018-19591 - -* Tue Aug 28 2018 Alexey Makhalov - 2.28-1 -- Version update. Disable obsolete rpc (use libtirpc) and nsl. - -* Tue Jan 23 2018 Xiaolin Li - 2.26-10 -- Fix CVE-2018-1000001 and CVE-2018-6485 - -* Mon Jan 08 2018 Xiaolin Li - 2.26-9 -- Fix CVE-2017-16997 - -* Thu Dec 21 2017 Xiaolin Li - 2.26-8 -- Fix CVE-2017-17426 - -* Tue Nov 14 2017 Alexey Makhalov - 2.26-7 -- Aarch64 support - -* Wed Oct 25 2017 Xiaolin Li - 2.26-6 -- Fix CVE-2017-15670 and CVE-2017-15804 - -* Tue Oct 10 2017 Alexey Makhalov - 2.26-5 -- Compile out tcache. - -* Fri Sep 15 2017 Bo Gan - 2.26-4 -- exclude tst-eintr1 per official wiki recommendation. - -* Tue Sep 12 2017 Alexey Makhalov - 2.26-3 -- Fix makecheck for run in docker. - -* Tue Aug 29 2017 Alexey Makhalov - 2.26-2 -- Fix tunables setter. -- Add malloc arena fix. -- Fix makecheck. - -* Tue Aug 15 2017 Alexey Makhalov - 2.26-1 -- Version update - -* Tue Aug 08 2017 Anish Swaminathan - 2.25-4 -- Apply fix for CVE-2017-1000366 - -* Thu May 4 2017 Bo Gan - 2.25-3 -- Remove bash dependency in post/postun script - -* Fri Apr 21 2017 Alexey Makhalov - 2.25-2 -- Added -iconv -tools and -nscd subpackages - -* Wed Mar 22 2017 Alexey Makhalov - 2.25-1 -- Version update - -* Wed Dec 14 2016 Alexey Makhalov - 2.24-1 -- Version update - -* Wed Nov 23 2016 Alexey Makhalov - 2.22-13 -- Install en_US.UTF-8 locale by default - -* Wed Nov 16 2016 Alexey Makhalov - 2.22-12 -- Added i18n subpackage - -* Tue Oct 25 2016 Alexey Makhalov - 2.22-11 -- Workaround for build failure with "out of memory" message - -* Wed Sep 28 2016 Alexey Makhalov - 2.22-10 -- Added pthread_create-fix-use-after-free.patch - -* Tue Jun 14 2016 Divya Thaluru - 2.22-9 -- Enabling rpm debug package and stripping the libraries - -* Tue May 24 2016 Priyesh Padmavilasom - 2.22-8 -- GA - Bump release of all rpms - -* Mon May 23 2016 Divya Thaluru - 2.22-7 -- Added patch for CVE-2014-9761 - -* Mon Mar 21 2016 Alexey Makhalov - 2.22-6 -- Security hardening: nonow - -* Fri Mar 18 2016 Anish Swaminathan - 2.22-5 -- Change conf file qualifiers - -* Fri Mar 11 2016 Priyesh Padmavilasom - 2.22-4 -- Added patch for res_qeury assertion with bad dns config -- Details: https://sourceware.org/bugzilla/show_bug.cgi?id=19791 - -* Tue Feb 16 2016 Anish Swaminathan - 2.22-3 -- Added patch for CVE-2015-7547 - -* Mon Feb 08 2016 Anish Swaminathan - 2.22-2 -- Added patch for bindresvport blacklist - -* Tue Jan 12 2016 Xiaolin Li - 2.22-1 -- Updated to version 2.22 - -* Tue Dec 1 2015 Divya Thaluru - 2.19-8 -- Disabling rpm debug package and stripping the libraries - -* Wed Nov 18 2015 Divya Thaluru - 2.19-7 -- Adding patch to close nss files database - -* Tue Nov 10 2015 Xiaolin Li - 2.19-6 -- Handled locale files with macro find_lang - -* Wed Aug 05 2015 Kumar Kaushik - 2.19-5 -- Adding postun section for ldconfig. - -* Tue Jul 28 2015 Alexey Makhalov - 2.19-4 -- Support glibc building against current rpm version. - -* Thu Jul 23 2015 Divya Thaluru - 2.19-3 -- Packing locale-gen scripts - -* Mon May 18 2015 Touseef Liaqat - 2.19-2 -- Update according to UsrMove. - -* Wed Nov 5 2014 Divya Thaluru - 2.19-1 -- Initial build. First version diff --git a/SPECS/glibc/locale-gen.conf b/SPECS/glibc/locale-gen.conf deleted file mode 100644 index 04ed0bbca8..0000000000 --- a/SPECS/glibc/locale-gen.conf +++ /dev/null @@ -1,26 +0,0 @@ - -# Configuration file for locale-gen -# -# lists of locales that are to be generated by the locale-gen command. -# -# Each line is of the form: -# -# -# -# where is one of the locales given in /usr/share/i18n/locales -# and is one of the character sets listed in /usr/share/i18n/charmaps -# -# Examples: -# en_US ISO-8859-1 -# en_US.UTF-8 UTF-8 -# de_DE ISO-8859-1 -# de_DE@euro ISO-8859-15 -# -# The locale-gen command will generate all the locales, -# placing them in /usr/lib/locale. -# -# A list of supported locales is included in this file. -# Uncomment the ones you need. -# -en_US ISO-8859-1 -en_US.UTF-8 UTF-8 diff --git a/SPECS/glibc/locale-gen.sh b/SPECS/glibc/locale-gen.sh deleted file mode 100755 index a134aba6b7..0000000000 --- a/SPECS/glibc/locale-gen.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -set -e -LOCALEGEN=/etc/locale-gen.conf -LOCALES=/usr/share/i18n/locales -if [ -n "$POSIXLY_CORRECT" ]; then - unset POSIXLY_CORRECT -fi -[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0; -# Remove all old locale dir and locale-archive before generating new -# locale data. -rm -rf /usr/lib/locale/* || true -umask 022 -is_entry_ok() { - if [ -n "$locale" -a -n "$charset" ] ; then - true - else - echo "error: Bad entry '$locale $charset'" - false - fi -} -echo "Generating locales..." -while read locale charset; do \ - case $locale in \#*) continue;; "") continue;; esac; \ - is_entry_ok || continue - echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \ - echo -n ".$charset"; \ - echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \ - echo -n '...'; \ - if [ -f $LOCALES/$locale ]; then input=$locale; else \ - input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \ - localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale; \ - echo ' done'; \ -done < $LOCALEGEN -echo "Generation complete." \ No newline at end of file diff --git a/SPECS/glibc/nscd-Do-not-rebuild-getaddrinfo-bug-30709.patch b/SPECS/glibc/nscd-Do-not-rebuild-getaddrinfo-bug-30709.patch deleted file mode 100644 index f13968cd77..0000000000 --- a/SPECS/glibc/nscd-Do-not-rebuild-getaddrinfo-bug-30709.patch +++ /dev/null @@ -1,184 +0,0 @@ -From 039ff51ac7e02db1cfc0c23e38ac7bfbb00221d1 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Fri, 11 Aug 2023 10:10:16 +0200 -Subject: [PATCH] nscd: Do not rebuild getaddrinfo (bug 30709) - -The nscd daemon caches hosts data from NSS modules verbatim, without -filtering protocol families or sorting them (otherwise separate caches -would be needed for certain ai_flags combinations). The cache -implementation is complete separate from the getaddrinfo code. This -means that rebuilding getaddrinfo is not needed. The only function -actually used is __bump_nl_timestamp from check_pf.c, and this change -moves it into nscd/connections.c. - -Tested on x86_64-linux-gnu with -fexceptions, built with -build-many-glibcs.py. I also backported this patch into a distribution -that still supports nscd and verified manually that caching still works. - -Reviewed-by: Siddhesh Poyarekar ---- - include/ifaddrs.h | 4 --- - inet/check_pf.c | 9 ------ - nscd/Makefile | 2 +- - nscd/connections.c | 11 +++++++ - nscd/gai.c | 50 ------------------------------ - sysdeps/unix/sysv/linux/check_pf.c | 17 +--------- - 6 files changed, 13 insertions(+), 80 deletions(-) - delete mode 100644 nscd/gai.c - -diff --git a/include/ifaddrs.h b/include/ifaddrs.h -index 416118f1b3..19a3afb19f 100644 ---- a/include/ifaddrs.h -+++ b/include/ifaddrs.h -@@ -34,9 +34,5 @@ extern void __check_native (uint32_t a1_index, int *a1_native, - uint32_t a2_index, int *a2_native) - attribute_hidden; - --#if IS_IN (nscd) --extern uint32_t __bump_nl_timestamp (void) attribute_hidden; --#endif -- - # endif /* !_ISOMAC */ - #endif /* ifaddrs.h */ -diff --git a/inet/check_pf.c b/inet/check_pf.c -index 5310c99121..6d1475920f 100644 ---- a/inet/check_pf.c -+++ b/inet/check_pf.c -@@ -60,12 +60,3 @@ __free_in6ai (struct in6addrinfo *in6ai) - { - /* Nothing to do. */ - } -- -- --#if IS_IN (nscd) --uint32_t --__bump_nl_timestamp (void) --{ -- return 0; --} --#endif -diff --git a/nscd/Makefile b/nscd/Makefile -index 2a0489f4cf..16b6460ee9 100644 ---- a/nscd/Makefile -+++ b/nscd/Makefile -@@ -35,7 +35,7 @@ nscd-modules := nscd connections pwdcache getpwnam_r getpwuid_r grpcache \ - getgrnam_r getgrgid_r hstcache gethstbyad_r gethstbynm3_r \ - getsrvbynm_r getsrvbypt_r servicescache \ - dbg_log nscd_conf nscd_stat cache mem nscd_setup_thread \ -- xmalloc xstrdup aicache initgrcache gai res_hconf \ -+ xmalloc xstrdup aicache initgrcache res_hconf \ - netgroupcache cachedumper - - ifeq ($(build-nscd)$(have-thread-library),yesyes) -diff --git a/nscd/connections.c b/nscd/connections.c -index a405a44a9b..15693e5090 100644 ---- a/nscd/connections.c -+++ b/nscd/connections.c -@@ -256,6 +256,17 @@ int inotify_fd = -1; - #ifdef HAVE_NETLINK - /* Descriptor for netlink status updates. */ - static int nl_status_fd = -1; -+ -+static uint32_t -+__bump_nl_timestamp (void) -+{ -+ static uint32_t nl_timestamp; -+ -+ if (atomic_fetch_add_relaxed (&nl_timestamp, 1) + 1 == 0) -+ atomic_fetch_add_relaxed (&nl_timestamp, 1); -+ -+ return nl_timestamp; -+} - #endif - - /* Number of times clients had to wait. */ -diff --git a/nscd/gai.c b/nscd/gai.c -deleted file mode 100644 -index e29f3fe583..0000000000 ---- a/nscd/gai.c -+++ /dev/null -@@ -1,50 +0,0 @@ --/* Copyright (C) 2004-2023 Free Software Foundation, Inc. -- This file is part of the GNU C Library. -- -- 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; version 2 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, see . */ -- --#include --#include -- --/* This file uses the getaddrinfo code but it compiles it without NSCD -- support. We just need a few symbol renames. */ --#define __ioctl ioctl --#define __getsockname getsockname --#define __socket socket --#define __recvmsg recvmsg --#define __bind bind --#define __sendto sendto --#define __strchrnul strchrnul --#define __getline getline --#define __qsort_r qsort_r --/* nscd uses 1MB or 2MB thread stacks. */ --#define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF) --#define __getifaddrs getifaddrs --#define __freeifaddrs freeifaddrs --#undef __fstat64 --#define __fstat64 fstat64 --#undef __stat64 --#define __stat64 stat64 -- --/* We are nscd, so we don't want to be talking to ourselves. */ --#undef USE_NSCD -- --#include -- --/* Support code. */ --#include --#include -- --/* Some variables normally defined in libc. */ --nss_action_list __nss_hosts_database attribute_hidden; -diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c -index 2b0b8b6368..3aa6a00348 100644 ---- a/sysdeps/unix/sysv/linux/check_pf.c -+++ b/sysdeps/unix/sysv/linux/check_pf.c -@@ -66,25 +66,10 @@ static struct cached_data *cache; - __libc_lock_define_initialized (static, lock); - - --#if IS_IN (nscd) --static uint32_t nl_timestamp; -- --uint32_t --__bump_nl_timestamp (void) --{ -- if (atomic_fetch_add_relaxed (&nl_timestamp, 1) + 1 == 0) -- atomic_fetch_add_relaxed (&nl_timestamp, 1); -- -- return nl_timestamp; --} --#endif -- - static inline uint32_t - get_nl_timestamp (void) - { --#if IS_IN (nscd) -- return nl_timestamp; --#elif defined USE_NSCD -+#if defined USE_NSCD - return __nscd_get_nl_timestamp (); - #else - return 0; --- -2.45.2 - diff --git a/SPECS/golang/golang-1.22.signatures.json b/SPECS/golang/golang-1.22.signatures.json new file mode 100644 index 0000000000..9172f21233 --- /dev/null +++ b/SPECS/golang/golang-1.22.signatures.json @@ -0,0 +1,8 @@ +{ + "Signatures": { + "go.20230802.5.src.tar.gz": "56b9e0e0c3c13ca95d5efa6de4e7d49a9d190eca77919beff99d33cd3fa74e95", + "go.20240206.2.src.tar.gz": "7982e0011aa9ab95fd0530404060410af4ba57326d26818690f334fdcb6451cd", + "go1.22.10-20241203.4.src.tar.gz": "3a6318a0ff28798a1b1797b8d22c4f9604cae2088000c39a6875b2598ec4ab22", + "go1.4-bootstrap-20171003.tar.gz": "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52" + } +} diff --git a/SPECS/golang/golang-1.22.spec b/SPECS/golang/golang-1.22.spec new file mode 100644 index 0000000000..5535269a3c --- /dev/null +++ b/SPECS/golang/golang-1.22.spec @@ -0,0 +1,362 @@ +%global goroot %{_libdir}/golang +%global gopath %{_datadir}/gocode +%global ms_go_filename go1.22.10-20241203.4.src.tar.gz +%global ms_go_revision 1 +%ifarch aarch64 +%global gohostarch arm64 +%else +%global gohostarch amd64 +%endif +%define debug_package %{nil} +%define __strip /bin/true +# rpmbuild magic to keep from having meta dependency on libc.so.6 +%define _use_internal_dependency_generator 0 +%define __find_requires %{nil} +Summary: Go +Name: golang +Version: 1.22.10 +Release: 2%{?dist} +License: BSD-3-Clause +Vendor: Microsoft Corporation +Distribution: Azure Linux +Group: System Environment/Security +URL: https://github.com/microsoft/go +Source0: https://github.com/microsoft/go/releases/download/v%{version}-%{ms_go_revision}/%{ms_go_filename} + +# bootstrap 00, same content as https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz +Source1: https://github.com/microsoft/go/releases/download/v1.4.0-1/go1.4-bootstrap-20171003.tar.gz +Patch0: go14_bootstrap_aarch64.patch +# bootstrap 01 +Source2: https://github.com/microsoft/go/releases/download/v1.19.12-1/go.20230802.5.src.tar.gz +# bootstrap 02 +Source3: https://github.com/microsoft/go/releases/download/v1.20.14-1/go.20240206.2.src.tar.gz + +Provides: %{name} = %{version} +Provides: go = %{version}-%{release} +Provides: golang = %{version}-%{release} +Provides: msft-golang = %{version}-%{release} + +%description +Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. + +%prep +# Setup bootstrap source +tar xf %{SOURCE1} --no-same-owner +patch -Np1 --ignore-whitespace < %{PATCH0} +mv -v go go-bootstrap-00 + +tar xf %{SOURCE2} --no-same-owner +mv -v go go-bootstrap-01 + +tar xf %{SOURCE3} --no-same-owner +mv -v go go-bootstrap-02 + +%setup -q -n go + +%build +# go 1.4 bootstraps with C. +# go 1.20 bootstraps with go >= 1.17.13 +# go >= 1.22 bootstraps with go >= 1.20.14 +# +# These conditions make building the current go compiler from C a multistep +# process. Approximately once a year, the bootstrap requirement is moved +# forward, adding another step. +# +# PS: Since go compiles fairly quickly, the extra overhead is around 2-3 minutes +# on a reasonable machine. + +# Use prev bootstrap to compile next bootstrap. +function go_bootstrap() { + local bootstrap=$1 + local new_root=%{_topdir}/BUILD/go-bootstrap-${bootstrap} + ( + cd ${new_root}/src + CGO_ENABLED=0 ./make.bash + ) + # Nuke the older bootstrapper + rm -rf %{_libdir}/golang + # Install the new bootstrapper + mv -v $new_root %{_libdir}/golang + export GOROOT=%{_libdir}/golang + export GOROOT_BOOTSTRAP=%{_libdir}/golang +} + +go_bootstrap 00 +go_bootstrap 01 +go_bootstrap 02 + +# Build current go version +export GOHOSTOS=linux +export GOHOSTARCH=%{gohostarch} +export GOROOT_BOOTSTRAP=%{goroot} + +export GOROOT="`pwd`" +export GOPATH=%{gopath} +export GOROOT_FINAL=%{_bindir}/go +rm -f %{gopath}/src/runtime/*.c +( + cd src + ./make.bash --no-clean +) + +%install + +mkdir -p %{buildroot}%{_bindir} +mkdir -p %{buildroot}%{goroot} + +cp -R api bin doc lib pkg src misc VERSION go.env %{buildroot}%{goroot} + +# remove the unnecessary zoneinfo file (Go will always use the system one first) +rm -rfv %{buildroot}%{goroot}/lib/time + +# remove the doc Makefile +rm -rfv %{buildroot}%{goroot}/doc/Makefile + +# put binaries to bindir, linked to the arch we're building, +# leave the arch independent pieces in %{goroot} +mkdir -p %{buildroot}%{goroot}/bin/linux_%{gohostarch} +ln -sfv ../go %{buildroot}%{goroot}/bin/linux_%{gohostarch}/go +ln -sfv ../gofmt %{buildroot}%{goroot}/bin/linux_%{gohostarch}/gofmt +ln -sfv %{goroot}/bin/gofmt %{buildroot}%{_bindir}/gofmt +ln -sfv %{goroot}/bin/go %{buildroot}%{_bindir}/go + +# ensure these exist and are owned +mkdir -p %{buildroot}%{gopath}/src/github.com/ +mkdir -p %{buildroot}%{gopath}/src/bitbucket.org/ +mkdir -p %{buildroot}%{gopath}/src/code.google.com/p/ + +# This file is not necessary: recent Go toolsets have good defaults. +# Keep the file, but leave it blank. This makes the upgrade path very simple. +install -vdm755 %{buildroot}%{_sysconfdir}/profile.d +cat >> %{buildroot}%{_sysconfdir}/profile.d/go-exports.sh <<- "EOF" +EOF + +%post -p /sbin/ldconfig + +%postun +/sbin/ldconfig +if [ $1 -eq 0 ]; then + # This is uninstall + rm -rf /opt/go + exit 0 +fi + +%files +%defattr(-,root,root) +%license LICENSE +%exclude %{goroot}/src/*.rc +%exclude %{goroot}/include/plan9 +%{_sysconfdir}/profile.d/go-exports.sh +%{goroot}/* +%{gopath}/src +%exclude %{goroot}/src/pkg/debug/dwarf/testdata +%exclude %{goroot}/src/pkg/debug/elf/testdata +%{_bindir}/* + +%changelog +* Tue Feb 04 2025 Tobias Brick - 1.22.10-2 +- Fix post scriptlet +- Remove calls to alternatives +- Don't manually delete go-exports.sh + +* Wed Dec 04 2024 Microsoft Golang Bot - 1.22.10-1 +- Bump version to 1.22.10-1 + +* Tue Dec 03 2024 Microsoft Golang Bot - 1.22.9-1 +- Bump version to 1.22.9-2 + +* Tue Oct 08 2024 Muhammad Falak - 1.22.7-3 +- Fork out 1.22 as supported version + +* Thu Sep 26 2024 Microsoft Golang Bot - 1.22.7-2 +- Bump version to 1.22.7-3 + +* Fri Sep 06 2024 Microsoft Golang Bot - 1.22.7-1 +- Bump version to 1.22.7-1 + +* Wed Aug 07 2024 Davis Goodin - 1.22.6-1 +- Bump version to 1.22.6-1 + +* Tue Jul 02 2024 Davis Goodin - 1.22.5-1 +- Bump version to 1.22.5-1 + +* Tue Jun 04 2024 Davis Goodin - 1.22.4-1 +- Bump version to 1.22.4-1 + +* Mon May 27 2024 Davis Goodin - 1.22.3-1 +- Bump version to 1.22.3-1 + +* Wed May 08 2024 Davis Goodin - 1.21.9-2 +- Remove explicit Go env variable defaults + +* Wed Apr 03 2024 Davis Goodin - 1.21.9-1 +- Bump version to 1.21.9-1 + +* Thu Mar 21 2024 Davis Goodin - 1.21.8-1 +- Bump version to 1.21.8-1, build version to 1.21.8-2 + +* Thu Feb 22 2024 Muhammad Falak - 1.21.6-2 +- Include go.env file in GOROOT + +* Wed Jan 24 2024 Davis Goodin - 1.21.6-1 +- Bump version to 1.21.6-1 +- Switch from upstream Go to the Microsoft build of Go + +* Mon Oct 16 2023 Nan Liu - 1.20.10-1 +- Bump version to 1.20.10 to address CVE-2023-29409, CVE-2023-39318, CVE-2023-39319, CVE-2023-39323, CVE-2023-39533, CVE-2023-29406, CVE-2023-39325, CVE-2023-44487 +- Remove patches that no longer apply + +* Tue Oct 10 2023 Dan Streetman - 1.20.7-2 +- Patch CVE-2023-44487 + +* Tue Aug 15 2023 Muhammad Falak - 1.20.7-1 +- Bump version to 1.20.7 +- Introduce patch to permit requests with invalid host header + +* Tue Aug 15 2023 Muhammad Falak - 1.19.12-1 +- Auto-upgrade to 1.19.12 to address CVE-2023-29409 +- Introduce patch to permit requests with invalid header + +* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.19.11-1 +- Auto-upgrade to 1.19.11 - Fix CVE-2023-29406 + +* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.19.10-1 +- Auto-upgrade to 1.19.10 - address CVE-2023-24540, CVE-2023-29402, CVE-2023-29403, CVE-2023-29404, CVE-2023-29405 + +* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.19.8-1 +- Auto-upgrade to 1.19.8 - address CVE-2023-24534, CVE-2023-24536, CVE-2023-24537, CVE-2023-24538 + +* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.19.7-1 +- Auto-upgrade to 1.19.7 - address CVE-2023-24532 + +* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.19.6-1 +- Auto-upgrade to 1.19.6 - Address CVE-2022-41722, CVE-2022-41724, CVE-2022-41725, CVE-2022-41723 + +* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.19.5-1 +- Auto-upgrade to 1.19.5 - upgrade to latest + +* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.19.4-1 +- Auto-upgrade to 1.19.4 + +* Thu Dec 15 2022 Daniel McIlvaney - 1.18.8-2 +- Patch CVE-2022-41717 + +* Tue Nov 01 2022 Olivia Crain - 1.18.8-1 +- Upgrade to version 1.18.8 (fixes CVE-2022-41716, which only applies to Windows environments) +- Also fixes CVE-2022-2879, CVE-2022-2880, CVE-2022-41715 (fixed in 1.18.7) +- Also fixes CVE-2022-27664, CVE-2022-32190 (fixed in 1.18.6) +- Use SPDX short identifier for license tag + +* Fri Aug 19 2022 Olivia Crain - 1.18.5-1 +- Upgrade to version to fix CVE-2022-1705, CVE-2022-1962, CVE-2022-28131, + CVE-2022-30630, CVE-2022-30631, CVE-2022-30632, CVE-2022-30633, CVE-2022-30635, + CVE-2022-32148, and CVE-2022-32189 + +* Tue Jun 14 2022 Muhammad Falak - 1.18.3-1 +- Bump version to 1.18.3 to address CVE-2022-24675 & CVE-2022-28327 + +* Tue Apr 12 2022 Muhammad Falak - 1.17.8-1 +- Bump version to 1.17.8 to address CVE-2021-44716 + +* Thu Feb 17 2022 Andrew Phelps - 1.17.1-2 +- Use _topdir instead of hard-coded value /usr/src/mariner +- License verified + +* Wed Sep 15 2021 Andrew Phelps - 1.17.1-1 +- Updated to version 1.17.1 + +* Tue Jun 08 2021 Henry Beberman - 1.15.13-1 +- Updated to version 1.15.13 to fix CVE-2021-33194 and CVE-2021-31525 + +* Mon Apr 26 2021 Nicolas Guibourge - 1.15.11-1 +- Updated to version 1.15.11 to fix CVE-2021-27918 + +* Wed Feb 03 2021 Andrew Phelps - 1.15.7-1 +- Updated to version 1.15.7 to fix CVE-2021-3114 + +* Mon Nov 23 2020 Henry Beberman - 1.15.5-1 +- Updated to version 1.15.5 + +* Fri Oct 30 2020 Thomas Crain - 1.13.15-2 +- Patch CVE-2020-24553 + +* Tue Sep 08 2020 Nicolas Ontiveros - 1.13.15-1 +- Updated to version 1.13.15, which fixes CVE-2020-14039 and CVE-2020-16845. + +* Sun May 24 2020 Mateusz Malisz - 1.13.11-1 +- Updated to version 1.13.11 + +* Sat May 09 2020 Nick Samson - 1.12.5-7 +- Added %%license line automatically + +* Thu Apr 30 2020 Emre Girgin - 1.12.5-6 +- Renaming go to golang + +* Thu Apr 23 2020 Nicolas Ontiveros - 1.12.5-5 +- Fix CVE-2019-14809. + +* Fri Mar 27 2020 Andrew Phelps - 1.12.5-4 +- Support building standalone by adding go 1.4 bootstrap. + +* Thu Feb 27 2020 Henry Beberman - 1.12.5-3 +- Remove meta dependency on libc.so.6 + +* Thu Feb 6 2020 Andrew Phelps - 1.12.5-2 +- Remove ExtraBuildRequires + +* Tue Sep 03 2019 Mateusz Malisz - 1.12.5-1 +- Initial CBL-Mariner import from Photon (license: Apache2). + +* Mon Jan 21 2019 Bo Gan - 1.9.7-1 +- Update to 1.9.7 + +* Wed Oct 24 2018 Alexey Makhalov - 1.9.4-3 +- Use extra build requires + +* Mon Apr 02 2018 Dheeraj Shetty - 1.9.4-2 +- Fix for CVE-2018-7187 + +* Thu Mar 15 2018 Xiaolin Li - 1.9.4-1 +- Update to golang release v1.9.4 + +* Tue Nov 14 2017 Alexey Makhalov - 1.9.1-2 +- Aarch64 support + +* Wed Nov 01 2017 Vinay Kulkarni - 1.9.1-1 +- Update to golang release v1.9.1 + +* Wed May 31 2017 Xiaolin Li - 1.8.1-2 +- Remove mercurial from buildrequires and requires. + +* Tue Apr 11 2017 Danut Moraru - 1.8.1-1 +- Update Golang to version 1.8.1, updated patch0 + +* Wed Dec 28 2016 Xiaolin Li - 1.7.4-1 +- Updated Golang to 1.7.4. + +* Thu Oct 06 2016 ChangLee - 1.6.3-2 +- Modified %check + +* Wed Jul 27 2016 Anish Swaminathan - 1.6.3-1 +- Update Golang to version 1.6.3 - fixes CVE 2016-5386 + +* Fri Jul 8 2016 Harish Udaiya Kumar - 1.6.2-1 +- Updated the Golang to version 1.6.2 + +* Thu Jun 2 2016 Priyesh Padmavilasom - 1.4.2-5 +- Fix script syntax + +* Tue May 24 2016 Priyesh Padmavilasom - 1.4.2-4 +- GA - Bump release of all rpms + +* Thu May 05 2016 Kumar Kaushik - 1.4.2-3 +- Handling upgrade scenario pre/post/un scripts. + +* Wed Dec 09 2015 Anish Swaminathan - 1.4.2-2 +- Edit post script. + +* Mon Aug 03 2015 Vinay Kulkarni - 1.4.2-1 +- Update to golang release version 1.4.2 + +* Fri Oct 17 2014 Divya Thaluru - 1.3.3-1 +- Initial build. First version diff --git a/SPECS/golang/golang-1.25.signatures.json b/SPECS/golang/golang-1.25.signatures.json new file mode 100644 index 0000000000..c7a8882674 --- /dev/null +++ b/SPECS/golang/golang-1.25.signatures.json @@ -0,0 +1,9 @@ +{ + "Signatures": { + "go.20230802.5.src.tar.gz": "56b9e0e0c3c13ca95d5efa6de4e7d49a9d190eca77919beff99d33cd3fa74e95", + "go.20240206.2.src.tar.gz": "7982e0011aa9ab95fd0530404060410af4ba57326d26818690f334fdcb6451cd", + "go1.22.12-20250211.4.src.tar.gz": "e1cc3bff8fdf1f24843ffc9f0eaddfd344eb40fd9ca0d9ba2965165be519eeb7", + "go1.25.7-20260204.4.src.tar.gz": "8c51515b2ee63464b62681373d5342ff148491bbbcc0b5bd892d9fafc3b40145", + "go1.4-bootstrap-20171003.tar.gz": "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52" + } +} diff --git a/SPECS/golang/golang-1.25.spec b/SPECS/golang/golang-1.25.spec new file mode 100644 index 0000000000..93480f710c --- /dev/null +++ b/SPECS/golang/golang-1.25.spec @@ -0,0 +1,407 @@ +%global goroot %{_libdir}/golang +%global gopath %{_datadir}/gocode +%global ms_go_filename go1.25.7-20260204.4.src.tar.gz +%global ms_go_revision 1 +%ifarch aarch64 +%global gohostarch arm64 +%else +%global gohostarch amd64 +%endif +%define debug_package %{nil} +%define __strip /bin/true +# rpmbuild magic to keep from having meta dependency on libc.so.6 +%define _use_internal_dependency_generator 0 +%define __find_requires %{nil} +Summary: Go +Name: golang +Version: 1.25.7 +Release: 1%{?dist} +License: BSD-3-Clause +Vendor: Microsoft Corporation +Distribution: Azure Linux +Group: System Environment/Security +URL: https://github.com/microsoft/go +Source0: https://github.com/microsoft/go/releases/download/v%{version}-%{ms_go_revision}/%{ms_go_filename} + +# bootstrap 00, same content as https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz +Source1: https://github.com/microsoft/go/releases/download/v1.4.0-1/go1.4-bootstrap-20171003.tar.gz +Patch0: go14_bootstrap_aarch64.patch +# bootstrap 01 +Source2: https://github.com/microsoft/go/releases/download/v1.19.12-1/go.20230802.5.src.tar.gz +# bootstrap 02 +Source3: https://github.com/microsoft/go/releases/download/v1.20.14-1/go.20240206.2.src.tar.gz +# bootstrap 03 +Source4: https://github.com/microsoft/go/releases/download/v1.22.12-2/go1.22.12-20250211.4.src.tar.gz + +Provides: %{name} = %{version} +Provides: go = %{version}-%{release} +Provides: golang = %{version}-%{release} +Provides: msft-golang = %{version}-%{release} + +%description +Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. + +%prep +# Setup bootstrap source +tar xf %{SOURCE1} --no-same-owner +patch -Np1 --ignore-whitespace < %{PATCH0} +mv -v go go-bootstrap-00 + +tar xf %{SOURCE2} --no-same-owner +mv -v go go-bootstrap-01 + +tar xf %{SOURCE3} --no-same-owner +mv -v go go-bootstrap-02 + +tar xf %{SOURCE4} --no-same-owner +mv -v go go-bootstrap-03 + +%setup -q -n go + +%build +# go 1.4 bootstraps with C. +# go 1.20 bootstraps with go >= 1.17.13 +# go >= 1.22 bootstraps with go >= 1.20.14 +# +# These conditions make building the current go compiler from C a multistep +# process. Approximately once a year, the bootstrap requirement is moved +# forward, adding another step. +# +# PS: Since go compiles fairly quickly, the extra overhead is around 2-3 minutes +# on a reasonable machine. + +# Use prev bootstrap to compile next bootstrap. +function go_bootstrap() { + local bootstrap=$1 + local new_root=%{_topdir}/BUILD/go-bootstrap-${bootstrap} + ( + cd ${new_root}/src + CGO_ENABLED=0 ./make.bash + ) + # Nuke the older bootstrapper + rm -rf %{_libdir}/golang + # Install the new bootstrapper + mv -v $new_root %{_libdir}/golang + export GOROOT=%{_libdir}/golang + export GOROOT_BOOTSTRAP=%{_libdir}/golang +} + +go_bootstrap 00 +go_bootstrap 01 +go_bootstrap 02 +go_bootstrap 03 + +# Build current go version +export GOHOSTOS=linux +export GOHOSTARCH=%{gohostarch} +export GOROOT_BOOTSTRAP=%{goroot} + +export GOROOT="`pwd`" +export GOPATH=%{gopath} +export GOROOT_FINAL=%{_bindir}/go +rm -f %{gopath}/src/runtime/*.c +( + cd src + ./make.bash --no-clean +) + +%install + +mkdir -p %{buildroot}%{_bindir} +mkdir -p %{buildroot}%{goroot} + +cp -R api bin doc lib pkg src misc VERSION go.env %{buildroot}%{goroot} + +# remove the unnecessary zoneinfo file (Go will always use the system one first) +rm -rfv %{buildroot}%{goroot}/lib/time + +# remove the doc Makefile +rm -rfv %{buildroot}%{goroot}/doc/Makefile + +# put binaries to bindir, linked to the arch we're building, +# leave the arch independent pieces in %{goroot} +mkdir -p %{buildroot}%{goroot}/bin/linux_%{gohostarch} +ln -sfv ../go %{buildroot}%{goroot}/bin/linux_%{gohostarch}/go +ln -sfv ../gofmt %{buildroot}%{goroot}/bin/linux_%{gohostarch}/gofmt +ln -sfv %{goroot}/bin/gofmt %{buildroot}%{_bindir}/gofmt +ln -sfv %{goroot}/bin/go %{buildroot}%{_bindir}/go + +# ensure these exist and are owned +mkdir -p %{buildroot}%{gopath}/src/github.com/ +mkdir -p %{buildroot}%{gopath}/src/bitbucket.org/ +mkdir -p %{buildroot}%{gopath}/src/code.google.com/p/ + +# This file is not necessary: recent Go toolsets have good defaults. +# Keep the file, but leave it blank. This makes the upgrade path very simple. +install -vdm755 %{buildroot}%{_sysconfdir}/profile.d +cat >> %{buildroot}%{_sysconfdir}/profile.d/go-exports.sh <<- "EOF" +EOF + +%post -p /sbin/ldconfig + +%postun +/sbin/ldconfig +if [ $1 -eq 0 ]; then + # This is uninstall + rm -rf /opt/go + exit 0 +fi + +%files +%defattr(-,root,root) +%license LICENSE +%exclude %{goroot}/src/*.rc +%exclude %{goroot}/include/plan9 +%{_sysconfdir}/profile.d/go-exports.sh +%{goroot}/* +%{gopath}/src +%exclude %{goroot}/src/pkg/debug/dwarf/testdata +%exclude %{goroot}/src/pkg/debug/elf/testdata +%{_bindir}/* + +%changelog +* Thu Feb 05 2026 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.7-1 +- Bump version to 1.25.7-1 + +* Tue Jan 20 2026 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.6-1 +- Bump version to 1.25.6-1 + +* Tue Dec 02 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.5-1 +- Bump version to 1.25.5-1 + +* Tue Oct 14 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.3-1 +- Bump version to 1.25.3-1 + +* Thu Sep 04 2025 Davis Goodin - 1.25.1-1 +- Bump version to 1.25.1-1 + +* Wed Aug 13 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.0-1 +- Bump version to 1.25.0-1 + +* Wed Aug 06 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.24.6-1 +- Bump version to 1.24.6-1 + +* Tue Jul 08 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.24.5-1 +- Bump version to 1.24.5-1 + +* Fri Jun 06 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.24.4-1 +- Bump version to 1.24.4-1 + +* Wed May 07 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.24.3-1 +- Bump version to 1.24.3-1 + +* Tue Apr 01 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.24.2-1 +- Bump version to 1.24.2-1 + +* Wed Mar 05 2025 Microsoft Golang Bot - 1.24.1-1 +- Bump version to 1.24.1-1 + +* Fri Feb 14 2025 Microsoft Golang Bot - 1.24.0-1 +- Bump version to 1.24.0-1 + +* Tue Feb 04 2025 Tobias Brick - 1.23.3-3 +- Fix post scriptlet +- Remove calls to alternatives +- Don't manually delete go-exports.sh + +* Tue Dec 03 2024 Microsoft Golang Bot - 1.23.3-2 +- Bump version to 1.23.3-2 + +* Fri Nov 08 2024 Microsoft Golang Bot - 1.23.3-1 +- Bump version to 1.23.3-1 + +* Tue Oct 08 2024 Muhammad Falak - 1.23.1-1 +- Upgrade to 1.23.1 + +* Thu Sep 26 2024 Microsoft Golang Bot - 1.22.7-2 +- Bump version to 1.22.7-3 + +* Fri Sep 06 2024 Microsoft Golang Bot - 1.22.7-1 +- Bump version to 1.22.7-1 + +* Wed Aug 07 2024 Davis Goodin - 1.22.6-1 +- Bump version to 1.22.6-1 + +* Tue Jul 02 2024 Davis Goodin - 1.22.5-1 +- Bump version to 1.22.5-1 + +* Tue Jun 04 2024 Davis Goodin - 1.22.4-1 +- Bump version to 1.22.4-1 + +* Mon May 27 2024 Davis Goodin - 1.22.3-1 +- Bump version to 1.22.3-1 + +* Wed May 08 2024 Davis Goodin - 1.21.9-2 +- Remove explicit Go env variable defaults + +* Wed Apr 03 2024 Davis Goodin - 1.21.9-1 +- Bump version to 1.21.9-1 + +* Thu Mar 21 2024 Davis Goodin - 1.21.8-1 +- Bump version to 1.21.8-1, build version to 1.21.8-2 + +* Thu Feb 22 2024 Muhammad Falak - 1.21.6-2 +- Include go.env file in GOROOT + +* Wed Jan 24 2024 Davis Goodin - 1.21.6-1 +- Bump version to 1.21.6-1 +- Switch from upstream Go to the Microsoft build of Go + +* Mon Oct 16 2023 Nan Liu - 1.20.10-1 +- Bump version to 1.20.10 to address CVE-2023-29409, CVE-2023-39318, CVE-2023-39319, CVE-2023-39323, CVE-2023-39533, CVE-2023-29406, CVE-2023-39325, CVE-2023-44487 +- Remove patches that no longer apply + +* Tue Oct 10 2023 Dan Streetman - 1.20.7-2 +- Patch CVE-2023-44487 + +* Tue Aug 15 2023 Muhammad Falak - 1.20.7-1 +- Bump version to 1.20.7 +- Introduce patch to permit requests with invalid host header + +* Tue Aug 15 2023 Muhammad Falak - 1.19.12-1 +- Auto-upgrade to 1.19.12 to address CVE-2023-29409 +- Introduce patch to permit requests with invalid header + +* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.19.11-1 +- Auto-upgrade to 1.19.11 - Fix CVE-2023-29406 + +* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.19.10-1 +- Auto-upgrade to 1.19.10 - address CVE-2023-24540, CVE-2023-29402, CVE-2023-29403, CVE-2023-29404, CVE-2023-29405 + +* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.19.8-1 +- Auto-upgrade to 1.19.8 - address CVE-2023-24534, CVE-2023-24536, CVE-2023-24537, CVE-2023-24538 + +* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.19.7-1 +- Auto-upgrade to 1.19.7 - address CVE-2023-24532 + +* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.19.6-1 +- Auto-upgrade to 1.19.6 - Address CVE-2022-41722, CVE-2022-41724, CVE-2022-41725, CVE-2022-41723 + +* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.19.5-1 +- Auto-upgrade to 1.19.5 - upgrade to latest + +* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.19.4-1 +- Auto-upgrade to 1.19.4 + +* Thu Dec 15 2022 Daniel McIlvaney - 1.18.8-2 +- Patch CVE-2022-41717 + +* Tue Nov 01 2022 Olivia Crain - 1.18.8-1 +- Upgrade to version 1.18.8 (fixes CVE-2022-41716, which only applies to Windows environments) +- Also fixes CVE-2022-2879, CVE-2022-2880, CVE-2022-41715 (fixed in 1.18.7) +- Also fixes CVE-2022-27664, CVE-2022-32190 (fixed in 1.18.6) +- Use SPDX short identifier for license tag + +* Fri Aug 19 2022 Olivia Crain - 1.18.5-1 +- Upgrade to version to fix CVE-2022-1705, CVE-2022-1962, CVE-2022-28131, + CVE-2022-30630, CVE-2022-30631, CVE-2022-30632, CVE-2022-30633, CVE-2022-30635, + CVE-2022-32148, and CVE-2022-32189 + +* Tue Jun 14 2022 Muhammad Falak - 1.18.3-1 +- Bump version to 1.18.3 to address CVE-2022-24675 & CVE-2022-28327 + +* Tue Apr 12 2022 Muhammad Falak - 1.17.8-1 +- Bump version to 1.17.8 to address CVE-2021-44716 + +* Thu Feb 17 2022 Andrew Phelps - 1.17.1-2 +- Use _topdir instead of hard-coded value /usr/src/mariner +- License verified + +* Wed Sep 15 2021 Andrew Phelps - 1.17.1-1 +- Updated to version 1.17.1 + +* Tue Jun 08 2021 Henry Beberman - 1.15.13-1 +- Updated to version 1.15.13 to fix CVE-2021-33194 and CVE-2021-31525 + +* Mon Apr 26 2021 Nicolas Guibourge - 1.15.11-1 +- Updated to version 1.15.11 to fix CVE-2021-27918 + +* Wed Feb 03 2021 Andrew Phelps - 1.15.7-1 +- Updated to version 1.15.7 to fix CVE-2021-3114 + +* Mon Nov 23 2020 Henry Beberman - 1.15.5-1 +- Updated to version 1.15.5 + +* Fri Oct 30 2020 Thomas Crain - 1.13.15-2 +- Patch CVE-2020-24553 + +* Tue Sep 08 2020 Nicolas Ontiveros - 1.13.15-1 +- Updated to version 1.13.15, which fixes CVE-2020-14039 and CVE-2020-16845. + +* Sun May 24 2020 Mateusz Malisz - 1.13.11-1 +- Updated to version 1.13.11 + +* Sat May 09 2020 Nick Samson - 1.12.5-7 +- Added %%license line automatically + +* Thu Apr 30 2020 Emre Girgin - 1.12.5-6 +- Renaming go to golang + +* Thu Apr 23 2020 Nicolas Ontiveros - 1.12.5-5 +- Fix CVE-2019-14809. + +* Fri Mar 27 2020 Andrew Phelps - 1.12.5-4 +- Support building standalone by adding go 1.4 bootstrap. + +* Thu Feb 27 2020 Henry Beberman - 1.12.5-3 +- Remove meta dependency on libc.so.6 + +* Thu Feb 6 2020 Andrew Phelps - 1.12.5-2 +- Remove ExtraBuildRequires + +* Tue Sep 03 2019 Mateusz Malisz - 1.12.5-1 +- Initial CBL-Mariner import from Photon (license: Apache2). + +* Mon Jan 21 2019 Bo Gan - 1.9.7-1 +- Update to 1.9.7 + +* Wed Oct 24 2018 Alexey Makhalov - 1.9.4-3 +- Use extra build requires + +* Mon Apr 02 2018 Dheeraj Shetty - 1.9.4-2 +- Fix for CVE-2018-7187 + +* Thu Mar 15 2018 Xiaolin Li - 1.9.4-1 +- Update to golang release v1.9.4 + +* Tue Nov 14 2017 Alexey Makhalov - 1.9.1-2 +- Aarch64 support + +* Wed Nov 01 2017 Vinay Kulkarni - 1.9.1-1 +- Update to golang release v1.9.1 + +* Wed May 31 2017 Xiaolin Li - 1.8.1-2 +- Remove mercurial from buildrequires and requires. + +* Tue Apr 11 2017 Danut Moraru - 1.8.1-1 +- Update Golang to version 1.8.1, updated patch0 + +* Wed Dec 28 2016 Xiaolin Li - 1.7.4-1 +- Updated Golang to 1.7.4. + +* Thu Oct 06 2016 ChangLee - 1.6.3-2 +- Modified %check + +* Wed Jul 27 2016 Anish Swaminathan - 1.6.3-1 +- Update Golang to version 1.6.3 - fixes CVE 2016-5386 + +* Fri Jul 8 2016 Harish Udaiya Kumar - 1.6.2-1 +- Updated the Golang to version 1.6.2 + +* Thu Jun 2 2016 Priyesh Padmavilasom - 1.4.2-5 +- Fix script syntax + +* Tue May 24 2016 Priyesh Padmavilasom - 1.4.2-4 +- GA - Bump release of all rpms + +* Thu May 05 2016 Kumar Kaushik - 1.4.2-3 +- Handling upgrade scenario pre/post/un scripts. + +* Wed Dec 09 2015 Anish Swaminathan - 1.4.2-2 +- Edit post script. + +* Mon Aug 03 2015 Vinay Kulkarni - 1.4.2-1 +- Update to golang release version 1.4.2 + +* Fri Oct 17 2014 Divya Thaluru - 1.3.3-1 +- Initial build. First version diff --git a/SPECS/golang/golang.signatures.json b/SPECS/golang/golang.signatures.json index c7a8882674..6a96029ef9 100644 --- a/SPECS/golang/golang.signatures.json +++ b/SPECS/golang/golang.signatures.json @@ -3,7 +3,8 @@ "go.20230802.5.src.tar.gz": "56b9e0e0c3c13ca95d5efa6de4e7d49a9d190eca77919beff99d33cd3fa74e95", "go.20240206.2.src.tar.gz": "7982e0011aa9ab95fd0530404060410af4ba57326d26818690f334fdcb6451cd", "go1.22.12-20250211.4.src.tar.gz": "e1cc3bff8fdf1f24843ffc9f0eaddfd344eb40fd9ca0d9ba2965165be519eeb7", - "go1.25.7-20260204.4.src.tar.gz": "8c51515b2ee63464b62681373d5342ff148491bbbcc0b5bd892d9fafc3b40145", + "go1.24.13-20260204.5.src.tar.gz": "fdf4ec44d7191e59890e988ffba8ab3fd133ec6bd3757955223712f369e2328b", + "go1.26.0-20260210.6.src.tar.gz": "3e28c191afb47e93210b8188fabb784828954c641a42ec4fe87dc1e5b0032a8f", "go1.4-bootstrap-20171003.tar.gz": "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52" } } diff --git a/SPECS/golang/golang.spec b/SPECS/golang/golang.spec index 3e1c85712e..81bdf596b0 100644 --- a/SPECS/golang/golang.spec +++ b/SPECS/golang/golang.spec @@ -1,6 +1,6 @@ %global goroot %{_libdir}/golang %global gopath %{_datadir}/gocode -%global ms_go_filename go1.25.7-20260204.4.src.tar.gz +%global ms_go_filename go1.26.0-20260210.6.src.tar.gz %global ms_go_revision 1 %ifarch aarch64 %global gohostarch arm64 @@ -14,11 +14,11 @@ %define __find_requires %{nil} Summary: Go Name: golang -Version: 1.25.7 +Version: 1.26.0 Release: 1%{?dist} License: BSD-3-Clause -Distribution: Edge Microvisor Toolkit -Vendor: Intel Corporation +Vendor: Microsoft Corporation +Distribution: Azure Linux Group: System Environment/Security URL: https://github.com/microsoft/go Source0: https://github.com/microsoft/go/releases/download/v%{version}-%{ms_go_revision}/%{ms_go_filename} @@ -32,6 +32,8 @@ Source2: https://github.com/microsoft/go/releases/download/v1.19.12-1/go. Source3: https://github.com/microsoft/go/releases/download/v1.20.14-1/go.20240206.2.src.tar.gz # bootstrap 03 Source4: https://github.com/microsoft/go/releases/download/v1.22.12-2/go1.22.12-20250211.4.src.tar.gz +# bootstrap 04 +Source5: https://github.com/microsoft/go/releases/download/v1.24.13-1/go1.24.13-20260204.5.src.tar.gz Provides: %{name} = %{version} Provides: go = %{version}-%{release} @@ -56,6 +58,9 @@ mv -v go go-bootstrap-02 tar xf %{SOURCE4} --no-same-owner mv -v go go-bootstrap-03 +tar xf %{SOURCE5} --no-same-owner +mv -v go go-bootstrap-04 + %setup -q -n go %build @@ -90,6 +95,7 @@ go_bootstrap 00 go_bootstrap 01 go_bootstrap 02 go_bootstrap 03 +go_bootstrap 04 # Build current go version export GOHOSTOS=linux @@ -160,9 +166,15 @@ fi %{_bindir}/* %changelog -* Thu Feb 05 2026 andy - 1.25.7-1 +* Wed Feb 11 2026 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.26.0-1 +- Bump version to 1.26.0-1 + +* Thu Feb 05 2026 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.7-1 - Bump version to 1.25.7-1 +* Tue Jan 20 2026 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.6-1 +- Bump version to 1.25.6-1 + * Tue Dec 02 2025 bot-for-go[bot] <199222863+bot-for-go[bot]@users.noreply.github.com> - 1.25.5-1 - Bump version to 1.25.5-1 diff --git a/SPECS/grub2/CVE-2014-3591.patch b/SPECS/grub2/CVE-2014-3591.patch new file mode 100644 index 0000000000..197cb29499 --- /dev/null +++ b/SPECS/grub2/CVE-2014-3591.patch @@ -0,0 +1,79 @@ +From 25e4ae28da960baec315e0c10e9f70cd46a89a2e Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 13:30:22 +0000 +Subject: [PATCH] Fix for CVE-2014-3591 + +Upstream reference: +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=patch;h=ff53cf06e966dce0daba5f2c84e03ab9db2c3c8b +--- + grub-core/lib/libgcrypt/cipher/elgamal.c | 45 +++++++++++++++++++++--- + 1 file changed, 41 insertions(+), 4 deletions(-) + +diff --git a/grub-core/lib/libgcrypt/cipher/elgamal.c b/grub-core/lib/libgcrypt/cipher/elgamal.c +index ce4be85..47ba882 100644 +--- a/grub-core/lib/libgcrypt/cipher/elgamal.c ++++ b/grub-core/lib/libgcrypt/cipher/elgamal.c +@@ -29,6 +29,11 @@ + #include "g10lib.h" + #include "mpi.h" + #include "cipher.h" ++/* Blinding is used to mitigate side-channel attacks. You may undef ++ this to speed up the operation in case the system is secured ++ against physical and network mounted side-channel attacks. */ ++#define USE_BLINDING 1 ++ + + typedef struct + { +@@ -486,12 +491,44 @@ do_encrypt(gcry_mpi_t a, gcry_mpi_t b, gcry_mpi_t input, ELG_public_key *pkey ) + static void + decrypt(gcry_mpi_t output, gcry_mpi_t a, gcry_mpi_t b, ELG_secret_key *skey ) + { +- gcry_mpi_t t1 = mpi_alloc_secure( mpi_get_nlimbs( skey->p ) ); ++ MPI t1, t2, r; ++ unsigned int nbits = mpi_get_nbits (skey->p); ++ ++ mpi_normalize (a); ++ mpi_normalize (b); ++ ++ t1 = mpi_alloc_secure (mpi_nlimb_hint_from_nbits (nbits)); ++#ifdef USE_BLINDING ++ ++ t2 = mpi_alloc_secure (mpi_nlimb_hint_from_nbits (nbits)); ++ r = mpi_alloc (mpi_nlimb_hint_from_nbits (nbits)); ++ ++ /* We need a random number of about the prime size. The random ++ number merely needs to be unpredictable; thus we use level 0. */ ++ randomize_mpi (r, nbits, 0); ++ ++ /* t1 = r^x mod p */ ++ mpi_powm (t1, r, skey->x, skey->p); ++ /* t2 = (a * r)^-x mod p */ ++ mpi_mulm (t2, a, r, skey->p); ++ mpi_powm (t2, t2, skey->x, skey->p); ++ mpi_invm (t2, t2, skey->p); ++ /* t1 = (t1 * t2) mod p*/ ++ mpi_mulm (t1, t1, t2, skey->p); ++ ++ mpi_free (r); ++ mpi_free (t2); ++ ++#else /*!USE_BLINDING*/ + + /* output = b/(a^x) mod p */ +- gcry_mpi_powm( t1, a, skey->x, skey->p ); +- mpi_invm( t1, t1, skey->p ); +- mpi_mulm( output, b, t1, skey->p ); ++ mpi_powm (t1, a, skey->x, skey->p); ++ mpi_invm (t1, t1, skey->p); ++ ++#endif /*!USE_BLINDING*/ ++ ++ mpi_mulm (output, b, t1, skey->p); ++ + #if 0 + if( DBG_CIPHER ) + { +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2017-7526.patch b/SPECS/grub2/CVE-2017-7526.patch new file mode 100644 index 0000000000..c24d93c4c6 --- /dev/null +++ b/SPECS/grub2/CVE-2017-7526.patch @@ -0,0 +1,133 @@ +From 352e78a73c6b92155038f341095ab06753f965ea Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 14:38:07 +0000 +Subject: [PATCH] Fix for CVE-2017-7526 + +Upstream reference: +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=patch;h=e6a3dc9900433bbc8ad362a595a3837318c28fa9 +--- + grub-core/lib/libgcrypt/cipher/rsa.c | 85 ++++++++++++++++++---------- + 1 file changed, 54 insertions(+), 31 deletions(-) + +diff --git a/grub-core/lib/libgcrypt/cipher/rsa.c b/grub-core/lib/libgcrypt/cipher/rsa.c +index ccc9f96..43309f4 100644 +--- a/grub-core/lib/libgcrypt/cipher/rsa.c ++++ b/grub-core/lib/libgcrypt/cipher/rsa.c +@@ -685,53 +685,75 @@ stronger_key_check ( RSA_secret_key *skey ) + + + +-/**************** +- * Secret key operation. Encrypt INPUT with SKEY and put result into OUTPUT. ++/* Secret key operation - standard version. + * + * m = c^d mod n +- * +- * Or faster: ++ */ ++static void ++secret_core_std (gcry_mpi_t M, gcry_mpi_t C, ++ gcry_mpi_t D, gcry_mpi_t N) ++{ ++ mpi_powm (M, C, D, N); ++} ++ ++ ++/* Secret key operation - using the CRT. + * + * m1 = c ^ (d mod (p-1)) mod p + * m2 = c ^ (d mod (q-1)) mod q + * h = u * (m2 - m1) mod q + * m = m1 + h * p +- * +- * Where m is OUTPUT, c is INPUT and d,n,p,q,u are elements of SKEY. ++ */ ++static void ++secret_core_crt (gcry_mpi_t M, gcry_mpi_t C, ++ gcry_mpi_t D, unsigned int Nlimbs, ++ gcry_mpi_t P, gcry_mpi_t Q, gcry_mpi_t U) ++{ ++ gcry_mpi_t m1 = mpi_alloc_secure ( Nlimbs + 1 ); ++ gcry_mpi_t m2 = mpi_alloc_secure ( Nlimbs + 1 ); ++ gcry_mpi_t h = mpi_alloc_secure ( Nlimbs + 1 ); ++ ++ /* m1 = c ^ (d mod (p-1)) mod p */ ++ mpi_sub_ui ( h, P, 1 ); ++ mpi_fdiv_r ( h, D, h ); ++ mpi_powm ( m1, C, h, P ); ++ ++ /* m2 = c ^ (d mod (q-1)) mod q */ ++ mpi_sub_ui ( h, Q, 1 ); ++ mpi_fdiv_r ( h, D, h ); ++ mpi_powm ( m2, C, h, Q ); ++ ++ /* h = u * ( m2 - m1 ) mod q */ ++ mpi_sub ( h, m2, m1 ); ++ if ( mpi_has_sign ( h ) ) ++ mpi_add ( h, h, Q ); ++ mpi_mulm ( h, U, h, Q ); ++ ++ /* m = m1 + h * p */ ++ mpi_mul ( h, h, P ); ++ mpi_add ( M, m1, h ); ++ ++ mpi_free ( h ); ++ mpi_free ( m1 ); ++ mpi_free ( m2 ); ++} ++ ++ ++/* Secret key operation. ++ * Encrypt INPUT with SKEY and put result into ++ * OUTPUT. SKEY has the secret key parameters. + */ + static void + secret(gcry_mpi_t output, gcry_mpi_t input, RSA_secret_key *skey ) + { + if (!skey->p || !skey->q || !skey->u) + { +- mpi_powm (output, input, skey->d, skey->n); ++ secret_core_std (output, input, skey->d, skey->n); + } + else + { +- gcry_mpi_t m1 = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 ); +- gcry_mpi_t m2 = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 ); +- gcry_mpi_t h = mpi_alloc_secure( mpi_get_nlimbs(skey->n)+1 ); +- +- /* m1 = c ^ (d mod (p-1)) mod p */ +- mpi_sub_ui( h, skey->p, 1 ); +- mpi_fdiv_r( h, skey->d, h ); +- mpi_powm( m1, input, h, skey->p ); +- /* m2 = c ^ (d mod (q-1)) mod q */ +- mpi_sub_ui( h, skey->q, 1 ); +- mpi_fdiv_r( h, skey->d, h ); +- mpi_powm( m2, input, h, skey->q ); +- /* h = u * ( m2 - m1 ) mod q */ +- mpi_sub( h, m2, m1 ); +- if ( mpi_is_neg( h ) ) +- mpi_add ( h, h, skey->q ); +- mpi_mulm( h, skey->u, h, skey->q ); +- /* m = m2 + h * p */ +- mpi_mul ( h, h, skey->p ); +- mpi_add ( output, m1, h ); +- +- mpi_free ( h ); +- mpi_free ( m1 ); +- mpi_free ( m2 ); ++ secret_core_crt (output, input, skey->d, mpi_get_nlimbs (skey->n), ++ skey->p, skey->q, skey->u); + } + } + +@@ -778,6 +800,7 @@ rsa_unblind (gcry_mpi_t x, gcry_mpi_t ri, gcry_mpi_t n) + return y; + } + ++ + /********************************************* + ************** interface ****************** + *********************************************/ +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2019-13627.patch b/SPECS/grub2/CVE-2019-13627.patch new file mode 100644 index 0000000000..b2ece15524 --- /dev/null +++ b/SPECS/grub2/CVE-2019-13627.patch @@ -0,0 +1,68 @@ +From ec78ea01c197d46ed44c226613536490a6b0c87f Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 14:01:28 +0000 +Subject: [PATCH] Fix for CVE-2019-13627 + +Upstream reference: +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=db4e9976cc31b314aafad6626b2894e86ee44d60 +--- + grub-core/lib/libgcrypt/cipher/dsa.c | 14 ++++++++++++-- + grub-core/lib/libgcrypt/mpi/ec.c | 6 +++++- + 2 files changed, 17 insertions(+), 3 deletions(-) + +diff --git a/grub-core/lib/libgcrypt/cipher/dsa.c b/grub-core/lib/libgcrypt/cipher/dsa.c +index 883a815..1d77305 100644 +--- a/grub-core/lib/libgcrypt/cipher/dsa.c ++++ b/grub-core/lib/libgcrypt/cipher/dsa.c +@@ -600,8 +600,6 @@ check_secret_key( DSA_secret_key *sk ) + return rc; + } + +- +- + /* + Make a DSA signature from HASH and put it into r and s. + */ +@@ -611,10 +609,22 @@ sign(gcry_mpi_t r, gcry_mpi_t s, gcry_mpi_t hash, DSA_secret_key *skey ) + gcry_mpi_t k; + gcry_mpi_t kinv; + gcry_mpi_t tmp; ++ unsigned int qbits = mpi_get_nbits (skey->q); + + /* Select a random k with 0 < k < q */ + k = gen_k( skey->q ); + ++ /* Originally, ECDSA computation requires k where 0 < k < n. ++ * Here, we add n (the order of curve), to keep k in a ++ * range: n < k < 2*n, or, addming more n, keep k in a range: ++ * 2*n < k < 3*n, so that timing difference of the EC ++ * multiply operation can be small. The result is same. ++ */ ++ mpi_add (k, k, skey->E.n); ++ if (!mpi_test_bit (k, qbits)) ++ mpi_add (k, k, skey->E.n); ++ ++ + /* r = (a^k mod p) mod q */ + gcry_mpi_powm( r, skey->g, k, skey->p ); + mpi_fdiv_r( r, r, skey->q ); +diff --git a/grub-core/lib/libgcrypt/mpi/ec.c b/grub-core/lib/libgcrypt/mpi/ec.c +index fa00818..0089347 100644 +--- a/grub-core/lib/libgcrypt/mpi/ec.c ++++ b/grub-core/lib/libgcrypt/mpi/ec.c +@@ -617,7 +617,11 @@ _gcry_mpi_ec_mul_point (mpi_point_t *result, + unsigned int nbits; + int i; + +- nbits = mpi_get_nbits (scalar); ++ if (mpi_cmp (scalar, ctx->p) >= 0) ++ nbits = mpi_get_nbits (scalar); ++ else ++ nbits = mpi_get_nbits (ctx->p); ++ + mpi_set_ui (result->x, 1); + mpi_set_ui (result->y, 1); + mpi_set_ui (result->z, 0); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45774.patch b/SPECS/grub2/CVE-2024-45774.patch new file mode 100644 index 0000000000..efcc95fa9a --- /dev/null +++ b/SPECS/grub2/CVE-2024-45774.patch @@ -0,0 +1,29 @@ +From 78297135895384a0653a6748f1af4b9f50609fec Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 14:53:20 +0000 +Subject: [PATCH] Fix for CVE-2024-45774 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=2c34af908ebf4856051ed29e46d88abd2b20387f +--- + grub-core/video/readers/jpeg.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/grub-core/video/readers/jpeg.c b/grub-core/video/readers/jpeg.c +index 97a533b..80c5bd7 100644 +--- a/grub-core/video/readers/jpeg.c ++++ b/grub-core/video/readers/jpeg.c +@@ -333,6 +333,10 @@ grub_jpeg_decode_sof (struct grub_jpeg_data *data) + if (grub_errno != GRUB_ERR_NONE) + return grub_errno; + ++ if (data->image_height != 0 || data->image_width != 0) ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, ++ "jpeg: cannot have duplicate SOF0 markers"); ++ + if (grub_jpeg_get_byte (data) != 8) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, + "jpeg: only 8-bit precision is supported"); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45775.patch b/SPECS/grub2/CVE-2024-45775.patch new file mode 100644 index 0000000000..a63ebe5bb6 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45775.patch @@ -0,0 +1,28 @@ +From 3451d40564b03136222abd225d2408794c98e57a Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 15:51:34 +0000 +Subject: [PATCH] Fix for CVE-2024-45775 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=05be856a8c3aae41f5df90cab7796ab7ee34b872 +--- + grub-core/commands/extcmd.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/grub-core/commands/extcmd.c b/grub-core/commands/extcmd.c +index 90a5ca2..c236be1 100644 +--- a/grub-core/commands/extcmd.c ++++ b/grub-core/commands/extcmd.c +@@ -49,6 +49,9 @@ grub_extcmd_dispatcher (struct grub_command *cmd, int argc, char **args, + } + + state = grub_arg_list_alloc (ext, argc, args); ++ if (state == NULL) ++ return grub_errno; ++ + if (grub_arg_parse (ext, argc, args, state, &new_args, &new_argc)) + { + context.state = state; +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45776.patch b/SPECS/grub2/CVE-2024-45776.patch new file mode 100644 index 0000000000..9738ec7729 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45776.patch @@ -0,0 +1,29 @@ +From cba3d3966de27f3de803205de897df407603441a Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 16:43:45 +0000 +Subject: [PATCH] Fix for CVE-2024-45776 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=09bd6eb58b0f71ec273916070fa1e2de16897a91 +--- + grub-core/gettext/gettext.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c +index 16ebc20..85ea44a 100644 +--- a/grub-core/gettext/gettext.c ++++ b/grub-core/gettext/gettext.c +@@ -328,8 +328,8 @@ grub_mofile_open (struct grub_gettext_context *ctx, + for (ctx->grub_gettext_max_log = 0; ctx->grub_gettext_max >> ctx->grub_gettext_max_log; + ctx->grub_gettext_max_log++); + +- ctx->grub_gettext_msg_list = grub_zalloc (ctx->grub_gettext_max +- * sizeof (ctx->grub_gettext_msg_list[0])); ++ ctx->grub_gettext_msg_list = grub_calloc (ctx->grub_gettext_max, ++ sizeof (ctx->grub_gettext_msg_list[0])); + if (!ctx->grub_gettext_msg_list) + { + grub_file_close (fd); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45777.patch b/SPECS/grub2/CVE-2024-45777.patch new file mode 100644 index 0000000000..14af18d0d1 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45777.patch @@ -0,0 +1,46 @@ +From 17009606a2a666352f157955d7a0e983a240c222 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 16:39:55 +0000 +Subject: [PATCH] Fix for CVE-2024-45777 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=b970a5ed967816bbca8225994cd0ee2557bad515 +--- + grub-core/gettext/gettext.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c +index 4d02e62..16ebc20 100644 +--- a/grub-core/gettext/gettext.c ++++ b/grub-core/gettext/gettext.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -99,6 +100,7 @@ grub_gettext_getstr_from_position (struct grub_gettext_context *ctx, + char *translation; + struct string_descriptor desc; + grub_err_t err; ++ grub_size_t alloc_sz; + + internal_position = (off + position * sizeof (desc)); + +@@ -109,7 +111,10 @@ grub_gettext_getstr_from_position (struct grub_gettext_context *ctx, + length = grub_cpu_to_le32 (desc.length); + offset = grub_cpu_to_le32 (desc.offset); + +- translation = grub_malloc (length + 1); ++ if (grub_add (length, 1, &alloc_sz)) ++ return NULL; ++ ++ translation = grub_malloc (alloc_sz); + if (!translation) + return NULL; + +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45778.patch b/SPECS/grub2/CVE-2024-45778.patch new file mode 100644 index 0000000000..3f55b9c0f2 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45778.patch @@ -0,0 +1,46 @@ +From 3d13b94d7a0417c40d78f0c336c21163ed4dfeba Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Tue, 17 Jun 2025 02:58:39 +0000 +Subject: [PATCH] Fix for CVE-2024-45778 CVE-2024-45779 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=26db6605036bd9e5b16d9068a8cc75be63b8b630 +--- + grub-core/fs/bfs.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/grub-core/fs/bfs.c b/grub-core/fs/bfs.c +index 47dbe20..8d704e2 100644 +--- a/grub-core/fs/bfs.c ++++ b/grub-core/fs/bfs.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1104,7 +1105,10 @@ GRUB_MOD_INIT (bfs) + { + COMPILE_TIME_ASSERT (1 << LOG_EXTENT_SIZE == + sizeof (struct grub_bfs_extent)); +- grub_fs_register (&grub_bfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_bfs_fs); ++ } + } + + #ifdef MODE_AFS +@@ -1113,5 +1117,6 @@ GRUB_MOD_FINI (afs) + GRUB_MOD_FINI (bfs) + #endif + { +- grub_fs_unregister (&grub_bfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_bfs_fs); + } +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45779.nopatch b/SPECS/grub2/CVE-2024-45779.nopatch new file mode 100644 index 0000000000..d12aa534e7 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45779.nopatch @@ -0,0 +1 @@ +# The CVE-2024-45779 is fixed as part of patch CVE-2024-45778.patch diff --git a/SPECS/grub2/CVE-2024-45780.patch b/SPECS/grub2/CVE-2024-45780.patch new file mode 100644 index 0000000000..cfc5d052ee --- /dev/null +++ b/SPECS/grub2/CVE-2024-45780.patch @@ -0,0 +1,82 @@ +From e38852e0aeee802b86507a4e95b016d3add6dd94 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Tue, 17 Jun 2025 03:26:37 +0000 +Subject: [PATCH] Fix for CVE-2024-45780 + +Upstream reference: +https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=patch;h=0087bc6902182fe5cedce2d034c75a79cf6dd4f3 +--- + grub-core/fs/tar.c | 23 ++++++++++++++++++----- + 1 file changed, 18 insertions(+), 5 deletions(-) + +diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c +index c551ed6..a9e39b0 100644 +--- a/grub-core/fs/tar.c ++++ b/grub-core/fs/tar.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -76,6 +77,7 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, + { + struct head hd; + int reread = 0, have_longname = 0, have_longlink = 0; ++ grub_size_t sz; + + data->hofs = data->next_hofs; + +@@ -97,7 +99,11 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, + { + grub_err_t err; + grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); +- *name = grub_malloc (namesize + 1); ++ ++ if (grub_add (namesize, 1, &sz)) ++ return grub_error (GRUB_ERR_BAD_FS, N_("name size overflow")); ++ ++ *name = grub_malloc (sz); + if (*name == NULL) + return grub_errno; + err = grub_disk_read (data->disk, 0, +@@ -117,15 +123,19 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, + { + grub_err_t err; + grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); +- if (data->linkname_alloc < linksize + 1) ++ ++ if (grub_add (linksize, 1, &sz)) ++ return grub_error (GRUB_ERR_BAD_FS, N_("link size overflow")); ++ ++ if (data->linkname_alloc < sz) + { + char *n; +- n = grub_calloc (2, linksize + 1); ++ n = grub_calloc (2, sz); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; +- data->linkname_alloc = 2 * (linksize + 1); ++ data->linkname_alloc = 2 * (sz); + } + + err = grub_disk_read (data->disk, 0, +@@ -148,7 +158,10 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name, + while (extra_size < sizeof (hd.prefix) + && hd.prefix[extra_size]) + extra_size++; +- *name = grub_malloc (sizeof (hd.name) + extra_size + 2); ++ ++ if (grub_add (sizeof (hd.name) + 2, extra_size, &sz)) ++ return grub_error (GRUB_ERR_BAD_FS, N_("long name size overflow")); ++ *name = grub_malloc (sz); + if (*name == NULL) + return grub_errno; + if (hd.prefix[0]) +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45781.patch b/SPECS/grub2/CVE-2024-45781.patch new file mode 100644 index 0000000000..a84b7b552e --- /dev/null +++ b/SPECS/grub2/CVE-2024-45781.patch @@ -0,0 +1,27 @@ +From 7ff0403a60ca37050a387708364a301d1f64e0bc Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 15:45:51 +0000 +Subject: [PATCH] Fix for CVE-2024-45781 + +Upstream reference: +https://brave-ocean-0baeae310.5.azurestaticapps.net/#/cve/CVE-2024-45781 +--- + grub-core/fs/ufs.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c +index 34a698b..4727266 100644 +--- a/grub-core/fs/ufs.c ++++ b/grub-core/fs/ufs.c +@@ -463,7 +463,7 @@ grub_ufs_lookup_symlink (struct grub_ufs_data *data, int ino) + /* Check against zero is paylindromic, no need to swap. */ + if (data->inode.nblocks == 0 + && INODE_SIZE (data) <= sizeof (data->inode.symlink)) +- grub_strcpy (symlink, (char *) data->inode.symlink); ++ grub_strlcpy (symlink, (char *) data->inode.symlink, sz); + else + { + if (grub_ufs_read_file (data, 0, 0, 0, sz, symlink) < 0) +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-45782.nopatch b/SPECS/grub2/CVE-2024-45782.nopatch new file mode 100644 index 0000000000..179642ca30 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45782.nopatch @@ -0,0 +1 @@ +# The CVE-2024-45782 is fixed as part of patch CVE-2024-56737.patch diff --git a/SPECS/grub2/CVE-2024-45783.patch b/SPECS/grub2/CVE-2024-45783.patch new file mode 100644 index 0000000000..fdb1c5be76 --- /dev/null +++ b/SPECS/grub2/CVE-2024-45783.patch @@ -0,0 +1,27 @@ +From f98f594b204e1922afd1c2714f6d5651a9208f1d Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 16:48:17 +0000 +Subject: [PATCH] Fix for CVE-2024-45783 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=f7c070a2e28dfab7137db0739fb8db1dc02d8898 +--- + grub-core/fs/hfsplus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c +index 19c7b33..e7fd98a 100644 +--- a/grub-core/fs/hfsplus.c ++++ b/grub-core/fs/hfsplus.c +@@ -393,7 +393,7 @@ grub_hfsplus_mount (grub_disk_t disk) + + fail: + +- if (grub_errno == GRUB_ERR_OUT_OF_RANGE) ++ if (grub_errno == GRUB_ERR_OUT_OF_RANGE || grub_errno == GRUB_ERR_NONE) + grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + + grub_free (data); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2024-56737.patch b/SPECS/grub2/CVE-2024-56737.patch new file mode 100644 index 0000000000..3df29e5390 --- /dev/null +++ b/SPECS/grub2/CVE-2024-56737.patch @@ -0,0 +1,27 @@ +From f00677a840dcb8d9c335f9c544b414a87aea56f6 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 14:46:54 +0000 +Subject: [PATCH] Fix for CVE-2024-56737 and CVE-2024-45782 + +Upstream reference: +https://lists.gnu.org/archive/html/grub-devel/2025-02/msg00026.html +--- + grub-core/fs/hfs.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c +index f419965..bb7af5f 100644 +--- a/grub-core/fs/hfs.c ++++ b/grub-core/fs/hfs.c +@@ -379,7 +379,7 @@ grub_hfs_mount (grub_disk_t disk) + volume name. */ + key.parent_dir = grub_cpu_to_be32_compile_time (1); + key.strlen = data->sblock.volname[0]; +- grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1)); ++ grub_strlcpy ((char *) key.str, (char *) (data->sblock.volname + 1), sizeof (key.str)); + + if (grub_hfs_find_node (data, (char *) &key, data->cat_root, + 0, (char *) &dir, sizeof (dir)) == 0) +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2025-0677.patch b/SPECS/grub2/CVE-2025-0677.patch new file mode 100644 index 0000000000..862815ca21 --- /dev/null +++ b/SPECS/grub2/CVE-2025-0677.patch @@ -0,0 +1,360 @@ +From 1452ed13eddc9d81e8db22f07dbdafb5f59993f0 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 16:22:38 +0000 +Subject: [PATCH] Fix for CVE-2025-0677 CVE-2025-0684 CVE-2025-0685 + CVE-2025-0686 CVE-2025-0689 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=c4bc55da28543d2522a939ba4ee0acde45f2fa74 +--- + grub-core/fs/affs.c | 9 +++++++-- + grub-core/fs/cbfs.c | 9 +++++++-- + grub-core/fs/jfs.c | 9 +++++++-- + grub-core/fs/minix.c | 9 +++++++-- + grub-core/fs/nilfs2.c | 9 +++++++-- + grub-core/fs/ntfs.c | 9 +++++++-- + grub-core/fs/reiserfs.c | 9 +++++++-- + grub-core/fs/romfs.c | 9 +++++++-- + grub-core/fs/sfs.c | 9 +++++++-- + grub-core/fs/udf.c | 9 +++++++-- + grub-core/fs/ufs.c | 9 +++++++-- + 11 files changed, 77 insertions(+), 22 deletions(-) + +diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c +index cafcd0f..d676532 100644 +--- a/grub-core/fs/affs.c ++++ b/grub-core/fs/affs.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -699,11 +700,15 @@ static struct grub_fs grub_affs_fs = + + GRUB_MOD_INIT(affs) + { +- grub_fs_register (&grub_affs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_affs_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI(affs) + { +- grub_fs_unregister (&grub_affs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_affs_fs); + } +diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c +index 581215e..477a14e 100644 +--- a/grub-core/fs/cbfs.c ++++ b/grub-core/fs/cbfs.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -390,12 +391,16 @@ GRUB_MOD_INIT (cbfs) + #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN) + init_cbfsdisk (); + #endif +- grub_fs_register (&grub_cbfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_cbfs_fs); ++ } + } + + GRUB_MOD_FINI (cbfs) + { +- grub_fs_unregister (&grub_cbfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_cbfs_fs); + #if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN) + fini_cbfsdisk (); + #endif +diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c +index 6f7c439..c0bbab8 100644 +--- a/grub-core/fs/jfs.c ++++ b/grub-core/fs/jfs.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -963,11 +964,15 @@ static struct grub_fs grub_jfs_fs = + + GRUB_MOD_INIT(jfs) + { +- grub_fs_register (&grub_jfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_jfs_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI(jfs) + { +- grub_fs_unregister (&grub_jfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_jfs_fs); + } +diff --git a/grub-core/fs/minix.c b/grub-core/fs/minix.c +index 3cd18c8..7588835 100644 +--- a/grub-core/fs/minix.c ++++ b/grub-core/fs/minix.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -732,7 +733,10 @@ GRUB_MOD_INIT(minix) + #endif + #endif + { +- grub_fs_register (&grub_minix_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_minix_fs); ++ } + my_mod = mod; + } + +@@ -754,5 +758,6 @@ GRUB_MOD_FINI(minix) + #endif + #endif + { +- grub_fs_unregister (&grub_minix_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_minix_fs); + } +diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c +index 3c248a9..3f8e495 100644 +--- a/grub-core/fs/nilfs2.c ++++ b/grub-core/fs/nilfs2.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1231,11 +1232,15 @@ GRUB_MOD_INIT (nilfs2) + grub_nilfs2_dat_entry)); + COMPILE_TIME_ASSERT (1 << LOG_INODE_SIZE + == sizeof (struct grub_nilfs2_inode)); +- grub_fs_register (&grub_nilfs2_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_nilfs2_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI (nilfs2) + { +- grub_fs_unregister (&grub_nilfs2_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_nilfs2_fs); + } +diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c +index deb058a..5b342da 100644 +--- a/grub-core/fs/ntfs.c ++++ b/grub-core/fs/ntfs.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1316,11 +1317,15 @@ static struct grub_fs grub_ntfs_fs = + + GRUB_MOD_INIT (ntfs) + { +- grub_fs_register (&grub_ntfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_ntfs_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI (ntfs) + { +- grub_fs_unregister (&grub_ntfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_ntfs_fs); + } +diff --git a/grub-core/fs/reiserfs.c b/grub-core/fs/reiserfs.c +index af6a226..76cb231 100644 +--- a/grub-core/fs/reiserfs.c ++++ b/grub-core/fs/reiserfs.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -1417,11 +1418,15 @@ static struct grub_fs grub_reiserfs_fs = + + GRUB_MOD_INIT(reiserfs) + { +- grub_fs_register (&grub_reiserfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_reiserfs_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI(reiserfs) + { +- grub_fs_unregister (&grub_reiserfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_reiserfs_fs); + } +diff --git a/grub-core/fs/romfs.c b/grub-core/fs/romfs.c +index d97b8fb..d174449 100644 +--- a/grub-core/fs/romfs.c ++++ b/grub-core/fs/romfs.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -475,10 +476,14 @@ static struct grub_fs grub_romfs_fs = + + GRUB_MOD_INIT(romfs) + { +- grub_fs_register (&grub_romfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_romfs_fs); ++ } + } + + GRUB_MOD_FINI(romfs) + { +- grub_fs_unregister (&grub_romfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_romfs_fs); + } +diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c +index 983e880..f64bdd2 100644 +--- a/grub-core/fs/sfs.c ++++ b/grub-core/fs/sfs.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + #include + + GRUB_MOD_LICENSE ("GPLv3+"); +@@ -779,11 +780,15 @@ static struct grub_fs grub_sfs_fs = + + GRUB_MOD_INIT(sfs) + { +- grub_fs_register (&grub_sfs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_sfs_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI(sfs) + { +- grub_fs_unregister (&grub_sfs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_sfs_fs); + } +diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c +index 2ac5c1d..f89c6b0 100644 +--- a/grub-core/fs/udf.c ++++ b/grub-core/fs/udf.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -1382,11 +1383,15 @@ static struct grub_fs grub_udf_fs = { + + GRUB_MOD_INIT (udf) + { +- grub_fs_register (&grub_udf_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_udf_fs); ++ } + my_mod = mod; + } + + GRUB_MOD_FINI (udf) + { +- grub_fs_unregister (&grub_udf_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_udf_fs); + } +diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c +index 4727266..90fda07 100644 +--- a/grub-core/fs/ufs.c ++++ b/grub-core/fs/ufs.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -899,7 +900,10 @@ GRUB_MOD_INIT(ufs1) + #endif + #endif + { +- grub_fs_register (&grub_ufs_fs); ++ if (!grub_is_lockdown ()) ++ { ++ grub_fs_register (&grub_ufs_fs); ++ } + my_mod = mod; + } + +@@ -913,6 +917,7 @@ GRUB_MOD_FINI(ufs1) + #endif + #endif + { +- grub_fs_unregister (&grub_ufs_fs); ++ if (!grub_is_lockdown ()) ++ grub_fs_unregister (&grub_ufs_fs); + } + +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2025-0678.patch b/SPECS/grub2/CVE-2025-0678.patch new file mode 100644 index 0000000000..f10da0ac2d --- /dev/null +++ b/SPECS/grub2/CVE-2025-0678.patch @@ -0,0 +1,76 @@ +From 99fc7bef2d0ae92fe52095a104715b787e39a7e5 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Tue, 17 Jun 2025 03:19:13 +0000 +Subject: [PATCH] Fix for CVE-2025-0678 CVE-2025-1125 + +Upstream reference: +https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=patch;h=84bc0a9a68835952ae69165c11709811dae7634e +--- + grub-core/fs/btrfs.c | 4 ++-- + grub-core/fs/hfspluscomp.c | 9 +++++++-- + grub-core/fs/squash4.c | 8 ++++---- + 3 files changed, 13 insertions(+), 8 deletions(-) + +diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c +index 54a46b8..0c8d45c 100644 +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -1276,8 +1276,8 @@ grub_btrfs_mount (grub_device_t dev) + } + + data->n_devices_allocated = 16; +- data->devices_attached = grub_malloc (sizeof (data->devices_attached[0]) +- * data->n_devices_allocated); ++ data->devices_attached = grub_calloc (data->n_devices_allocated, ++ sizeof (data->devices_attached[0])); + if (!data->devices_attached) + { + grub_free (data); +diff --git a/grub-core/fs/hfspluscomp.c b/grub-core/fs/hfspluscomp.c +index d76f3f1..4965ef1 100644 +--- a/grub-core/fs/hfspluscomp.c ++++ b/grub-core/fs/hfspluscomp.c +@@ -244,14 +244,19 @@ hfsplus_open_compressed_real (struct grub_hfsplus_file *node) + return 0; + } + node->compress_index_size = grub_le_to_cpu32 (index_size); +- node->compress_index = grub_malloc (node->compress_index_size +- * sizeof (node->compress_index[0])); ++ node->compress_index = grub_calloc (node->compress_index_size, ++ sizeof (node->compress_index[0])); + if (!node->compress_index) + { + node->compressed = 0; + grub_free (attr_node); + return grub_errno; + } ++ ++ /* ++ * The node->compress_index_size * sizeof (node->compress_index[0]) is safe here ++ * due to relevant checks done in grub_calloc() above. ++ */ + if (grub_hfsplus_read_file (node, 0, 0, + 0x104 + sizeof (index_size), + node->compress_index_size +diff --git a/grub-core/fs/squash4.c b/grub-core/fs/squash4.c +index 6dd731e..f79fc75 100644 +--- a/grub-core/fs/squash4.c ++++ b/grub-core/fs/squash4.c +@@ -804,10 +804,10 @@ direct_read (struct grub_squash_data *data, + break; + } + total_blocks = ((total_size + data->blksz - 1) >> data->log2_blksz); +- ino->block_sizes = grub_malloc (total_blocks +- * sizeof (ino->block_sizes[0])); +- ino->cumulated_block_sizes = grub_malloc (total_blocks +- * sizeof (ino->cumulated_block_sizes[0])); ++ ino->block_sizes = grub_calloc (total_blocks, ++ sizeof (ino->block_sizes[0])); ++ ino->cumulated_block_sizes = grub_calloc (total_blocks, ++ sizeof (ino->cumulated_block_sizes[0])); + if (!ino->block_sizes || !ino->cumulated_block_sizes) + { + grub_free (ino->block_sizes); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2025-0684.nopatch b/SPECS/grub2/CVE-2025-0684.nopatch new file mode 100644 index 0000000000..fbd4786af4 --- /dev/null +++ b/SPECS/grub2/CVE-2025-0684.nopatch @@ -0,0 +1 @@ +# The CVE-2025-0684 is fixed as part of patch CVE-2025-0677.patch diff --git a/SPECS/grub2/CVE-2025-0685.nopatch b/SPECS/grub2/CVE-2025-0685.nopatch new file mode 100644 index 0000000000..9899abb8db --- /dev/null +++ b/SPECS/grub2/CVE-2025-0685.nopatch @@ -0,0 +1 @@ +# The CVE-2025-0685 is fixed as part of patch CVE-2025-0677.patch diff --git a/SPECS/grub2/CVE-2025-0686.nopatch b/SPECS/grub2/CVE-2025-0686.nopatch new file mode 100644 index 0000000000..1e74917384 --- /dev/null +++ b/SPECS/grub2/CVE-2025-0686.nopatch @@ -0,0 +1 @@ +# The CVE-2025-0686 is fixed as part of patch CVE-2025-0677.patch diff --git a/SPECS/grub2/CVE-2025-0689.nopatch b/SPECS/grub2/CVE-2025-0689.nopatch new file mode 100644 index 0000000000..75ca0c644d --- /dev/null +++ b/SPECS/grub2/CVE-2025-0689.nopatch @@ -0,0 +1 @@ +# The CVE-2025-0689 is fixed as part of patch CVE-2025-0677.patch diff --git a/SPECS/grub2/CVE-2025-0690.patch b/SPECS/grub2/CVE-2025-0690.patch new file mode 100644 index 0000000000..e740b3fcf3 --- /dev/null +++ b/SPECS/grub2/CVE-2025-0690.patch @@ -0,0 +1,62 @@ +From ed31abc5a78639d6b5f9b73352fbf1b3e83d4af9 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Tue, 17 Jun 2025 02:34:17 +0000 +Subject: [PATCH] Fix for CVE-2025-0690 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=dad8f502974ed9ad0a70ae6820d17b4b142558fc +--- + grub-core/commands/read.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +diff --git a/grub-core/commands/read.c b/grub-core/commands/read.c +index fe3e88b..f3ff826 100644 +--- a/grub-core/commands/read.c ++++ b/grub-core/commands/read.c +@@ -25,19 +25,21 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + + static char * + grub_getline (void) + { +- int i; ++ grub_size_t i; + char *line; + char *tmp; + char c; ++ grub_size_t alloc_size; + + i = 0; +- line = grub_malloc (1 + i + sizeof('\0')); ++ line = grub_malloc (1 + sizeof('\0')); + if (! line) + return NULL; + +@@ -50,8 +52,17 @@ grub_getline (void) + line[i] = c; + if (grub_isprint (c)) + grub_printf ("%c", c); +- i++; +- tmp = grub_realloc (line, 1 + i + sizeof('\0')); ++ if (grub_add (i, 1, &i)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return NULL; ++ } ++ if (grub_add (i, 1 + sizeof('\0'), &alloc_size)) ++ { ++ grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); ++ return NULL; ++ } ++ tmp = grub_realloc (line, alloc_size); + if (! tmp) + { + grub_free (line); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2025-1118.patch b/SPECS/grub2/CVE-2025-1118.patch new file mode 100644 index 0000000000..b51647a727 --- /dev/null +++ b/SPECS/grub2/CVE-2025-1118.patch @@ -0,0 +1,29 @@ +From 6c823e608a8ca4e261ff29ca9b6d67dd8b20c009 Mon Sep 17 00:00:00 2001 +From: Kshitiz Godara +Date: Mon, 16 Jun 2025 15:55:46 +0000 +Subject: [PATCH] Fix for CVE-2025-1118 + +Upstream reference: +https://cgit.git.savannah.gnu.org/cgit/grub.git/patch/?id=34824806ac6302f91e8cabaa41308eaced25725f +--- + grub-core/commands/minicmd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c +index fa49893..903af33 100644 +--- a/grub-core/commands/minicmd.c ++++ b/grub-core/commands/minicmd.c +@@ -203,8 +203,8 @@ GRUB_MOD_INIT(minicmd) + grub_register_command ("help", grub_mini_cmd_help, + 0, N_("Show this message.")); + cmd_dump = +- grub_register_command ("dump", grub_mini_cmd_dump, +- N_("ADDR [SIZE]"), N_("Show memory contents.")); ++ grub_register_command_lockdown ("dump", grub_mini_cmd_dump, ++ N_("ADDR [SIZE]"), N_("Show memory contents.")); + cmd_rmmod = + grub_register_command ("rmmod", grub_mini_cmd_rmmod, + N_("MODULE"), N_("Remove a module.")); +-- +2.45.3 + diff --git a/SPECS/grub2/CVE-2025-1125.nopatch b/SPECS/grub2/CVE-2025-1125.nopatch new file mode 100644 index 0000000000..02f568f39d --- /dev/null +++ b/SPECS/grub2/CVE-2025-1125.nopatch @@ -0,0 +1 @@ +# The CVE-2025-1125 is fixed as part of patch CVE-2025-0678.patch diff --git a/SPECS/grub2/CVE-2025-61661.patch b/SPECS/grub2/CVE-2025-61661.patch new file mode 100644 index 0000000000..355cf91cfb --- /dev/null +++ b/SPECS/grub2/CVE-2025-61661.patch @@ -0,0 +1,35 @@ +From 549a9cc372fd0b96a4ccdfad0e12140476cc62a3 Mon Sep 17 00:00:00 2001 +From: Jamie +Date: Mon, 14 Jul 2025 09:52:59 +0100 +Subject: [PATCH] commands/usbtest: Use correct string length field + +An incorrect length field is used for buffer allocation. This leads to +grub_utf16_to_utf8() receiving an incorrect/different length and possibly +causing OOB write. This makes sure to use the correct length. + +Fixes: CVE-2025-61661 + +Reported-by: Jamie +Signed-off-by: Jamie +Reviewed-by: Daniel Kiper + +Upstream Patch Reference: https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=patch;h=549a9cc372fd0b96a4ccdfad0e12140476cc62a3 +--- + grub-core/commands/usbtest.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/commands/usbtest.c b/grub-core/commands/usbtest.c +index 2c6d93fe6..8ef187a9a 100644 +--- a/grub-core/commands/usbtest.c ++++ b/grub-core/commands/usbtest.c +@@ -99,7 +99,7 @@ grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid, + return GRUB_USB_ERR_NONE; + } + +- *string = grub_malloc (descstr.length * 2 + 1); ++ *string = grub_malloc (descstrp->length * 2 + 1); + if (! *string) + { + grub_free (descstrp); +-- +2.39.5 diff --git a/SPECS/grub2/CVE-2025-61662.patch b/SPECS/grub2/CVE-2025-61662.patch new file mode 100644 index 0000000000..e5a1fe21dd --- /dev/null +++ b/SPECS/grub2/CVE-2025-61662.patch @@ -0,0 +1,67 @@ +From 8ed78fd9f0852ab218cc1f991c38e5a229e43807 Mon Sep 17 00:00:00 2001 +From: Alec Brown +Date: Thu, 21 Aug 2025 21:14:06 +0000 +Subject: [PATCH] gettext/gettext: Unregister gettext command on module unload + +When the gettext module is loaded, the gettext command is registered but +isn't unregistered when the module is unloaded. We need to add a call to +grub_unregister_command() when unloading the module. + +Fixes: CVE-2025-61662 + +Reported-by: Alec Brown +Signed-off-by: Alec Brown +Reviewed-by: Daniel Kiper + +Upstream Patch Reference: https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=patch;h=8ed78fd9f0852ab218cc1f991c38e5a229e43807 +--- + grub-core/gettext/gettext.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c +index 4d02e62..47509c3 100644 +--- a/grub-core/gettext/gettext.c ++++ b/grub-core/gettext/gettext.c +@@ -497,6 +497,8 @@ grub_cmd_translate (grub_command_t cmd __attribute__ ((unused)), + return 0; + } + ++static grub_command_t cmd; ++ + GRUB_MOD_INIT (gettext) + { + const char *lang; +@@ -516,13 +518,14 @@ GRUB_MOD_INIT (gettext) + grub_register_variable_hook ("locale_dir", NULL, read_main); + grub_register_variable_hook ("secondary_locale_dir", NULL, read_secondary); + +- grub_register_command_p1 ("gettext", grub_cmd_translate, +- N_("STRING"), +- /* TRANSLATORS: It refers to passing the string through gettext. +- So it's "translate" in the same meaning as in what you're +- doing now. +- */ +- N_("Translates the string with the current settings.")); ++ cmd = grub_register_command_p1 ("gettext", grub_cmd_translate, ++ N_("STRING"), ++ /* ++ * TRANSLATORS: It refers to passing the string through gettext. ++ * So it's "translate" in the same meaning as in what you're ++ * doing now. ++ */ ++ N_("Translates the string with the current settings.")); + + /* Reload .mo file information if lang changes. */ + grub_register_variable_hook ("lang", NULL, grub_gettext_env_write_lang); +@@ -535,6 +538,8 @@ GRUB_MOD_INIT (gettext) + + GRUB_MOD_FINI (gettext) + { ++ grub_unregister_command (cmd); ++ + grub_gettext_delete_list (&main_context); + grub_gettext_delete_list (&secondary_context); + +-- +2.43.0 + diff --git a/SPECS/grub2/CVE-2025-61663.patch b/SPECS/grub2/CVE-2025-61663.patch new file mode 100644 index 0000000000..7d265f1ecf --- /dev/null +++ b/SPECS/grub2/CVE-2025-61663.patch @@ -0,0 +1,60 @@ +From 05d3698b8b03eccc49e53491bbd75dba15f40917 Mon Sep 17 00:00:00 2001 +From: Alec Brown +Date: Thu, 21 Aug 2025 21:14:07 +0000 +Subject: [PATCH] normal/main: Unregister commands on module unload + +When the normal module is loaded, the normal and normal_exit commands +are registered but aren't unregistered when the module is unloaded. We +need to add calls to grub_unregister_command() when unloading the module +for these commands. + +Fixes: CVE-2025-61663 +Fixes: CVE-2025-61664 + +Reported-by: Alec Brown +Signed-off-by: Alec Brown +Reviewed-by: Daniel Kiper + +Upstream Patch Reference: https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=patch;h=05d3698b8b03eccc49e53491bbd75dba15f40917 +--- + grub-core/normal/main.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index c4ebe9e..65fa95b 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -499,7 +499,7 @@ grub_mini_cmd_clear (struct grub_command *cmd __attribute__ ((unused)), + return 0; + } + +-static grub_command_t cmd_clear; ++static grub_command_t cmd_clear, cmd_normal, cmd_normal_exit; + + static void (*grub_xputs_saved) (const char *str); + static const char *features[] = { +@@ -541,10 +541,10 @@ GRUB_MOD_INIT(normal) + grub_env_export ("pager"); + + /* Register a command "normal" for the rescue mode. */ +- grub_register_command ("normal", grub_cmd_normal, +- 0, N_("Enter normal mode.")); +- grub_register_command ("normal_exit", grub_cmd_normal_exit, +- 0, N_("Exit from normal mode.")); ++ cmd_normal = grub_register_command ("normal", grub_cmd_normal, ++ 0, N_("Enter normal mode.")); ++ cmd_normal_exit = grub_register_command ("normal_exit", grub_cmd_normal_exit, ++ 0, N_("Exit from normal mode.")); + + /* Reload terminal colors when these variables are written to. */ + grub_register_variable_hook ("color_normal", NULL, grub_env_write_color_normal); +@@ -584,4 +584,6 @@ GRUB_MOD_FINI(normal) + grub_register_variable_hook ("pager", 0, 0); + grub_fs_autoload_hook = 0; + grub_unregister_command (cmd_clear); ++ grub_unregister_command (cmd_normal); ++ grub_unregister_command (cmd_normal_exit); + } +-- +2.43.0 + diff --git a/SPECS/grub2/grub2.spec b/SPECS/grub2/grub2.spec index 1b39f76691..d13704dfd0 100644 --- a/SPECS/grub2/grub2.spec +++ b/SPECS/grub2/grub2.spec @@ -7,7 +7,7 @@ Summary: GRand Unified Bootloader Name: grub2 Version: 2.06 -Release: 25%{?dist} +Release: 26%{?dist} License: GPLv3+ Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -110,6 +110,38 @@ Patch: sbat-4-0006-fs-ntfs-Make-code-more-readable.patch # dropped in scenarios like PXE booting. Patch: disable-checksum-code-optimization.patch Patch: CVE-2025-0624.patch + +# Additional bulk CVEs +Patch: CVE-2014-3591.patch +Patch: CVE-2019-13627.patch +Patch: CVE-2017-7526.patch +Patch: CVE-2024-56737.patch +Patch: CVE-2024-45774.patch +Patch: CVE-2024-45781.patch +Patch: CVE-2024-45775.patch +Patch: CVE-2025-1118.patch +Patch: CVE-2025-0677.patch +Patch: CVE-2024-45777.patch +Patch: CVE-2024-45776.patch +Patch: CVE-2024-45783.patch +Patch: CVE-2025-0690.patch +Patch: CVE-2024-45778.patch +Patch: CVE-2025-0678.patch +Patch: CVE-2024-45780.patch +Patch: CVE-2025-61661.patch +Patch: CVE-2025-61662.patch +Patch: CVE-2025-61663.patch +# Following are included as part of above CVEs and kept here as nopatch +# and commented out, because from patch command perspective, these files +# have garbage content. +#Patch: CVE-2024-45782.nopatch +#Patch: CVE-2025-0684.nopatch +#Patch: CVE-2025-0685.nopatch +#Patch: CVE-2025-0686.nopatch +#Patch: CVE-2025-0689.nopatch +#Patch: CVE-2024-45779.nopatch +#Patch: CVE-2025-1125.nopatch + BuildRequires: autoconf BuildRequires: device-mapper-devel BuildRequires: python3 @@ -436,6 +468,37 @@ cp $GRUB_PXE_MODULE_SOURCE $EFI_BOOT_DIR/$GRUB_PXE_MODULE_NAME %config(noreplace) %{_sysconfdir}/grub.d/41_custom %changelog +* Mon Feb 23 2026 Lee Chee Yang - 2.06-26 +- merge from Azure Linux 3.0.20260107-3.0 +- Patch CVE-2025-61661, CVE-2025-61662 & CVE-2025-61663 + +* Tue Jan 6 2025 Lee Chee Yang - 2.06-26 +- merge from Azure Linux 3.0.20251206-3.0 +- Addressed following grub2 CVEs +- CVE-2025-0684 +- CVE-2024-45782 +- CVE-2024-45778 +- CVE-2025-0686 +- CVE-2025-0678 +- CVE-2025-0685 +- CVE-2024-45779 +- CVE-2025-0689 +- CVE-2024-45780 +- CVE-2025-1125 +- CVE-2025-0690 +- CVE-2024-45783 +- CVE-2024-45776 +- CVE-2024-45777 +- CVE-2025-0677 +- CVE-2025-1118 +- CVE-2024-45775 +- CVE-2024-45781 +- CVE-2024-45774 +- CVE-2024-56737 +- CVE-2017-7526 +- CVE-2019-13627 +- CVE-2014-3591 + * Mon Sep 8 2025 Lee Chee Yang - 2.06-25 - merge from Azure Linux 3.0.20250910-3.0. - Patch CVE-2025-0624 diff --git a/SPECS/intel-xpu-smi/intel-xpu-smi.spec b/SPECS/intel-xpu-smi/intel-xpu-smi.spec index 301a972e19..6565e2890f 100644 --- a/SPECS/intel-xpu-smi/intel-xpu-smi.spec +++ b/SPECS/intel-xpu-smi/intel-xpu-smi.spec @@ -1,7 +1,7 @@ Summary: Intel XPU System Management Interface Name: intel-xpu-smi Version: 1.2.39 -Release: 6%{?dist} +Release: 7%{?dist} License: MIT Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -9,7 +9,7 @@ URL: https://github.com/intel/xpumanager Source0: https://github.com/intel/xpumanager/archive/refs/tags/V%{version}.tar.gz#/%{name}-%{version}.tar.gz Patch0: system-installed-spdlog.patch BuildRequires: cmake -BuildRequires: glibc-static >= 2.38-12%{?dist} +BuildRequires: glibc-static >= 2.38-18%{?dist} BuildRequires: libpciaccess-devel BuildRequires: intel-level-zero-devel BuildRequires: intel-metee-devel @@ -77,6 +77,9 @@ make install DESTDIR=%{buildroot} %{_libdir}/xpu-smi/resources/* %changelog +* Thu Mar 12 2026 Lee Chee Yang - 1.2.39-7 +- Bump to rebuild with updated glibc + * Fri Oct 10 2025 Lee Chee Yang - 1.2.39-6 - Bump to rebuild with updated glibc diff --git a/SPECS/jx/CVE-2025-58058.patch b/SPECS/jx/CVE-2025-58058.patch new file mode 100644 index 0000000000..9e265161a9 --- /dev/null +++ b/SPECS/jx/CVE-2025-58058.patch @@ -0,0 +1,534 @@ +From f1dc31a949813e9f80a6e9375bc39de7faaa14f8 Mon Sep 17 00:00:00 2001 +From: Ulrich Kunitz +Date: Mon, 12 Dec 2022 20:41:07 +0100 +Subject: [PATCH 1/3] lzma: fix handling of small dictionary sizes + +As Matt Dainty (@bodgit) reported there is an issue if the header of the +LZMA stream is less than the minimum dictionary size of 4096 byte. The +specification of the LZMA format says that in that case a dictionary +size of 4096 byte should be used, our code returns an error. + +This commit changes the behavior and adds a simple test case to test for +the right behavior. + +Fixes [#52](https://github.com/ulikunitz/xz/pull/52) +--- + vendor/github.com/ulikunitz/xz/lzma/reader.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/vendor/github.com/ulikunitz/xz/lzma/reader.go b/vendor/github.com/ulikunitz/xz/lzma/reader.go +index 7b7eef3..2c3d073 100644 +--- a/vendor/github.com/ulikunitz/xz/lzma/reader.go ++++ b/vendor/github.com/ulikunitz/xz/lzma/reader.go +@@ -70,7 +70,7 @@ func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) { + return nil, err + } + if r.h.dictCap < MinDictCap { +- return nil, errors.New("lzma: dictionary capacity too small") ++ r.h.dictCap = MinDictCap + } + dictCap := r.h.dictCap + if c.DictCap > dictCap { +-- +2.45.4 + + +From b5640e674c211fa12c2efafbf743dbec31634171 Mon Sep 17 00:00:00 2001 +From: Ulrich Kunitz +Date: Thu, 21 Aug 2025 17:57:47 +0200 +Subject: [PATCH 2/3] Address Security Issue GHSA-jc7w-c686-c4v9 + +This commit addresses security issue GHSA-jc7w-c686-c4v9. + +The mitigating measures are described for the Reader type and I added a +TestZeroPrefixIssue function to test the mitigations. + +// # Security concerns +// +// Note that LZMA format doesn't support a magic marker in the header. So +// [NewReader] cannot determine whether it reads the actual header. For instance +// the LZMA stream might have a zero byte in front of the reader, leading to +// larger dictionary sizes and file sizes. The code will detect later that there +// are problems with the stream, but the dictionary has already been allocated +// and this might consume a lot of memory. +// +// Version 0.5.14 introduces built-in mitigations: +// +// - The [ReaderConfig] DictCap field is now interpreted as a limit for the +// dictionary size. +// - The default is 2 Gigabytes (2^31 bytes). +// - Users can check with the [Reader.Header] method what the actual values are in +// their LZMA files and set a smaller limit using [ReaderConfig]. +// - The dictionary size doesn't exceed the larger of the file size and +// the minimum dictionary size. This is another measure to prevent huge +// memory allocations for the dictionary. +// - The code supports stream sizes only up to a pebibyte (1024^5). +--- + vendor/github.com/ulikunitz/xz/TODO.md | 11 +- + vendor/github.com/ulikunitz/xz/lzma/header.go | 55 ++++---- + vendor/github.com/ulikunitz/xz/lzma/reader.go | 123 +++++++++++++++--- + vendor/github.com/ulikunitz/xz/lzma/writer.go | 30 ++--- + 4 files changed, 160 insertions(+), 59 deletions(-) + +diff --git a/vendor/github.com/ulikunitz/xz/TODO.md b/vendor/github.com/ulikunitz/xz/TODO.md +index 88c7341..35e9bc6 100644 +--- a/vendor/github.com/ulikunitz/xz/TODO.md ++++ b/vendor/github.com/ulikunitz/xz/TODO.md +@@ -1,8 +1,13 @@ + # TODO list + +-## Release v0.5.x +- +-1. Support check flag in gxz command. ++## Release v0.5.14 ++ ++* If the DictionarySize is larger than the UncompressedSize set it to ++ UncompressedSize ++* make a Header() (h Header, ok bool) function so the user can implement its own ++ policy ++* Add documentation to Reader to explain the situation ++* Add a TODO for the rewrite version + + ## Release v0.6 + +diff --git a/vendor/github.com/ulikunitz/xz/lzma/header.go b/vendor/github.com/ulikunitz/xz/lzma/header.go +index cda3946..096f9a4 100644 +--- a/vendor/github.com/ulikunitz/xz/lzma/header.go ++++ b/vendor/github.com/ulikunitz/xz/lzma/header.go +@@ -60,36 +60,36 @@ const noHeaderSize uint64 = 1<<64 - 1 + // HeaderLen provides the length of the LZMA file header. + const HeaderLen = 13 + +-// header represents the header of an LZMA file. +-type header struct { +- properties Properties +- dictCap int +- // uncompressed size; negative value if no size is given +- size int64 ++// Header represents the Header of an LZMA file. ++type Header struct { ++ Properties Properties ++ DictSize uint32 ++ // uncompressed Size; negative value if no Size is given ++ Size int64 + } + + // marshalBinary marshals the header. +-func (h *header) marshalBinary() (data []byte, err error) { +- if err = h.properties.verify(); err != nil { ++func (h *Header) marshalBinary() (data []byte, err error) { ++ if err = h.Properties.verify(); err != nil { + return nil, err + } +- if !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) { ++ if !(h.DictSize <= MaxDictCap) { + return nil, fmt.Errorf("lzma: DictCap %d out of range", +- h.dictCap) ++ h.DictSize) + } + + data = make([]byte, 13) + + // property byte +- data[0] = h.properties.Code() ++ data[0] = h.Properties.Code() + + // dictionary capacity +- putUint32LE(data[1:5], uint32(h.dictCap)) ++ putUint32LE(data[1:5], uint32(h.DictSize)) + + // uncompressed size + var s uint64 +- if h.size > 0 { +- s = uint64(h.size) ++ if h.Size > 0 { ++ s = uint64(h.Size) + } else { + s = noHeaderSize + } +@@ -99,20 +99,20 @@ func (h *header) marshalBinary() (data []byte, err error) { + } + + // unmarshalBinary unmarshals the header. +-func (h *header) unmarshalBinary(data []byte) error { ++func (h *Header) unmarshalBinary(data []byte) error { + if len(data) != HeaderLen { + return errors.New("lzma.unmarshalBinary: data has wrong length") + } + + // properties + var err error +- if h.properties, err = PropertiesForCode(data[0]); err != nil { ++ if h.Properties, err = PropertiesForCode(data[0]); err != nil { + return err + } + + // dictionary capacity +- h.dictCap = int(uint32LE(data[1:])) +- if h.dictCap < 0 { ++ h.DictSize = uint32LE(data[1:]) ++ if int(h.DictSize) < 0 { + return errors.New( + "LZMA header: dictionary capacity exceeds maximum " + + "integer") +@@ -121,10 +121,10 @@ func (h *header) unmarshalBinary(data []byte) error { + // uncompressed size + s := uint64LE(data[5:]) + if s == noHeaderSize { +- h.size = -1 ++ h.Size = -1 + } else { +- h.size = int64(s) +- if h.size < 0 { ++ h.Size = int64(s) ++ if h.Size < 0 { + return errors.New( + "LZMA header: uncompressed size " + + "out of int64 range") +@@ -134,9 +134,9 @@ func (h *header) unmarshalBinary(data []byte) error { + return nil + } + +-// validDictCap checks whether the dictionary capacity is correct. This ++// validDictSize checks whether the dictionary capacity is correct. This + // is used to weed out wrong file headers. +-func validDictCap(dictcap int) bool { ++func validDictSize(dictcap int) bool { + if int64(dictcap) == MaxDictCap { + return true + } +@@ -155,13 +155,16 @@ func validDictCap(dictcap int) bool { + // dictionary sizes of 2^n or 2^n+2^(n-1) with n >= 10 or 2^32-1. If + // there is an explicit size it must not exceed 256 GiB. The length of + // the data argument must be HeaderLen. ++// ++// This function should be disregarded because there is no guarantee that LZMA ++// files follow the constraints. + func ValidHeader(data []byte) bool { +- var h header ++ var h Header + if err := h.unmarshalBinary(data); err != nil { + return false + } +- if !validDictCap(h.dictCap) { ++ if !validDictSize(int(h.DictSize)) { + return false + } +- return h.size < 0 || h.size <= 1<<38 ++ return h.Size < 0 || h.Size <= 1<<38 + } +diff --git a/vendor/github.com/ulikunitz/xz/lzma/reader.go b/vendor/github.com/ulikunitz/xz/lzma/reader.go +index 2c3d073..4d2178b 100644 +--- a/vendor/github.com/ulikunitz/xz/lzma/reader.go ++++ b/vendor/github.com/ulikunitz/xz/lzma/reader.go +@@ -6,25 +6,32 @@ + // Reader and Writer support the classic LZMA format. Reader2 and + // Writer2 support the decoding and encoding of LZMA2 streams. + // +-// The package is written completely in Go and doesn't rely on any external ++// The package is written completely in Go and does not rely on any external + // library. + package lzma + + import ( + "errors" ++ "fmt" + "io" + ) + + // ReaderConfig stores the parameters for the reader of the classic LZMA + // format. + type ReaderConfig struct { ++ // Since v0.5.14 this parameter sets an upper limit for a .lzma file's ++ // dictionary size. This helps to mitigate problems with mangled ++ // headers. + DictCap int + } + + // fill converts the zero values of the configuration to the default values. + func (c *ReaderConfig) fill() { + if c.DictCap == 0 { +- c.DictCap = 8 * 1024 * 1024 ++ // set an upper limit of 2 GB for dictionary capacity to address ++ // the zero prefix security issue. ++ c.DictCap = 1 << 31 ++ // original: c.DictCap = 8 * 1024 * 1024 + } + } + +@@ -39,10 +46,33 @@ func (c *ReaderConfig) Verify() error { + } + + // Reader provides a reader for LZMA files or streams. ++// ++// # Security concerns ++// ++// Note that LZMA format doesn't support a magic marker in the header. So ++// [NewReader] cannot determine whether it reads the actual header. For instance ++// the LZMA stream might have a zero byte in front of the reader, leading to ++// larger dictionary sizes and file sizes. The code will detect later that there ++// are problems with the stream, but the dictionary has already been allocated ++// and this might consume a lot of memory. ++// ++// Version 0.5.14 introduces built-in mitigations: ++// ++// - The [ReaderConfig] DictCap field is now interpreted as a limit for the ++// dictionary size. ++// - The default is 2 Gigabytes (2^31 bytes). ++// - Users can check with the [Reader.Header] method what the actual values are in ++// their LZMA files and set a smaller limit using [ReaderConfig]. ++// - The dictionary size doesn't exceed the larger of the file size and ++// the minimum dictionary size. This is another measure to prevent huge ++// memory allocations for the dictionary. ++// - The code supports stream sizes only up to a pebibyte (1024^5). + type Reader struct { +- lzma io.Reader +- h header +- d *decoder ++ lzma io.Reader ++ header Header ++ // headerOrig stores the original header read from the stream. ++ headerOrig Header ++ d *decoder + } + + // NewReader creates a new reader for an LZMA stream using the classic +@@ -51,8 +81,37 @@ func NewReader(lzma io.Reader) (r *Reader, err error) { + return ReaderConfig{}.NewReader(lzma) + } + ++// ErrDictSize reports about an error of the dictionary size. ++type ErrDictSize struct { ++ ConfigDictCap int ++ HeaderDictSize uint32 ++ Message string ++} ++ ++// Error returns the error message. ++func (e *ErrDictSize) Error() string { ++ return e.Message ++} ++ ++func newErrDictSize(messageformat string, ++ configDictCap int, headerDictSize uint32, ++ args ...interface{}) *ErrDictSize { ++ newArgs := make([]interface{}, len(args)+2) ++ newArgs[0] = configDictCap ++ newArgs[1] = headerDictSize ++ copy(newArgs[2:], args) ++ return &ErrDictSize{ ++ ConfigDictCap: configDictCap, ++ HeaderDictSize: headerDictSize, ++ Message: fmt.Sprintf(messageformat, newArgs...), ++ } ++} ++ ++// We support only files not larger than 1 << 50 bytes (a pebibyte, 1024^5). ++const maxStreamSize = 1 << 50 ++ + // NewReader creates a new reader for an LZMA stream in the classic +-// format. The function reads and verifies the the header of the LZMA ++// format. The function reads and verifies the header of the LZMA + // stream. + func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) { + if err = c.Verify(); err != nil { +@@ -66,29 +125,63 @@ func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) { + return nil, err + } + r = &Reader{lzma: lzma} +- if err = r.h.unmarshalBinary(data); err != nil { ++ if err = r.header.unmarshalBinary(data); err != nil { + return nil, err + } +- if r.h.dictCap < MinDictCap { +- r.h.dictCap = MinDictCap ++ r.headerOrig = r.header ++ dictSize := int64(r.header.DictSize) ++ if int64(c.DictCap) < dictSize { ++ return nil, newErrDictSize( ++ "lzma: header dictionary size %[2]d exceeds configured dictionary capacity %[1]d", ++ c.DictCap, uint32(dictSize), ++ ) ++ } ++ if dictSize < MinDictCap { ++ dictSize = MinDictCap ++ } ++ // original code: disabled this because there is no point in increasing ++ // the dictionary above what is stated in the file. ++ /* ++ if int64(c.DictCap) > int64(dictSize) { ++ dictSize = int64(c.DictCap) ++ } ++ */ ++ size := r.header.Size ++ if size >= 0 && size < dictSize { ++ dictSize = size + } +- dictCap := r.h.dictCap +- if c.DictCap > dictCap { +- dictCap = c.DictCap ++ // Protect against modified or malicious headers. ++ if size > maxStreamSize { ++ return nil, fmt.Errorf( ++ "lzma: stream size %d exceeds a pebibyte (1024^5)", ++ size) + } ++ if dictSize < MinDictCap { ++ dictSize = MinDictCap ++ } ++ ++ r.header.DictSize = uint32(dictSize) + +- state := newState(r.h.properties) +- dict, err := newDecoderDict(dictCap) ++ state := newState(r.header.Properties) ++ dict, err := newDecoderDict(int(dictSize)) + if err != nil { + return nil, err + } +- r.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size) ++ r.d, err = newDecoder(ByteReader(lzma), state, dict, r.header.Size) + if err != nil { + return nil, err + } + return r, nil + } + ++// Header returns the header as read from the LZMA stream. It is intended to ++// allow the user to understand what parameters are typically provided in the ++// headers of the LZMA files and set the DictCap field in [ReaderConfig] ++// accordingly. ++func (r *Reader) Header() (h Header, ok bool) { ++ return r.headerOrig, r.d != nil ++} ++ + // EOSMarker indicates that an EOS marker has been encountered. + func (r *Reader) EOSMarker() bool { + return r.d.eosMarker +diff --git a/vendor/github.com/ulikunitz/xz/lzma/writer.go b/vendor/github.com/ulikunitz/xz/lzma/writer.go +index 5803ecc..2a13203 100644 +--- a/vendor/github.com/ulikunitz/xz/lzma/writer.go ++++ b/vendor/github.com/ulikunitz/xz/lzma/writer.go +@@ -13,7 +13,7 @@ import ( + // MinDictCap and MaxDictCap provide the range of supported dictionary + // capacities. + const ( +- MinDictCap = 1 << 12 ++ MinDictCap = 1 << 12 + MaxDictCap = 1<<32 - 1 + ) + +@@ -96,21 +96,21 @@ func (c *WriterConfig) Verify() error { + } + + // header returns the header structure for this configuration. +-func (c *WriterConfig) header() header { +- h := header{ +- properties: *c.Properties, +- dictCap: c.DictCap, +- size: -1, ++func (c *WriterConfig) header() Header { ++ h := Header{ ++ Properties: *c.Properties, ++ DictSize: uint32(c.DictCap), ++ Size: -1, + } + if c.SizeInHeader { +- h.size = c.Size ++ h.Size = c.Size + } + return h + } + + // Writer writes an LZMA stream in the classic format. + type Writer struct { +- h header ++ h Header + bw io.ByteWriter + buf *bufio.Writer + e *encoder +@@ -130,12 +130,12 @@ func (c WriterConfig) NewWriter(lzma io.Writer) (w *Writer, err error) { + w.buf = bufio.NewWriter(lzma) + w.bw = w.buf + } +- state := newState(w.h.properties) +- m, err := c.Matcher.new(w.h.dictCap) ++ state := newState(w.h.Properties) ++ m, err := c.Matcher.new(int(w.h.DictSize)) + if err != nil { + return nil, err + } +- dict, err := newEncoderDict(w.h.dictCap, c.BufSize, m) ++ dict, err := newEncoderDict(int(w.h.DictSize), c.BufSize, m) + if err != nil { + return nil, err + } +@@ -171,8 +171,8 @@ func (w *Writer) writeHeader() error { + + // Write puts data into the Writer. + func (w *Writer) Write(p []byte) (n int, err error) { +- if w.h.size >= 0 { +- m := w.h.size ++ if w.h.Size >= 0 { ++ m := w.h.Size + m -= w.e.Compressed() + int64(w.e.dict.Buffered()) + if m < 0 { + m = 0 +@@ -192,9 +192,9 @@ func (w *Writer) Write(p []byte) (n int, err error) { + // Close closes the writer stream. It ensures that all data from the + // buffer will be compressed and the LZMA stream will be finished. + func (w *Writer) Close() error { +- if w.h.size >= 0 { ++ if w.h.Size >= 0 { + n := w.e.Compressed() + int64(w.e.dict.Buffered()) +- if n != w.h.size { ++ if n != w.h.Size { + return errSize + } + } +-- +2.45.4 + + +From 7ee8e0234f5ffe1e5ba4fb718367e5aa352ad0fc Mon Sep 17 00:00:00 2001 +From: Ulrich Kunitz +Date: Fri, 29 Aug 2025 07:16:26 +0200 +Subject: [PATCH 3/3] lzma: Fix default for ReaderConfig.DictCap + +Release v0.15.4 set the limit for the dictionary size to 1<<31. This +created a problem for 32-bit problems. MaxInt on 32-bit platforms is +1<<31-1 and so the current code didn't work. I fixed the problem by +setting DictCap to 1<<31-1. + +Fixes: #62 +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/ulikunitz/xz/commit/4ce6f08566c86bf66a9bc1c2f811336ae2e462c0.patch https://github.com/ulikunitz/xz/commit/88ddf1d0d98d688db65de034f48960b2760d2ae2.patch https://github.com/ulikunitz/xz/commit/235be8df4f86c943c154112d1abb3c951c86babb.patch +--- + vendor/github.com/ulikunitz/xz/lzma/reader.go | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/vendor/github.com/ulikunitz/xz/lzma/reader.go b/vendor/github.com/ulikunitz/xz/lzma/reader.go +index 4d2178b..af62798 100644 +--- a/vendor/github.com/ulikunitz/xz/lzma/reader.go ++++ b/vendor/github.com/ulikunitz/xz/lzma/reader.go +@@ -30,7 +30,7 @@ func (c *ReaderConfig) fill() { + if c.DictCap == 0 { + // set an upper limit of 2 GB for dictionary capacity to address + // the zero prefix security issue. +- c.DictCap = 1 << 31 ++ c.DictCap = 1 << 31-1 + // original: c.DictCap = 8 * 1024 * 1024 + } + } +@@ -60,7 +60,7 @@ func (c *ReaderConfig) Verify() error { + // + // - The [ReaderConfig] DictCap field is now interpreted as a limit for the + // dictionary size. +-// - The default is 2 Gigabytes (2^31 bytes). ++// - The default is 2 Gigabytes minus 1 byte (2^31-1 bytes). + // - Users can check with the [Reader.Header] method what the actual values are in + // their LZMA files and set a smaller limit using [ReaderConfig]. + // - The dictionary size doesn't exceed the larger of the file size and +-- +2.45.4 + diff --git a/SPECS/jx/jx.spec b/SPECS/jx/jx.spec index 42cd6be001..9f77168e32 100644 --- a/SPECS/jx/jx.spec +++ b/SPECS/jx/jx.spec @@ -1,7 +1,7 @@ Summary: Command line tool for working with Jenkins X. Name: jx Version: 3.10.182 -Release: 3%{?dist} +Release: 4%{?dist} License: Apache-2.0 Vendor: Microsoft Corporation Distribution: Azure Linux @@ -27,6 +27,7 @@ Source0: https://github.com/jenkins-x/jx/archive/v%{version}.tar.gz#/%{na # See: https://reproducible-builds.org/docs/archives/ # - For the value of "--mtime" use the date "2021-04-26 00:00Z" to simplify future updates. Source1: %{name}-%{version}-vendor.tar.gz +Patch0: CVE-2025-58058.patch BuildRequires: golang < 1.25 %global debug_package %{nil} @@ -62,6 +63,10 @@ install -p -m 755 -t %{buildroot}%{_bindir} ./build/jx %{_bindir}/jx %changelog +* Tue Jan 6 2025 Lee Chee Yang - 3.10.182-4 +- merge from Azure Linux 3.0.20251206-3.0 +- Patch for CVE-2025-58058 + * Fri Oct 3 2025 Lee Chee Yang - 3.10.182-3 - merge from Azure Linux 3.0.20250910-3.0 - Set BR for golang to < 1.25 diff --git a/SPECS/keda/CVE-2024-45338.patch b/SPECS/keda/CVE-2024-45338.patch deleted file mode 100644 index 7dc58f35e9..0000000000 --- a/SPECS/keda/CVE-2024-45338.patch +++ /dev/null @@ -1,63 +0,0 @@ -From a61bc7a45809410b36644afd5a29c14f138a1485 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Thu, 2 Jan 2025 10:22:12 +0000 -Subject: [PATCH] Fix CVE CVE-2024-45338 in gh - ---- - vendor/golang.org/x/net/html/doctype.go | 2 +- - vendor/golang.org/x/net/html/foreign.go | 3 +-- - vendor/golang.org/x/net/html/parse.go | 4 ++-- - 3 files changed, 4 insertions(+), 5 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go -index c484e5a..bca3ae9 100644 ---- a/vendor/golang.org/x/net/html/doctype.go -+++ b/vendor/golang.org/x/net/html/doctype.go -@@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { - } - } - if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && -- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { -+ strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { - quirks = true - } - } -diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go -index 9da9e9d..e8515d8 100644 ---- a/vendor/golang.org/x/net/html/foreign.go -+++ b/vendor/golang.org/x/net/html/foreign.go -@@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { - if n.Data == "annotation-xml" { - for _, a := range n.Attr { - if a.Key == "encoding" { -- val := strings.ToLower(a.Val) -- if val == "text/html" || val == "application/xhtml+xml" { -+ if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { - return true - } - } -diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go -index 46a89ed..5b8374b 100644 ---- a/vendor/golang.org/x/net/html/parse.go -+++ b/vendor/golang.org/x/net/html/parse.go -@@ -1031,7 +1031,7 @@ func inBodyIM(p *parser) bool { - if p.tok.DataAtom == a.Input { - for _, t := range p.tok.Attr { - if t.Key == "type" { -- if strings.ToLower(t.Val) == "hidden" { -+ if strings.EqualFold(t.Val, "hidden") { - // Skip setting framesetOK = false - return true - } -@@ -1459,7 +1459,7 @@ func inTableIM(p *parser) bool { - return inHeadIM(p) - case a.Input: - for _, t := range p.tok.Attr { -- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { -+ if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { - p.addElement() - p.oe.pop() - return true --- -2.39.4 - diff --git a/SPECS/keda/CVE-2024-51744.patch b/SPECS/keda/CVE-2024-51744.patch deleted file mode 100644 index 1ada595bb5..0000000000 --- a/SPECS/keda/CVE-2024-51744.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 98fa1373fce24555da98c0fb283d3a80c4c1944f Mon Sep 17 00:00:00 2001 -From: Sreenivasulu Malavathula -Date: Thu, 3 Apr 2025 13:46:25 -0500 -Subject: [PATCH] Address CVE-2024-51744 -Upstream Patch Reference: https://github.com/golang-jwt/jwt/commit/7b1c1c00a171c6c79bbdb40e4ce7d197060c1c2c - ---- - vendor/github.com/golang-jwt/jwt/parser.go | 36 +++++++++------- - vendor/github.com/golang-jwt/jwt/v4/parser.go | 41 +++++++++---------- - 2 files changed, 41 insertions(+), 36 deletions(-) - -diff --git a/vendor/github.com/golang-jwt/jwt/parser.go b/vendor/github.com/golang-jwt/jwt/parser.go -index d6901d9a..bfb480c9 100644 ---- a/vendor/github.com/golang-jwt/jwt/parser.go -+++ b/vendor/github.com/golang-jwt/jwt/parser.go -@@ -14,12 +14,21 @@ type Parser struct { - } - - // Parse, validate, and return a token. --// keyFunc will receive the parsed token and should return the key for validating. --// If everything is kosher, err will be nil -+// Parse parses, validates, verifies the signature and returns the parsed token. keyFunc will -+// receive the parsed token and should return the key for validating. - func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) - } - -+// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object -+// implementing the Claims interface. This provides default values which can be overridden and -+// allows a caller to use their own type, rather than the default MapClaims implementation of -+// Claims. -+// -+// Note: If you provide a custom claim implementation that embeds one of the standard claims (such -+// as RegisteredClaims), make sure that a) you either embed a non-pointer version of the claims or -+// b) if you are using a pointer, allocate the proper memory for it before passing in the overall -+// claims, otherwise you might run into a panic. - func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - token, parts, err := p.ParseUnverified(tokenString, claims) - if err != nil { -@@ -56,12 +65,17 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} - } - -+ // Perform validation -+ token.Signature = parts[2] -+ if err := token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { -+ return token, &ValidationError{Inner: err, Errors: ValidationErrorSignatureInvalid} -+ } -+ - vErr := &ValidationError{} - - // Validate Claims - if !p.SkipClaimsValidation { - if err := token.Claims.Valid(); err != nil { -- - // If the Claims Valid returned an error, check if it is a validation error, - // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set - if e, ok := err.(*ValidationError); !ok { -@@ -69,22 +83,14 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - } else { - vErr = e - } -+ return token, vErr - } - } - -- // Perform validation -- token.Signature = parts[2] -- if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { -- vErr.Inner = err -- vErr.Errors |= ValidationErrorSignatureInvalid -- } -- -- if vErr.valid() { -- token.Valid = true -- return token, nil -- } -+ // No errors so far, token is valid. -+ token.Valid = true - -- return token, vErr -+ return token, nil - } - - // WARNING: Don't use this method unless you know what you're doing -diff --git a/vendor/github.com/golang-jwt/jwt/v4/parser.go b/vendor/github.com/golang-jwt/jwt/v4/parser.go -index 8e7e67c4..0fc510a0 100644 ---- a/vendor/github.com/golang-jwt/jwt/v4/parser.go -+++ b/vendor/github.com/golang-jwt/jwt/v4/parser.go -@@ -38,19 +38,21 @@ func NewParser(options ...ParserOption) *Parser { - return p - } - --// Parse parses, validates, verifies the signature and returns the parsed token. --// keyFunc will receive the parsed token and should return the key for validating. -+// Parse parses, validates, verifies the signature and returns the parsed token. keyFunc will -+// receive the parsed token and should return the key for validating. - func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) - } - --// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object implementing the Claims --// interface. This provides default values which can be overridden and allows a caller to use their own type, rather --// than the default MapClaims implementation of Claims. -+// ParseWithClaims parses, validates, and verifies like Parse, but supplies a default object -+// implementing the Claims interface. This provides default values which can be overridden and -+// allows a caller to use their own type, rather than the default MapClaims implementation of -+// Claims. - // --// Note: If you provide a custom claim implementation that embeds one of the standard claims (such as RegisteredClaims), --// make sure that a) you either embed a non-pointer version of the claims or b) if you are using a pointer, allocate the --// proper memory for it before passing in the overall claims, otherwise you might run into a panic. -+// Note: If you provide a custom claim implementation that embeds one of the standard claims (such -+// as RegisteredClaims), make sure that a) you either embed a non-pointer version of the claims or -+// b) if you are using a pointer, allocate the proper memory for it before passing in the overall -+// claims, otherwise you might run into a panic. - func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - token, parts, err := p.ParseUnverified(tokenString, claims) - if err != nil { -@@ -87,12 +89,17 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} - } - -+ // Perform validation -+ token.Signature = parts[2] -+ if err := token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { -+ return token, &ValidationError{Inner: err, Errors: ValidationErrorSignatureInvalid} -+ } -+ - vErr := &ValidationError{} - - // Validate Claims - if !p.SkipClaimsValidation { - if err := token.Claims.Valid(); err != nil { -- - // If the Claims Valid returned an error, check if it is a validation error, - // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set - if e, ok := err.(*ValidationError); !ok { -@@ -100,22 +107,14 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - } else { - vErr = e - } -+ return token, vErr - } - } - -- // Perform validation -- token.Signature = parts[2] -- if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { -- vErr.Inner = err -- vErr.Errors |= ValidationErrorSignatureInvalid -- } -- -- if vErr.valid() { -- token.Valid = true -- return token, nil -- } -+ // No errors so far, token is valid. -+ token.Valid = true - -- return token, vErr -+ return token, nil - } - - // ParseUnverified parses the token but doesn't validate the signature. --- -2.45.2 - diff --git a/SPECS/keda/CVE-2024-6104.patch b/SPECS/keda/CVE-2024-6104.patch deleted file mode 100644 index 4f27cab85f..0000000000 --- a/SPECS/keda/CVE-2024-6104.patch +++ /dev/null @@ -1,81 +0,0 @@ -From a0837c510dfd0e0bf33aa2a721aa5f4d82dca577 Mon Sep 17 00:00:00 2001 -From: Balakumaran Kannan -Date: Thu, 1 Aug 2024 13:12:11 +0000 -Subject: [PATCH] Patch CVE-2024-6104 - ---- - .../hashicorp/go-retryablehttp/client.go | 28 ++++++++++++++----- - 1 file changed, 21 insertions(+), 7 deletions(-) - -diff --git a/vendor/github.com/hashicorp/go-retryablehttp/client.go b/vendor/github.com/hashicorp/go-retryablehttp/client.go -index c9edbd0..48ff4df 100644 ---- a/vendor/github.com/hashicorp/go-retryablehttp/client.go -+++ b/vendor/github.com/hashicorp/go-retryablehttp/client.go -@@ -609,9 +609,9 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - if logger != nil { - switch v := logger.(type) { - case LeveledLogger: -- v.Debug("performing request", "method", req.Method, "url", req.URL) -+ v.Debug("performing request", "method", req.Method, "url", redactURL(req.URL)) - case Logger: -- v.Printf("[DEBUG] %s %s", req.Method, req.URL) -+ v.Printf("[DEBUG] %s %s", req.Method, redactURL(req.URL)) - } - } - -@@ -666,9 +666,9 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - if err != nil { - switch v := logger.(type) { - case LeveledLogger: -- v.Error("request failed", "error", err, "method", req.Method, "url", req.URL) -+ v.Error("request failed", "error", err, "method", req.Method, "url", redactURL(req.URL)) - case Logger: -- v.Printf("[ERR] %s %s request failed: %v", req.Method, req.URL, err) -+ v.Printf("[ERR] %s %s request failed: %v", req.Method, redactURL(req.URL), err) - } - } else { - // Call this here to maintain the behavior of logging all requests, -@@ -704,7 +704,7 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - - wait := c.Backoff(c.RetryWaitMin, c.RetryWaitMax, i, resp) - if logger != nil { -- desc := fmt.Sprintf("%s %s", req.Method, req.URL) -+ desc := fmt.Sprintf("%s %s", req.Method, redactURL(req.URL)) - if resp != nil { - desc = fmt.Sprintf("%s (status: %d)", desc, resp.StatusCode) - } -@@ -760,11 +760,11 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - // communicate why - if err == nil { - return nil, fmt.Errorf("%s %s giving up after %d attempt(s)", -- req.Method, req.URL, attempt) -+ req.Method, redactURL(req.URL), attempt) - } - - return nil, fmt.Errorf("%s %s giving up after %d attempt(s): %w", -- req.Method, req.URL, attempt, err) -+ req.Method, redactURL(req.URL), attempt, err) - } - - // Try to read the response body so we can reuse this connection. -@@ -845,3 +845,17 @@ func (c *Client) StandardClient() *http.Client { - Transport: &RoundTripper{Client: c}, - } - } -+ -+ -+// Taken from url.URL#Redacted() which was introduced in go 1.15. -+func redactURL(u *url.URL) string { -+ if u == nil { -+ return "" -+ } -+ -+ ru := *u -+ if _, has := ru.User.Password(); has { -+ ru.User = url.UserPassword(ru.User.Username(), "xxxxx") -+ } -+ return ru.String() -+} --- -2.33.8 - diff --git a/SPECS/keda/CVE-2025-22868.patch b/SPECS/keda/CVE-2025-22868.patch deleted file mode 100644 index c4f136f3ca..0000000000 --- a/SPECS/keda/CVE-2025-22868.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 681b4d8edca1bcfea5bce685d77ea7b82ed3e7b3 Mon Sep 17 00:00:00 2001 -From: Neal Patel -Date: Thu, 30 Jan 2025 14:10:09 -0500 -Subject: [PATCH] jws: split token into fixed number of parts - -Thanks to 'jub0bs' for reporting this issue. - -Fixes #71490 -Fixes CVE-2025-22868 - -Change-Id: I2552731f46d4907f29aafe7863c558387b6bd6e2 -Reviewed-on: https://go-review.googlesource.com/c/oauth2/+/652155 -Auto-Submit: Gopher Robot -Reviewed-by: Damien Neil -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI ---- - vendor/golang.org/x/oauth2/jws/jws.go | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/oauth2/jws/jws.go b/vendor/golang.org/x/oauth2/jws/jws.go -index 95015648b..6f03a49d3 100644 ---- a/vendor/golang.org/x/oauth2/jws/jws.go -+++ b/vendor/golang.org/x/oauth2/jws/jws.go -@@ -165,11 +165,11 @@ func Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error) { - // Verify tests whether the provided JWT token's signature was produced by the private key - // associated with the supplied public key. - func Verify(token string, key *rsa.PublicKey) error { -- parts := strings.Split(token, ".") -- if len(parts) != 3 { -+ if strings.Count(token, ".") != 2 { - return errors.New("jws: invalid token received, token must have 3 parts") - } - -+ parts := strings.SplitN(token, ".", 3) - signedContent := parts[0] + "." + parts[1] - signatureString, err := base64.RawURLEncoding.DecodeString(parts[2]) - if err != nil { diff --git a/SPECS/keda/CVE-2025-22870.patch b/SPECS/keda/CVE-2025-22870.patch deleted file mode 100644 index 9cea4c70dc..0000000000 --- a/SPECS/keda/CVE-2025-22870.patch +++ /dev/null @@ -1,48 +0,0 @@ -From d42c66b8fc868546fc04bac6cb451d6402263fec Mon Sep 17 00:00:00 2001 -From: Sreenivasulu Malavathula -Date: Thu, 3 Apr 2025 13:33:51 -0500 -Subject: [PATCH] Address CVE-2025-22870 -Upstream Patch Reference: https://github.com/golang/go/commit/25177ecde0922c50753c043579d17828b7ee88e7 - ---- - vendor/golang.org/x/net/http/httpproxy/proxy.go | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/http/httpproxy/proxy.go b/vendor/golang.org/x/net/http/httpproxy/proxy.go -index 6404aaf1..d89c257a 100644 ---- a/vendor/golang.org/x/net/http/httpproxy/proxy.go -+++ b/vendor/golang.org/x/net/http/httpproxy/proxy.go -@@ -14,6 +14,7 @@ import ( - "errors" - "fmt" - "net" -+ "net/netip" - "net/url" - "os" - "strings" -@@ -177,8 +178,10 @@ func (cfg *config) useProxy(addr string) bool { - if host == "localhost" { - return false - } -- ip := net.ParseIP(host) -- if ip != nil { -+ nip, err := netip.ParseAddr(host) -+ var ip net.IP -+ if err == nil { -+ ip = net.IP(nip.AsSlice()) - if ip.IsLoopback() { - return false - } -@@ -360,6 +363,9 @@ type domainMatch struct { - } - - func (m domainMatch) match(host, port string, ip net.IP) bool { -+ if ip != nil { -+ return false -+ } - if strings.HasSuffix(host, m.host) || (m.matchHost && host == m.host[1:]) { - return m.port == "" || m.port == port - } --- -2.45.2 - diff --git a/SPECS/keda/CVE-2025-22872.patch b/SPECS/keda/CVE-2025-22872.patch deleted file mode 100644 index e48663a033..0000000000 --- a/SPECS/keda/CVE-2025-22872.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a8476aabe877b168950f4c9a0b68d2e784e621ad Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 25 Apr 2025 08:16:15 +0000 -Subject: [PATCH] Address CVE-2025-22872 - -Upstream Reference Link : https://github.com/golang/net/commit/e1fcd82abba34df74614020343be8eb1fe85f0d9.patch ---- - vendor/golang.org/x/net/html/token.go | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go -index 3c57880..6598c1f 100644 ---- a/vendor/golang.org/x/net/html/token.go -+++ b/vendor/golang.org/x/net/html/token.go -@@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { - if raw { - z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) - } -- // Look for a self-closing token like "
". -- if z.err == nil && z.buf[z.raw.end-2] == '/' { -+ // Look for a self-closing token (e.g.
). -+ // -+ // Originally, we did this by just checking that the last character of the -+ // tag (ignoring the closing bracket) was a solidus (/) character, but this -+ // is not always accurate. -+ // -+ // We need to be careful that we don't misinterpret a non-self-closing tag -+ // as self-closing, as can happen if the tag contains unquoted attribute -+ // values (i.e.

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.2 - diff --git a/SPECS/keda/CVE-2025-27144.patch b/SPECS/keda/CVE-2025-27144.patch deleted file mode 100644 index 43c7dffdef..0000000000 --- a/SPECS/keda/CVE-2025-27144.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 72e5dc031b9ecdc0ba2db04b715bb43b8eefcf59 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 09:57:57 +0000 -Subject: [PATCH] CVE-2025-27144 - ---- - vendor/github.com/go-jose/go-jose/v4/jwe.go | 5 +++-- - vendor/github.com/go-jose/go-jose/v4/jws.go | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/vendor/github.com/go-jose/go-jose/v4/jwe.go b/vendor/github.com/go-jose/go-jose/v4/jwe.go -index 89f03ee3..9f1322dc 100644 ---- a/vendor/github.com/go-jose/go-jose/v4/jwe.go -+++ b/vendor/github.com/go-jose/go-jose/v4/jwe.go -@@ -288,10 +288,11 @@ func ParseEncryptedCompact( - keyAlgorithms []KeyAlgorithm, - contentEncryption []ContentEncryption, - ) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) - if err != nil { -diff --git a/vendor/github.com/go-jose/go-jose/v4/jws.go b/vendor/github.com/go-jose/go-jose/v4/jws.go -index 3a912301..d09d8ba5 100644 ---- a/vendor/github.com/go-jose/go-jose/v4/jws.go -+++ b/vendor/github.com/go-jose/go-jose/v4/jws.go -@@ -327,10 +327,11 @@ func parseSignedCompact( - payload []byte, - signatureAlgorithms []SignatureAlgorithm, - ) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/keda/CVE-2025-29786.patch b/SPECS/keda/CVE-2025-29786.patch deleted file mode 100644 index 43afca11fd..0000000000 --- a/SPECS/keda/CVE-2025-29786.patch +++ /dev/null @@ -1,635 +0,0 @@ -From 387fc2ebedb3b5f54f9494c95506e6163f6f7af5 Mon Sep 17 00:00:00 2001 -From: Kshitiz Godara -Date: Mon, 24 Mar 2025 13:30:36 +0000 -Subject: [PATCH] Fix for CVE-2025-29786 - -Upstream source reference: -https://github.com/expr-lang/expr/pull/762 - -Signed-off-by: Kshitiz Godara ---- - .../github.com/expr-lang/expr/conf/config.go | 52 ++-- - .../expr-lang/expr/parser/parser.go | 228 +++++++++++++----- - vendor/github.com/expr-lang/expr/vm/utils.go | 3 - - vendor/github.com/expr-lang/expr/vm/vm.go | 23 +- - 4 files changed, 213 insertions(+), 93 deletions(-) - -diff --git a/vendor/github.com/expr-lang/expr/conf/config.go b/vendor/github.com/expr-lang/expr/conf/config.go -index 01a407a..2312984 100644 ---- a/vendor/github.com/expr-lang/expr/conf/config.go -+++ b/vendor/github.com/expr-lang/expr/conf/config.go -@@ -9,34 +9,46 @@ import ( - "github.com/expr-lang/expr/vm/runtime" - ) - -+const ( -+ // DefaultMemoryBudget represents an upper limit of memory usage -+ DefaultMemoryBudget uint = 1e6 -+ -+ // DefaultMaxNodes represents an upper limit of AST nodes -+ DefaultMaxNodes uint = 10000 -+) -+ - type FunctionsTable map[string]*builtin.Function - - type Config struct { -- Env any -- Types TypesTable -- MapEnv bool -- DefaultType reflect.Type -- Expect reflect.Kind -- ExpectAny bool -- Optimize bool -- Strict bool -- Profile bool -- ConstFns map[string]reflect.Value -- Visitors []ast.Visitor -- Functions FunctionsTable -- Builtins FunctionsTable -- Disabled map[string]bool // disabled builtins -+ Env any -+ Types TypesTable -+ MapEnv bool -+ DefaultType reflect.Type -+ Expect reflect.Kind -+ ExpectAny bool -+ Optimize bool -+ Strict bool -+ Profile bool -+ MaxNodes uint -+ MemoryBudget uint -+ ConstFns map[string]reflect.Value -+ Visitors []ast.Visitor -+ Functions FunctionsTable -+ Builtins FunctionsTable -+ Disabled map[string]bool // disabled builtins - } - - // CreateNew creates new config with default values. - func CreateNew() *Config { - c := &Config{ -- Optimize: true, -- Types: make(TypesTable), -- ConstFns: make(map[string]reflect.Value), -- Functions: make(map[string]*builtin.Function), -- Builtins: make(map[string]*builtin.Function), -- Disabled: make(map[string]bool), -+ Optimize: true, -+ Types: make(TypesTable), -+ MaxNodes: DefaultMaxNodes, -+ MemoryBudget: DefaultMemoryBudget, -+ ConstFns: make(map[string]reflect.Value), -+ Functions: make(map[string]*builtin.Function), -+ Builtins: make(map[string]*builtin.Function), -+ Disabled: make(map[string]bool), - } - for _, f := range builtin.Builtins { - c.Builtins[f.Name] = f -diff --git a/vendor/github.com/expr-lang/expr/parser/parser.go b/vendor/github.com/expr-lang/expr/parser/parser.go -index 6d96561..a75557c 100644 ---- a/vendor/github.com/expr-lang/expr/parser/parser.go -+++ b/vendor/github.com/expr-lang/expr/parser/parser.go -@@ -45,12 +45,47 @@ var predicates = map[string]struct { - } - - type parser struct { -- tokens []Token -- current Token -- pos int -- err *file.Error -- depth int // closure call depth -- config *conf.Config -+ tokens []Token -+ current Token -+ pos int -+ err *file.Error -+ depth int // closure call depth -+ config *conf.Config -+ nodeCount uint // tracks number of AST nodes created -+} -+ -+// checkNodeLimit verifies that adding a new node won't exceed configured limits -+func (p *parser) checkNodeLimit() error { -+ p.nodeCount++ -+ if p.config.MaxNodes > 0 && p.nodeCount > p.config.MaxNodes { -+ p.error("compilation failed: expression exceeds maximum allowed nodes") -+ return nil -+ } -+ return nil -+} -+ -+// createNode handles creation of regular nodes -+func (p *parser) createNode(n Node, loc file.Location) Node { -+ if err := p.checkNodeLimit(); err != nil { -+ return nil -+ } -+ if n == nil || p.err != nil { -+ return nil -+ } -+ n.SetLocation(loc) -+ return n -+} -+ -+// createMemberNode handles creation of member nodes -+func (p *parser) createMemberNode(n *MemberNode, loc file.Location) *MemberNode { -+ if err := p.checkNodeLimit(); err != nil { -+ return nil -+ } -+ if n == nil || p.err != nil { -+ return nil -+ } -+ n.SetLocation(loc) -+ return n - } - - type Tree struct { -@@ -127,6 +162,10 @@ func (p *parser) expect(kind Kind, values ...string) { - // parse functions - - func (p *parser) parseExpression(precedence int) Node { -+ if p.err != nil { -+ return nil -+ } -+ - if precedence == 0 && p.current.Is(Operator, "let") { - return p.parseVariableDeclaration() - } -@@ -185,19 +224,23 @@ func (p *parser) parseExpression(precedence int) Node { - nodeRight = p.parseExpression(op.Precedence) - } - -- nodeLeft = &BinaryNode{ -+ nodeLeft = p.createNode(&BinaryNode{ - Operator: opToken.Value, - Left: nodeLeft, - Right: nodeRight, -+ }, opToken.Location) -+ if nodeLeft == nil { -+ return nil - } -- nodeLeft.SetLocation(opToken.Location) - - if negate { -- nodeLeft = &UnaryNode{ -+ nodeLeft = p.createNode(&UnaryNode{ - Operator: "not", - Node: nodeLeft, -+ }, notToken.Location) -+ if nodeLeft == nil { -+ return nil - } -- nodeLeft.SetLocation(notToken.Location) - } - - goto next -@@ -224,13 +267,11 @@ func (p *parser) parseVariableDeclaration() Node { - value := p.parseExpression(0) - p.expect(Operator, ";") - node := p.parseExpression(0) -- let := &VariableDeclaratorNode{ -+ return p.createNode(&VariableDeclaratorNode{ - Name: variableName.Value, - Value: value, - Expr: node, -- } -- let.SetLocation(variableName.Location) -- return let -+ }, variableName.Location) - } - - func (p *parser) parseConditional(node Node) Node { -@@ -248,10 +289,13 @@ func (p *parser) parseConditional(node Node) Node { - expr2 = p.parseExpression(0) - } - -- node = &ConditionalNode{ -+ node = p.createNode(&ConditionalNode{ - Cond: node, - Exp1: expr1, - Exp2: expr2, -+ }, p.current.Location) -+ if node == nil { -+ return nil - } - } - return node -@@ -264,11 +308,13 @@ func (p *parser) parsePrimary() Node { - if op, ok := operator.Unary[token.Value]; ok { - p.next() - expr := p.parseExpression(op.Precedence) -- node := &UnaryNode{ -+ node := p.createNode(&UnaryNode{ - Operator: token.Value, - Node: expr, -+ }, token.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(token.Location) - return p.parsePostfixExpression(node) - } - } -@@ -290,8 +336,10 @@ func (p *parser) parsePrimary() Node { - p.next() - } - } -- node := &PointerNode{Name: name} -- node.SetLocation(token.Location) -+ node := p.createNode(&PointerNode{Name: name}, token.Location) -+ if node == nil { -+ return nil -+ } - return p.parsePostfixExpression(node) - } - } else { -@@ -320,23 +368,31 @@ func (p *parser) parseSecondary() Node { - p.next() - switch token.Value { - case "true": -- node := &BoolNode{Value: true} -- node.SetLocation(token.Location) -+ node = p.createNode(&BoolNode{Value: true}, token.Location) -+ if node == nil { -+ return nil -+ } - return node - case "false": -- node := &BoolNode{Value: false} -- node.SetLocation(token.Location) -+ node = p.createNode(&BoolNode{Value: false}, token.Location) -+ if node == nil { -+ return nil -+ } - return node - case "nil": -- node := &NilNode{} -- node.SetLocation(token.Location) -+ node = p.createNode(&NilNode{}, token.Location) -+ if node == nil { -+ return nil -+ } - return node - default: - if p.current.Is(Bracket, "(") { - node = p.parseCall(token, []Node{}, true) - } else { -- node = &IdentifierNode{Value: token.Value} -- node.SetLocation(token.Location) -+ node = p.createNode(&IdentifierNode{Value: token.Value}, token.Location) -+ if node == nil { -+ return nil -+ } - } - } - -@@ -383,8 +439,10 @@ func (p *parser) parseSecondary() Node { - return node - case String: - p.next() -- node = &StringNode{Value: token.Value} -- node.SetLocation(token.Location) -+ node = p.createNode(&StringNode{Value: token.Value}, token.Location) -+ if node == nil { -+ return nil -+ } - - default: - if token.Is(Bracket, "[") { -@@ -404,7 +462,7 @@ func (p *parser) toIntegerNode(number int64) Node { - p.error("integer literal is too large") - return nil - } -- return &IntegerNode{Value: int(number)} -+ return p.createNode(&IntegerNode{Value: int(number)}, p.current.Location) - } - - func (p *parser) toFloatNode(number float64) Node { -@@ -412,7 +470,7 @@ func (p *parser) toFloatNode(number float64) Node { - p.error("float literal is too large") - return nil - } -- return &FloatNode{Value: number} -+ return p.createNode(&FloatNode{Value: number}, p.current.Location) - } - - func (p *parser) parseCall(token Token, arguments []Node, checkOverrides bool) Node { -@@ -454,25 +512,34 @@ func (p *parser) parseCall(token Token, arguments []Node, checkOverrides bool) N - - p.expect(Bracket, ")") - -- node = &BuiltinNode{ -+ node = p.createNode(&BuiltinNode{ - Name: token.Value, - Arguments: arguments, -+ }, token.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(token.Location) - } else if _, ok := builtin.Index[token.Value]; ok && !p.config.Disabled[token.Value] && !isOverridden { -- node = &BuiltinNode{ -+ node = p.createNode(&BuiltinNode{ - Name: token.Value, - Arguments: p.parseArguments(arguments), -+ }, token.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(token.Location) -+ - } else { -- callee := &IdentifierNode{Value: token.Value} -- callee.SetLocation(token.Location) -- node = &CallNode{ -+ callee := p.createNode(&IdentifierNode{Value: token.Value}, token.Location) -+ if callee == nil { -+ return nil -+ } -+ node = p.createNode(&CallNode{ - Callee: callee, - Arguments: p.parseArguments(arguments), -+ }, token.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(token.Location) - } - return node - } -@@ -534,8 +601,10 @@ func (p *parser) parseArrayExpression(token Token) Node { - end: - p.expect(Bracket, "]") - -- node := &ArrayNode{Nodes: nodes} -- node.SetLocation(token.Location) -+ node := p.createNode(&ArrayNode{Nodes: nodes}, token.Location) -+ if node == nil { -+ return nil -+ } - return node - } - -@@ -561,8 +630,10 @@ func (p *parser) parseMapExpression(token Token) Node { - // * identifier, which is equivalent to a string - // * expression, which must be enclosed in parentheses -- (1 + 2) - if p.current.Is(Number) || p.current.Is(String) || p.current.Is(Identifier) { -- key = &StringNode{Value: p.current.Value} -- key.SetLocation(token.Location) -+ key = p.createNode(&StringNode{Value: p.current.Value}, p.current.Location) -+ if key == nil { -+ return nil -+ } - p.next() - } else if p.current.Is(Bracket, "(") { - key = p.parseExpression(0) -@@ -573,16 +644,20 @@ func (p *parser) parseMapExpression(token Token) Node { - p.expect(Operator, ":") - - node := p.parseExpression(0) -- pair := &PairNode{Key: key, Value: node} -- pair.SetLocation(token.Location) -+ pair := p.createNode(&PairNode{Key: key, Value: node}, token.Location) -+ if pair == nil { -+ return nil -+ } - nodes = append(nodes, pair) - } - - end: - p.expect(Bracket, "}") - -- node := &MapNode{Pairs: nodes} -- node.SetLocation(token.Location) -+ node := p.createNode(&MapNode{Pairs: nodes}, token.Location) -+ if node == nil { -+ return nil -+ } - return node - } - -@@ -607,8 +682,10 @@ func (p *parser) parsePostfixExpression(node Node) Node { - p.error("expected name") - } - -- property := &StringNode{Value: propertyToken.Value} -- property.SetLocation(propertyToken.Location) -+ property := p.createNode(&StringNode{Value: propertyToken.Value}, propertyToken.Location) -+ if property == nil { -+ return nil -+ } - - chainNode, isChain := node.(*ChainNode) - optional := postfixToken.Value == "?." -@@ -617,26 +694,33 @@ func (p *parser) parsePostfixExpression(node Node) Node { - node = chainNode.Node - } - -- memberNode := &MemberNode{ -+ memberNode := p.createMemberNode(&MemberNode{ - Node: node, - Property: property, - Optional: optional, -+ }, propertyToken.Location) -+ if memberNode == nil { -+ return nil - } -- memberNode.SetLocation(propertyToken.Location) - - if p.current.Is(Bracket, "(") { - memberNode.Method = true -- node = &CallNode{ -+ node = p.createNode(&CallNode{ - Callee: memberNode, - Arguments: p.parseArguments([]Node{}), -+ }, propertyToken.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(propertyToken.Location) - } else { - node = memberNode - } - - if isChain || optional { -- node = &ChainNode{Node: node} -+ node = p.createNode(&ChainNode{Node: node}, propertyToken.Location) -+ if node == nil { -+ return nil -+ } - } - - } else if postfixToken.Value == "[" { -@@ -650,11 +734,13 @@ func (p *parser) parsePostfixExpression(node Node) Node { - to = p.parseExpression(0) - } - -- node = &SliceNode{ -+ node = p.createNode(&SliceNode{ - Node: node, - To: to, -+ }, postfixToken.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(postfixToken.Location) - p.expect(Bracket, "]") - - } else { -@@ -668,25 +754,32 @@ func (p *parser) parsePostfixExpression(node Node) Node { - to = p.parseExpression(0) - } - -- node = &SliceNode{ -+ node = p.createNode(&SliceNode{ - Node: node, - From: from, - To: to, -+ }, postfixToken.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(postfixToken.Location) - p.expect(Bracket, "]") - - } else { - // Slice operator [:] was not found, - // it should be just an index node. -- node = &MemberNode{ -+ node = p.createNode(&MemberNode{ - Node: node, - Property: from, - Optional: optional, -+ }, postfixToken.Location) -+ if node == nil { -+ return nil - } -- node.SetLocation(postfixToken.Location) - if optional { -- node = &ChainNode{Node: node} -+ node = p.createNode(&ChainNode{Node: node}, postfixToken.Location) -+ if node == nil { -+ return nil -+ } - } - p.expect(Bracket, "]") - } -@@ -698,26 +791,29 @@ func (p *parser) parsePostfixExpression(node Node) Node { - } - return node - } -- - func (p *parser) parseComparison(left Node, token Token, precedence int) Node { - var rootNode Node - for { - comparator := p.parseExpression(precedence + 1) -- cmpNode := &BinaryNode{ -+ cmpNode := p.createNode(&BinaryNode{ - Operator: token.Value, - Left: left, - Right: comparator, -+ }, token.Location) -+ if cmpNode == nil { -+ return nil - } -- cmpNode.SetLocation(token.Location) - if rootNode == nil { - rootNode = cmpNode - } else { -- rootNode = &BinaryNode{ -+ rootNode = p.createNode(&BinaryNode{ - Operator: "&&", - Left: rootNode, - Right: cmpNode, -+ }, token.Location) -+ if rootNode == nil { -+ return nil - } -- rootNode.SetLocation(token.Location) - } - - left = comparator -diff --git a/vendor/github.com/expr-lang/expr/vm/utils.go b/vendor/github.com/expr-lang/expr/vm/utils.go -index fc2f5e7..1100513 100644 ---- a/vendor/github.com/expr-lang/expr/vm/utils.go -+++ b/vendor/github.com/expr-lang/expr/vm/utils.go -@@ -11,9 +11,6 @@ type ( - ) - - var ( -- // MemoryBudget represents an upper limit of memory usage. -- MemoryBudget uint = 1e6 -- - errorType = reflect.TypeOf((*error)(nil)).Elem() - ) - -diff --git a/vendor/github.com/expr-lang/expr/vm/vm.go b/vendor/github.com/expr-lang/expr/vm/vm.go -index 7e933ce..b497990 100644 ---- a/vendor/github.com/expr-lang/expr/vm/vm.go -+++ b/vendor/github.com/expr-lang/expr/vm/vm.go -@@ -11,6 +11,7 @@ import ( - "time" - - "github.com/expr-lang/expr/builtin" -+ "github.com/expr-lang/expr/conf" - "github.com/expr-lang/expr/file" - "github.com/expr-lang/expr/internal/deref" - "github.com/expr-lang/expr/vm/runtime" -@@ -20,11 +21,23 @@ func Run(program *Program, env any) (any, error) { - if program == nil { - return nil, fmt.Errorf("program is nil") - } -- - vm := VM{} - return vm.Run(program, env) - } - -+func RunWithConfig(program *Program, env any, config *conf.Config) (any, error) { -+ if program == nil { -+ return nil, fmt.Errorf("program is nil") -+ } -+ if config == nil { -+ return nil, fmt.Errorf("config is nil") -+ } -+ vm := VM{ -+ MemoryBudget: config.MemoryBudget, -+ } -+ return vm.Run(program, env) -+} -+ - func Debug() *VM { - vm := &VM{ - debug: true, -@@ -38,9 +51,9 @@ type VM struct { - Stack []any - Scopes []*Scope - Variables []any -+ MemoryBudget uint - ip int - memory uint -- memoryBudget uint - debug bool - step chan struct{} - curr chan int -@@ -76,7 +89,9 @@ func (vm *VM) Run(program *Program, env any) (_ any, err error) { - vm.Variables = make([]any, program.variables) - } - -- vm.memoryBudget = MemoryBudget -+ if vm.MemoryBudget == 0 { -+ vm.MemoryBudget = conf.DefaultMemoryBudget -+ } - vm.memory = 0 - vm.ip = 0 - -@@ -580,7 +595,7 @@ func (vm *VM) pop() any { - - func (vm *VM) memGrow(size uint) { - vm.memory += size -- if vm.memory >= vm.memoryBudget { -+ if vm.memory >= vm.MemoryBudget { - panic("memory budget exceeded") - } - } --- -2.48.1.431.g5a526e5e18 - diff --git a/SPECS/keda/CVE-2025-29923.patch b/SPECS/keda/CVE-2025-29923.patch deleted file mode 100644 index 7725f36142..0000000000 --- a/SPECS/keda/CVE-2025-29923.patch +++ /dev/null @@ -1,273 +0,0 @@ -From 0f6b06d4ffc97cc1304b0b861646bd7e16d08bbe Mon Sep 17 00:00:00 2001 -From: Sudipta Pandit -Date: Thu, 17 Apr 2025 16:54:13 +0530 -Subject: [PATCH] Fix CVE-2025-29923 in vendor redis-go - -Fix wrong patch: https://github.com/microsoft/azurelinux/pull/13201 ---- - .../github.com/redis/go-redis/v9/options.go | 14 +++++++++- - .../redis/go-redis/v9/osscluster.go | 18 ++++++++++-- - vendor/github.com/redis/go-redis/v9/redis.go | 8 ++++-- - vendor/github.com/redis/go-redis/v9/ring.go | 19 +++++++++++-- - .../github.com/redis/go-redis/v9/sentinel.go | 28 ++++++++++++++++--- - .../github.com/redis/go-redis/v9/universal.go | 24 +++++++++++++--- - 6 files changed, 95 insertions(+), 16 deletions(-) - -diff --git a/vendor/github.com/redis/go-redis/v9/options.go b/vendor/github.com/redis/go-redis/v9/options.go -index dff52ae8..567ed0ef 100644 ---- a/vendor/github.com/redis/go-redis/v9/options.go -+++ b/vendor/github.com/redis/go-redis/v9/options.go -@@ -142,11 +142,23 @@ type Options struct { - // Enables read only queries on slave/follower nodes. - readOnly bool - -- // Disable set-lib on connect. Default is false. -+ // DisableIndentity - Disable set-lib on connect. -+ // -+ // default: false -+ // -+ // Deprecated: Use DisableIdentity instead. - DisableIndentity bool - -+ // DisableIdentity is used to disable CLIENT SETINFO command on connect. -+ // -+ // default: false -+ DisableIdentity bool -+ - // Add suffix to client name. Default is empty. - IdentitySuffix string -+ -+ // UnstableResp3 enables Unstable mode for Redis Search module with RESP3. -+ UnstableResp3 bool - } - - func (opt *Options) init() { -diff --git a/vendor/github.com/redis/go-redis/v9/osscluster.go b/vendor/github.com/redis/go-redis/v9/osscluster.go -index 17f98d9d..c67244c8 100644 ---- a/vendor/github.com/redis/go-redis/v9/osscluster.go -+++ b/vendor/github.com/redis/go-redis/v9/osscluster.go -@@ -85,8 +85,19 @@ type ClusterOptions struct { - ConnMaxIdleTime time.Duration - ConnMaxLifetime time.Duration - -- TLSConfig *tls.Config -- DisableIndentity bool // Disable set-lib on connect. Default is false. -+ TLSConfig *tls.Config -+ -+ // DisableIndentity - Disable set-lib on connect. -+ // -+ // default: false -+ // -+ // Deprecated: Use DisableIdentity instead. -+ DisableIndentity bool -+ -+ // DisableIdentity is used to disable CLIENT SETINFO command on connect. -+ // -+ // default: false -+ DisableIdentity bool - - IdentitySuffix string // Add suffix to client name. Default is empty. - } -@@ -294,7 +305,8 @@ func (opt *ClusterOptions) clientOptions() *Options { - MaxActiveConns: opt.MaxActiveConns, - ConnMaxIdleTime: opt.ConnMaxIdleTime, - ConnMaxLifetime: opt.ConnMaxLifetime, -- DisableIndentity: opt.DisableIndentity, -+ DisableIdentity: opt.DisableIdentity, -+ DisableIndentity: opt.DisableIdentity, - IdentitySuffix: opt.IdentitySuffix, - TLSConfig: opt.TLSConfig, - // If ClusterSlots is populated, then we probably have an artificial -diff --git a/vendor/github.com/redis/go-redis/v9/redis.go b/vendor/github.com/redis/go-redis/v9/redis.go -index d25a0d31..46b955bb 100644 ---- a/vendor/github.com/redis/go-redis/v9/redis.go -+++ b/vendor/github.com/redis/go-redis/v9/redis.go -@@ -340,7 +340,7 @@ func (c *baseClient) initConn(ctx context.Context, cn *pool.Conn) error { - return err - } - -- if !c.opt.DisableIndentity { -+ if !c.opt.DisableIdentity && !c.opt.DisableIndentity { - libName := "" - libVer := Version() - if c.opt.IdentitySuffix != "" { -@@ -349,7 +349,11 @@ func (c *baseClient) initConn(ctx context.Context, cn *pool.Conn) error { - p := conn.Pipeline() - p.ClientSetInfo(ctx, WithLibraryName(libName)) - p.ClientSetInfo(ctx, WithLibraryVersion(libVer)) -- _, _ = p.Exec(ctx) -+ // Handle network errors (e.g. timeouts) in CLIENT SETINFO to avoid -+ // out of order responses later on. -+ if _, err = p.Exec(ctx); err != nil && !isRedisError(err) { -+ return err -+ } - } - - if c.opt.OnConnect != nil { -diff --git a/vendor/github.com/redis/go-redis/v9/ring.go b/vendor/github.com/redis/go-redis/v9/ring.go -index 4ae00542..a8a00cd0 100644 ---- a/vendor/github.com/redis/go-redis/v9/ring.go -+++ b/vendor/github.com/redis/go-redis/v9/ring.go -@@ -98,8 +98,20 @@ type RingOptions struct { - TLSConfig *tls.Config - Limiter Limiter - -+ // DisableIndentity - Disable set-lib on connect. -+ // -+ // default: false -+ // -+ // Deprecated: Use DisableIdentity instead. -+ - DisableIndentity bool -- IdentitySuffix string -+ -+ // DisableIdentity is used to disable CLIENT SETINFO command on connect. -+ // -+ // default: false -+ DisableIdentity bool -+ IdentitySuffix string -+ UnstableResp3 bool - } - - func (opt *RingOptions) init() { -@@ -166,8 +178,11 @@ func (opt *RingOptions) clientOptions() *Options { - TLSConfig: opt.TLSConfig, - Limiter: opt.Limiter, - -+ DisableIdentity: opt.DisableIdentity, -+ - DisableIndentity: opt.DisableIndentity, -- IdentitySuffix: opt.IdentitySuffix, -+ IdentitySuffix: opt.IdentitySuffix, -+ UnstableResp3: opt.UnstableResp3, - } - } - -diff --git a/vendor/github.com/redis/go-redis/v9/sentinel.go b/vendor/github.com/redis/go-redis/v9/sentinel.go -index 188f8849..2988e300 100644 ---- a/vendor/github.com/redis/go-redis/v9/sentinel.go -+++ b/vendor/github.com/redis/go-redis/v9/sentinel.go -@@ -80,8 +80,20 @@ type FailoverOptions struct { - - TLSConfig *tls.Config - -+ // DisableIndentity - Disable set-lib on connect. -+ // -+ // default: false -+ // -+ // Deprecated: Use DisableIdentity instead. - DisableIndentity bool -- IdentitySuffix string -+ -+ // DisableIdentity is used to disable CLIENT SETINFO command on connect. -+ // -+ // default: false -+ DisableIdentity bool -+ -+ IdentitySuffix string -+ UnstableResp3 bool - } - - func (opt *FailoverOptions) clientOptions() *Options { -@@ -117,8 +129,12 @@ func (opt *FailoverOptions) clientOptions() *Options { - - TLSConfig: opt.TLSConfig, - -+ DisableIdentity: opt.DisableIdentity, -+ - DisableIndentity: opt.DisableIndentity, -- IdentitySuffix: opt.IdentitySuffix, -+ -+ IdentitySuffix: opt.IdentitySuffix, -+ UnstableResp3: opt.UnstableResp3, - } - } - -@@ -153,9 +169,11 @@ func (opt *FailoverOptions) sentinelOptions(addr string) *Options { - ConnMaxLifetime: opt.ConnMaxLifetime, - - TLSConfig: opt.TLSConfig, -+ DisableIdentity: opt.DisableIdentity, - - DisableIndentity: opt.DisableIndentity, -- IdentitySuffix: opt.IdentitySuffix, -+ IdentitySuffix: opt.IdentitySuffix, -+ UnstableResp3: opt.UnstableResp3, - } - } - -@@ -194,8 +212,10 @@ func (opt *FailoverOptions) clusterOptions() *ClusterOptions { - - TLSConfig: opt.TLSConfig, - -+ DisableIdentity: opt.DisableIdentity, -+ - DisableIndentity: opt.DisableIndentity, -- IdentitySuffix: opt.IdentitySuffix, -+ IdentitySuffix: opt.IdentitySuffix, - } - } - -diff --git a/vendor/github.com/redis/go-redis/v9/universal.go b/vendor/github.com/redis/go-redis/v9/universal.go -index 275bef3d..1ec64269 100644 ---- a/vendor/github.com/redis/go-redis/v9/universal.go -+++ b/vendor/github.com/redis/go-redis/v9/universal.go -@@ -61,14 +61,25 @@ type UniversalOptions struct { - RouteByLatency bool - RouteRandomly bool - -- // The sentinel master name. -- // Only failover clients. -+ // MasterName is the sentinel master name. -+ // Only for failover clients. - - MasterName string - -+ // DisableIndentity - Disable set-lib on connect. -+ // -+ // default: false -+ // -+ // Deprecated: Use DisableIdentity instead. - DisableIndentity bool -- IdentitySuffix string --} -+ -+ // DisableIdentity is used to disable CLIENT SETINFO command on connect. -+ // -+ // default: false -+ DisableIdentity bool -+ -+ IdentitySuffix string -+ UnstableResp3 bool} - - // Cluster returns cluster options created from the universal options. - func (o *UniversalOptions) Cluster() *ClusterOptions { -@@ -112,6 +123,7 @@ func (o *UniversalOptions) Cluster() *ClusterOptions { - - TLSConfig: o.TLSConfig, - -+ DisableIdentity: o.DisableIdentity, - DisableIndentity: o.DisableIndentity, - IdentitySuffix: o.IdentitySuffix, - } -@@ -158,6 +170,9 @@ func (o *UniversalOptions) Failover() *FailoverOptions { - - TLSConfig: o.TLSConfig, - -+ ReplicaOnly: o.ReadOnly, -+ -+ DisableIdentity: o.DisableIdentity, - DisableIndentity: o.DisableIndentity, - IdentitySuffix: o.IdentitySuffix, - } -@@ -201,6 +216,7 @@ func (o *UniversalOptions) Simple() *Options { - - TLSConfig: o.TLSConfig, - -+ DisableIdentity: o.DisableIdentity, - DisableIndentity: o.DisableIndentity, - IdentitySuffix: o.IdentitySuffix, - } --- -2.34.1 - diff --git a/SPECS/keda/CVE-2025-30204.patch b/SPECS/keda/CVE-2025-30204.patch deleted file mode 100644 index 6eb7de916b..0000000000 --- a/SPECS/keda/CVE-2025-30204.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 84c7f3d0b9dccb4a20d0ad4de10896d40344ba26 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Mar 2025 20:43:26 +0000 -Subject: [PATCH] CVE-2025-30204 -Upstream Patch Reference : -v4 : https://github.com/golang-jwt/jwt/commit/2f0e9add62078527821828c76865661aa7718a84 -v5 : https://github.com/golang-jwt/jwt/commit/0951d184286dece21f73c85673fd308786ffe9c3 ---- - github.com/golang-jwt/jwt/v4/parser.go | 36 +++++++++++++++++++++++--- - github.com/golang-jwt/jwt/v5/parser.go | 36 +++++++++++++++++++++++--- - 2 files changed, 66 insertions(+), 6 deletions(-) - -diff --git a/vendor/github.com/golang-jwt/jwt/v4/parser.go b/vendor/github.com/golang-jwt/jwt/v4/parser.go -index c0a6f69..8e7e67c 100644 ---- a/vendor/github.com/golang-jwt/jwt/v4/parser.go -+++ b/vendor/github.com/golang-jwt/jwt/v4/parser.go -@@ -7,6 +7,8 @@ import ( - "strings" - ) - -+const tokenDelimiter = "." -+ - type Parser struct { - // If populated, only these methods will be considered valid. - // -@@ -123,9 +125,10 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - // It's only ever useful in cases where you know the signature is valid (because it has - // been checked previously in the stack) and you want to extract values from it. - func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { -- parts = strings.Split(tokenString, ".") -- if len(parts) != 3 { -- return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) -+ var ok bool -+ parts, ok = splitToken(tokenString) -+ if !ok { -+ return nil, nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - token = &Token{Raw: tokenString} -@@ -175,3 +178,30 @@ func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Toke - - return token, parts, nil - } -+ -+// splitToken splits a token string into three parts: header, claims, and signature. It will only -+// return true if the token contains exactly two delimiters and three parts. In all other cases, it -+// will return nil parts and false. -+func splitToken(token string) ([]string, bool) { -+ parts := make([]string, 3) -+ header, remain, ok := strings.Cut(token, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[0] = header -+ claims, remain, ok := strings.Cut(remain, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[1] = claims -+ // One more cut to ensure the signature is the last part of the token and there are no more -+ // delimiters. This avoids an issue where malicious input could contain additional delimiters -+ // causing unecessary overhead parsing tokens. -+ signature, _, unexpected := strings.Cut(remain, tokenDelimiter) -+ if unexpected { -+ return nil, false -+ } -+ parts[2] = signature -+ -+ return parts, true -+} -diff --git a/vendor/github.com/golang-jwt/jwt/v5/parser.go b/vendor/github.com/golang-jwt/jwt/v5/parser.go -index ecf99af..054c7eb 100644 ---- a/vendor/github.com/golang-jwt/jwt/v5/parser.go -+++ b/vendor/github.com/golang-jwt/jwt/v5/parser.go -@@ -8,6 +8,8 @@ import ( - "strings" - ) - -+const tokenDelimiter = "." -+ - type Parser struct { - // If populated, only these methods will be considered valid. - validMethods []string -@@ -136,9 +138,10 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - // It's only ever useful in cases where you know the signature is valid (since it has already - // been or will be checked elsewhere in the stack) and you want to extract values from it. - func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { -- parts = strings.Split(tokenString, ".") -- if len(parts) != 3 { -- return nil, parts, newError("token contains an invalid number of segments", ErrTokenMalformed) -+ var ok bool -+ parts, ok = splitToken(tokenString) -+ if !ok { -+ return nil, nil, newError("token contains an invalid number of segments", ErrTokenMalformed) - } - - token = &Token{Raw: tokenString} -@@ -196,6 +199,33 @@ func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Toke - return token, parts, nil - } - -+// splitToken splits a token string into three parts: header, claims, and signature. It will only -+// return true if the token contains exactly two delimiters and three parts. In all other cases, it -+// will return nil parts and false. -+func splitToken(token string) ([]string, bool) { -+ parts := make([]string, 3) -+ header, remain, ok := strings.Cut(token, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[0] = header -+ claims, remain, ok := strings.Cut(remain, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[1] = claims -+ // One more cut to ensure the signature is the last part of the token and there are no more -+ // delimiters. This avoids an issue where malicious input could contain additional delimiters -+ // causing unecessary overhead parsing tokens. -+ signature, _, unexpected := strings.Cut(remain, tokenDelimiter) -+ if unexpected { -+ return nil, false -+ } -+ parts[2] = signature -+ -+ return parts, true -+} -+ - // DecodeSegment decodes a JWT specific base64url encoding. This function will - // take into account whether the [Parser] is configured with additional options, - // such as [WithStrictDecoding] or [WithPaddingAllowed]. --- -2.45.2 - diff --git a/SPECS/keda/keda.signatures.json b/SPECS/keda/keda.signatures.json deleted file mode 100644 index 04ea160db2..0000000000 --- a/SPECS/keda/keda.signatures.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Signatures": { - "keda-2.14.1-vendor.tar.gz": "8bd0e8a26be3011de6455166874e3613ce39e99f6e7c8af49eae7cbf05d02efe", - "keda-2.14.1.tar.gz": "5a843fccb39f23ea4de03a88a803129223baf9131ec802bbae438cb83bcf3272" - } -} diff --git a/SPECS/keda/keda.spec b/SPECS/keda/keda.spec deleted file mode 100644 index 32f08ac729..0000000000 --- a/SPECS/keda/keda.spec +++ /dev/null @@ -1,147 +0,0 @@ -Summary: Kubernetes-based Event Driven Autoscaling -Name: keda -Version: 2.14.1 -Release: 8%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -URL: https://github.com/kedacore/keda -#Source0: https://github.com/kedacore/%%{name}/archive/refs/tags/v%%{version}.tar.gz -Source0: %{name}-%{version}.tar.gz -# Below is a manually created tarball, no download link. -# We're using pre-populated Go modules from this tarball, since network is disabled during build time. -# How to re-build this file: -# 1. wget https://github.com/kedacore/%%{name}/archive/refs/tags/v%%{version}.tar.gz -O %%{name}-%%{version}.tar.gz -# 2. tar -xf %%{name}-%%{version}.tar.gz -# 3. cd %%{name}-%%{version} -# 4. go mod vendor -# 5. tar --sort=name \ -# --mtime="2021-04-26 00:00Z" \ -# --owner=0 --group=0 --numeric-owner \ -# --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ -# -cf %%{name}-%%{version}-vendor.tar.gz vendor -# -Source1: %{name}-%{version}-vendor.tar.gz -Patch0: CVE-2024-6104.patch -Patch1: CVE-2024-45338.patch -Patch2: CVE-2025-27144.patch -Patch3: CVE-2025-22868.patch -Patch4: CVE-2025-29786.patch -Patch5: CVE-2025-30204.patch -Patch6: CVE-2025-29923.patch -Patch7: CVE-2025-22870.patch -Patch8: CVE-2024-51744.patch -Patch9: CVE-2025-22872.patch -BuildRequires: golang >= 1.15 - -%description -KEDA is a Kubernetes-based Event Driven Autoscaling component. -It provides event driven scale for any container running in Kubernetes - -%prep -%autosetup -p1 -a1 - -%build -export LDFLAGS="-X=github.com/kedacore/keda/v2/version.GitCommit= -X=github.com/kedacore/keda/v2/version.Version=main" - -go build -ldflags "$LDFLAGS" -mod=vendor -v -o bin/keda cmd/operator/main.go - -gofmt -l -w -s . -go vet ./... - -go build -ldflags "$LDFLAGS" -mod=vendor -v -o bin/keda-adapter cmd/adapter/main.go - -go build -ldflags "$LDFLAGS" -mod=vendor -v -o bin/keda-admission-webhooks cmd/webhooks/main.go - -%install -mkdir -p %{buildroot}%{_bindir} -cp ./bin/keda %{buildroot}%{_bindir} -cp ./bin/keda-adapter %{buildroot}%{_bindir} -cp ./bin/keda-admission-webhooks %{buildroot}%{_bindir} - -%files -%defattr(-,root,root) -%license LICENSE -%{_bindir}/%{name} -%{_bindir}/%{name}-adapter -%{_bindir}/%{name}-admission-webhooks - -%changelog -* Fri May 30 2025 Ranjan Dutta - 2.14.1-8 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 -- Fixes an incorrect patch introduced with the patch for CVE-2025-29923 -- Fixes patches being overridden during the build step -- Fixes CVE-2025-22870 and CVE-2024-51744 - - -* Fri Apr 28 2025 Ranjan Dutta - 2.14.1-5 -- merge from Azure Linux tag 3.0.20250423-3.0 -- Patch CVE-2025-30204, CVE-2025-29923 -- Fix CVE-2025-29786 with an upstream patch - -* Fri Mar 21 2025 Anuj Mittal - 2.14.1-4 -- Bump Release to rebuild - -* Mon Mar 03 2025 Kanishk Bansal - 2.14.1-3 -- Fix CVE-2025-27144, CVE-2025-22868 with an upstream patch - -* Wed Jan 08 2025 - 2.14.1-2 -- Add patch for CVE-2024-45338 - -* Fri Sep 27 2024 Archana Choudhary - 2.14.1-1 -- Upgrade to 2.14.1 -- Fix CVE-2024-35255 in github.com/Azure/azure-sdk-for-go/sdk/azidentity - -* Thu Aug 01 2024 Bala - 2.14.0-2 -- Added CVE-2024-6104.patch - -* Mon May 06 2024 Sean Dougherty - 2.14.0-1 -- Upgrade to 2.14.0 for Azure Linux 3.0 -- Added keda-admission-webhooks binary, added to KEDA in v2.10.0 - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 2.4.0-15 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 2.4.0-14 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 2.4.0-13 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 2.4.0-12 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 2.4.0-11 -- Bump release to rebuild with go 1.19.10 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 2.4.0-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 2.4.0-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 2.4.0-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 2.4.0-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 2.4.0-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 2.4.0-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 2.4.0-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 2.4.0-3 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jun 14 2022 Muhammad Falak - 2.4.0-2 -- Bump release to rebuild with golang 1.18.3 -- License verified - -* Wed Aug 25 2021 Henry Li - 2.4.0-1 -- Original version for CBL-Mariner diff --git a/SPECS/kexec-tools/51_kexec_tools.cfg b/SPECS/kexec-tools/51_kexec_tools.cfg new file mode 100644 index 0000000000..71c2b7d934 --- /dev/null +++ b/SPECS/kexec-tools/51_kexec_tools.cfg @@ -0,0 +1 @@ +GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX crashkernel=512M-32G:256M,32G-:512M" diff --git a/SPECS/kexec-tools/98-kexec.rules b/SPECS/kexec-tools/98-kexec.rules new file mode 100644 index 0000000000..b73b701ef9 --- /dev/null +++ b/SPECS/kexec-tools/98-kexec.rules @@ -0,0 +1,16 @@ +SUBSYSTEM=="cpu", ACTION=="add", GOTO="kdump_reload" +SUBSYSTEM=="cpu", ACTION=="remove", GOTO="kdump_reload" +SUBSYSTEM=="memory", ACTION=="online", GOTO="kdump_reload" +SUBSYSTEM=="memory", ACTION=="offline", GOTO="kdump_reload" + +GOTO="kdump_reload_end" + +LABEL="kdump_reload" + +# If kdump is not loaded, calling kdump-udev-throttle will end up +# doing nothing, but systemd-run will always generate extra logs for +# each call, so trigger the kdump-udev-throttler only if kdump +# service is active to avoid unnecessary logs +RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'" + +LABEL="kdump_reload_end" diff --git a/SPECS/kexec-tools/dracut-early-kdump-module-setup.sh b/SPECS/kexec-tools/dracut-early-kdump-module-setup.sh new file mode 100755 index 0000000000..e069867042 --- /dev/null +++ b/SPECS/kexec-tools/dracut-early-kdump-module-setup.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +. /etc/sysconfig/kdump +. /lib/kdump/kdump-lib.sh + +KDUMP_KERNEL="" +KDUMP_INITRD="" + +check() { + if [ ! -f /etc/sysconfig/kdump ] || [ ! -f /lib/kdump/kdump-lib.sh ]\ + || [ -n "${IN_KDUMP}" ] + then + return 1 + fi + return 255 +} + +depends() { + echo "base shutdown" + return 0 +} + +prepare_kernel_initrd() { + KDUMP_BOOTDIR=$(check_boot_dir "${KDUMP_BOOTDIR}") + if [ -z "$KDUMP_KERNELVER" ]; then + kdump_kver=`uname -r` + if [ "$kernel" != "$kdump_kver" ]; then + dwarn "Using current kernel version '$kdump_kver' for early kdump," \ + "but the initramfs is generated for kernel version '$kernel'" + fi + else + kdump_kver=$KDUMP_KERNELVER + fi + KDUMP_KERNEL="${KDUMP_BOOTDIR}/${KDUMP_IMG}-${kdump_kver}${KDUMP_IMG_EXT}" + KDUMP_INITRD="${KDUMP_BOOTDIR}/initramfs-${kdump_kver}kdump.img" +} + +install() { + prepare_kernel_initrd + if [ ! -f "$KDUMP_KERNEL" ]; then + derror "Could not find required kernel for earlykdump," \ + "earlykdump will not work!" + return 1 + fi + if [ ! -f "$KDUMP_INITRD" ]; then + derror "Could not find required kdump initramfs for earlykdump," \ + "please ensure kdump initramfs is generated first," \ + "earlykdump will not work!" + return 1 + fi + + inst_multiple tail find cut dirname hexdump + inst_simple "/etc/sysconfig/kdump" + inst_binary "/usr/sbin/kexec" + inst_binary "/usr/bin/gawk" "/usr/bin/awk" + inst_script "/lib/kdump/kdump-lib.sh" "/lib/kdump-lib.sh" + inst_hook cmdline 00 "$moddir/early-kdump.sh" + inst_binary "$KDUMP_KERNEL" + inst_binary "$KDUMP_INITRD" + + ln_r "$KDUMP_KERNEL" "${KDUMP_BOOTDIR}/${KDUMP_IMG}-earlykdump${KDUMP_IMG_EXT}" + ln_r "$KDUMP_INITRD" "${KDUMP_BOOTDIR}/initramfs-earlykdump.img" + + chmod -x "${initdir}/$KDUMP_KERNEL" +} diff --git a/SPECS/kexec-tools/dracut-early-kdump.sh b/SPECS/kexec-tools/dracut-early-kdump.sh new file mode 100755 index 0000000000..69a34eb996 --- /dev/null +++ b/SPECS/kexec-tools/dracut-early-kdump.sh @@ -0,0 +1,75 @@ +#! /bin/sh + +KEXEC=/sbin/kexec +standard_kexec_args="-p" + +EARLY_KDUMP_INITRD="" +EARLY_KDUMP_KERNEL="" +EARLY_KDUMP_CMDLINE="" +EARLY_KDUMP_KERNELVER="" +EARLY_KEXEC_ARGS="" + +. /etc/sysconfig/kdump +. /lib/dracut-lib.sh +. /lib/kdump-lib.sh + +prepare_parameters() +{ + EARLY_KDUMP_CMDLINE=$(prepare_cmdline "${KDUMP_COMMANDLINE}" "${KDUMP_COMMANDLINE_REMOVE}" "${KDUMP_COMMANDLINE_APPEND}") + KDUMP_BOOTDIR=$(check_boot_dir "${KDUMP_BOOTDIR}") + + EARLY_KDUMP_KERNEL="${KDUMP_BOOTDIR}/${KDUMP_IMG}-earlykdump${KDUMP_IMG_EXT}" + EARLY_KDUMP_INITRD="${KDUMP_BOOTDIR}/initramfs-earlykdump.img" +} + +early_kdump_load() +{ + check_kdump_feasibility + if [ $? -ne 0 ]; then + return 1 + fi + + if is_fadump_capable; then + echo "WARNING: early kdump doesn't support fadump." + return 1 + fi + + check_current_kdump_status + if [ $? == 0 ]; then + return 1 + fi + + prepare_parameters + + EARLY_KEXEC_ARGS=$(prepare_kexec_args "${KEXEC_ARGS}") + + if is_secure_boot_enforced; then + echo "Secure Boot is enabled. Using kexec file based syscall." + EARLY_KEXEC_ARGS="$EARLY_KEXEC_ARGS -s" + fi + + $KEXEC ${EARLY_KEXEC_ARGS} $standard_kexec_args \ + --command-line="$EARLY_KDUMP_CMDLINE" \ + --initrd=$EARLY_KDUMP_INITRD $EARLY_KDUMP_KERNEL + if [ $? == 0 ]; then + echo "kexec: loaded early-kdump kernel" + return 0 + else + echo "kexec: failed to load early-kdump kernel" + return 1 + fi +} + +set_early_kdump() +{ + if getargbool 0 rd.earlykdump; then + echo "early-kdump is enabled." + early_kdump_load + else + echo "early-kdump is disabled." + fi + + return 0 +} + +set_early_kdump diff --git a/SPECS/kexec-tools/dracut-kdump-capture.service b/SPECS/kexec-tools/dracut-kdump-capture.service new file mode 100644 index 0000000000..3f20aba3dc --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump-capture.service @@ -0,0 +1,30 @@ +# This file is part of systemd. +# +# systemd 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. + +[Unit] +Description=Kdump Vmcore Save Service +After=initrd.target initrd-parse-etc.service sysroot.mount +After=dracut-initqueue.service dracut-pre-mount.service dracut-mount.service dracut-pre-pivot.service +Before=initrd-cleanup.service +ConditionPathExists=/etc/initrd-release +OnFailure=emergency.target +OnFailureJobMode=isolate + +[Service] +Environment=DRACUT_SYSTEMD=1 +Environment=NEWROOT=/sysroot +Type=oneshot +ExecStart=/bin/kdump.sh +StandardInput=null +StandardOutput=syslog +StandardError=syslog+console +KillMode=process +RemainAfterExit=yes + +# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash +# terminates cleanly. +KillSignal=SIGHUP diff --git a/SPECS/kexec-tools/dracut-kdump-emergency.service b/SPECS/kexec-tools/dracut-kdump-emergency.service new file mode 100644 index 0000000000..e0232843da --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump-emergency.service @@ -0,0 +1,28 @@ +# This file is part of systemd. +# +# systemd 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 service will be placed in kdump initramfs and replace both the systemd +# emergency service and dracut emergency shell. IOW, any emergency will be +# kick this service and in turn isolating to kdump error handler. + +[Unit] +Description=Kdump Emergency +DefaultDependencies=no +IgnoreOnIsolate=yes + +[Service] +ExecStart=/usr/bin/systemctl --no-block isolate kdump-error-handler.service +Type=oneshot +StandardInput=tty-force +StandardOutput=inherit +StandardError=inherit +KillMode=process +IgnoreSIGPIPE=no + +# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash +# terminates cleanly. +KillSignal=SIGHUP diff --git a/SPECS/kexec-tools/dracut-kdump-emergency.target b/SPECS/kexec-tools/dracut-kdump-emergency.target new file mode 100644 index 0000000000..a1bb493546 --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump-emergency.target @@ -0,0 +1,14 @@ +# This file is part of systemd. +# +# systemd 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. + +[Unit] +Description=Emergency Mode +Documentation=man:systemd.special(7) +Requires=emergency.service +After=emergency.service +AllowIsolate=yes +IgnoreOnIsolate=yes diff --git a/SPECS/kexec-tools/dracut-kdump-error-handler.service b/SPECS/kexec-tools/dracut-kdump-error-handler.service new file mode 100644 index 0000000000..a23b75e404 --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump-error-handler.service @@ -0,0 +1,33 @@ +# This file is part of systemd. +# +# systemd 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 service will run the real kdump error handler code. Executing the +# failure action configured in kdump.conf + +[Unit] +Description=Kdump Error Handler +DefaultDependencies=no +After=systemd-vconsole-setup.service +Wants=systemd-vconsole-setup.service +AllowIsolate=yes + +[Service] +Environment=HOME=/ +Environment=DRACUT_SYSTEMD=1 +Environment=NEWROOT=/sysroot +WorkingDirectory=/ +ExecStart=/bin/kdump-error-handler.sh +Type=oneshot +StandardInput=tty-force +StandardOutput=inherit +StandardError=inherit +KillMode=process +IgnoreSIGPIPE=no + +# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash +# terminates cleanly. +KillSignal=SIGHUP diff --git a/SPECS/kexec-tools/dracut-kdump-error-handler.sh b/SPECS/kexec-tools/dracut-kdump-error-handler.sh new file mode 100755 index 0000000000..fc2b9328d9 --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump-error-handler.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +. /lib/kdump-lib-initramfs.sh + +set -o pipefail +export PATH=$PATH:$KDUMP_SCRIPT_DIR + +get_kdump_confs +do_failure_action +do_final_action diff --git a/SPECS/kexec-tools/dracut-kdump.sh b/SPECS/kexec-tools/dracut-kdump.sh new file mode 100755 index 0000000000..b71278df67 --- /dev/null +++ b/SPECS/kexec-tools/dracut-kdump.sh @@ -0,0 +1,268 @@ +#!/bin/sh + +# continue here only if we have to save dump. +if [ -f /etc/fadump.initramfs ] && [ ! -f /proc/device-tree/rtas/ibm,kernel-dump ] && [ ! -f /proc/device-tree/ibm,opal/dump/mpipl-boot ]; then + exit 0 +fi + +exec &> /dev/console +. /lib/dracut-lib.sh +. /lib/kdump-lib-initramfs.sh + +set -o pipefail +DUMP_RETVAL=0 + +export PATH=$PATH:$KDUMP_SCRIPT_DIR + +do_dump() +{ + local _ret + + eval $DUMP_INSTRUCTION + _ret=$? + + if [ $_ret -ne 0 ]; then + echo "kdump: saving vmcore failed" + fi + + return $_ret +} + +do_kdump_pre() +{ + local _ret + + if [ -n "$KDUMP_PRE" ]; then + "$KDUMP_PRE" + _ret=$? + if [ $_ret -ne 0 ]; then + echo "kdump: $KDUMP_PRE exited with $_ret status" + return $_ret + fi + fi + + if [ -d /etc/kdump/pre.d ]; then + for file in /etc/kdump/pre.d/*; do + "$file" + _ret=$? + if [ $_ret -ne 0 ]; then + echo "kdump: $file exited with $_ret status" + fi + done + fi + return 0 +} + +do_kdump_post() +{ + local _ret + + if [ -d /etc/kdump/post.d ]; then + for file in /etc/kdump/post.d/*; do + "$file" "$1" + _ret=$? + if [ $_ret -ne 0 ]; then + echo "kdump: $file exited with $_ret status" + fi + done + fi + + if [ -n "$KDUMP_POST" ]; then + "$KDUMP_POST" "$1" + _ret=$? + if [ $_ret -ne 0 ]; then + echo "kdump: $KDUMP_POST exited with $_ret status" + fi + fi +} + +add_dump_code() +{ + DUMP_INSTRUCTION=$1 +} + +dump_raw() +{ + local _raw=$1 + + [ -b "$_raw" ] || return 1 + + echo "kdump: saving to raw disk $_raw" + + if ! $(echo -n $CORE_COLLECTOR|grep -q makedumpfile); then + _src_size=`ls -l /proc/vmcore | cut -d' ' -f5` + _src_size_mb=$(($_src_size / 1048576)) + monitor_dd_progress $_src_size_mb & + fi + + echo "kdump: saving vmcore" + $CORE_COLLECTOR /proc/vmcore | dd of=$_raw bs=$DD_BLKSIZE >> /tmp/dd_progress_file 2>&1 || return 1 + sync + + echo "kdump: saving vmcore complete" + return 0 +} + +dump_ssh() +{ + local _opt="-i $1 -o BatchMode=yes -o StrictHostKeyChecking=yes" + local _dir="$KDUMP_PATH/$HOST_IP-$DATEDIR" + local _host=$2 + + echo "kdump: saving to $_host:$_dir" + + cat /var/lib/random-seed > /dev/urandom + ssh -q $_opt $_host mkdir -p $_dir || return 1 + + save_vmcore_dmesg_ssh ${DMESG_COLLECTOR} ${_dir} "${_opt}" $_host + save_opalcore_ssh ${_dir} "${_opt}" $_host + + echo "kdump: saving vmcore" + + if [ "${CORE_COLLECTOR%%[[:blank:]]*}" = "scp" ]; then + scp -q $_opt /proc/vmcore "$_host:$_dir/vmcore-incomplete" || return 1 + ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore" || return 1 + else + $CORE_COLLECTOR /proc/vmcore | ssh $_opt $_host "dd bs=512 of=$_dir/vmcore-incomplete" || return 1 + ssh $_opt $_host "mv $_dir/vmcore-incomplete $_dir/vmcore.flat" || return 1 + fi + + echo "kdump: saving vmcore complete" + return 0 +} + +save_opalcore_ssh() { + local _path=$1 + local _opts="$2" + local _location=$3 + + if [ ! -f $OPALCORE ]; then + # Check if we are on an old kernel that uses a different path + if [ -f /sys/firmware/opal/core ]; then + OPALCORE="/sys/firmware/opal/core" + else + return 0 + fi + fi + + echo "kdump: saving opalcore" + scp $_opts $OPALCORE $_location:$_path/opalcore-incomplete + if [ $? -ne 0 ]; then + echo "kdump: saving opalcore failed" + return 1 + fi + + ssh $_opts $_location mv $_path/opalcore-incomplete $_path/opalcore + echo "kdump: saving opalcore complete" + return 0 +} + +save_vmcore_dmesg_ssh() { + local _dmesg_collector=$1 + local _path=$2 + local _opts="$3" + local _location=$4 + + echo "kdump: saving vmcore-dmesg.txt" + $_dmesg_collector /proc/vmcore | ssh $_opts $_location "dd of=$_path/vmcore-dmesg-incomplete.txt" + _exitcode=$? + + if [ $_exitcode -eq 0 ]; then + ssh -q $_opts $_location mv $_path/vmcore-dmesg-incomplete.txt $_path/vmcore-dmesg.txt + echo "kdump: saving vmcore-dmesg.txt complete" + else + echo "kdump: saving vmcore-dmesg.txt failed" + fi +} + +get_host_ip() +{ + local _host + if is_nfs_dump_target || is_ssh_dump_target + then + kdumpnic=$(getarg kdumpnic=) + [ -z "$kdumpnic" ] && echo "kdump: failed to get kdumpnic!" && return 1 + _host=`ip addr show dev $kdumpnic|grep '[ ]*inet'` + [ $? -ne 0 ] && echo "kdump: wrong kdumpnic: $kdumpnic" && return 1 + _host=`echo $_host | head -n 1 | cut -d' ' -f2` + _host="${_host%%/*}" + [ -z "$_host" ] && echo "kdump: wrong kdumpnic: $kdumpnic" && return 1 + HOST_IP=$_host + fi + return 0 +} + +read_kdump_conf() +{ + if [ ! -f "$KDUMP_CONF" ]; then + echo "kdump: $KDUMP_CONF not found" + return + fi + + get_kdump_confs + + # rescan for add code for dump target + while read config_opt config_val; + do + # remove inline comments after the end of a directive. + case "$config_opt" in + dracut_args) + config_val=$(get_dracut_args_target "$config_val") + if [ -n "$config_val" ]; then + config_val=$(get_mntpoint_from_target "$config_val") + add_dump_code "dump_fs $config_val" + fi + ;; + ext[234]|xfs|btrfs|minix|nfs) + config_val=$(get_mntpoint_from_target "$config_val") + add_dump_code "dump_fs $config_val" + ;; + raw) + add_dump_code "dump_raw $config_val" + ;; + ssh) + add_dump_code "dump_ssh $SSH_KEY_LOCATION $config_val" + ;; + esac + done <<< "$(read_strip_comments $KDUMP_CONF)" +} + +fence_kdump_notify() +{ + if [ -n "$FENCE_KDUMP_NODES" ]; then + $FENCE_KDUMP_SEND $FENCE_KDUMP_ARGS $FENCE_KDUMP_NODES & + fi +} + +read_kdump_conf +fence_kdump_notify + +get_host_ip +if [ $? -ne 0 ]; then + echo "kdump: get_host_ip exited with non-zero status!" + exit 1 +fi + +if [ -z "$DUMP_INSTRUCTION" ]; then + add_dump_code "dump_fs $NEWROOT" +fi + +do_kdump_pre +if [ $? -ne 0 ]; then + echo "kdump: kdump_pre script exited with non-zero status!" + do_final_action +fi +make_trace_mem "kdump saving vmcore" '1:shortmem' '2+:mem' '3+:slab' +do_dump +DUMP_RETVAL=$? + +do_kdump_post $DUMP_RETVAL +if [ $? -ne 0 ]; then + echo "kdump: kdump_post script exited with non-zero status!" +fi + +if [ $DUMP_RETVAL -ne 0 ]; then + exit 1 +fi + +do_final_action diff --git a/SPECS/kexec-tools/dracut-module-setup.sh b/SPECS/kexec-tools/dracut-module-setup.sh new file mode 100755 index 0000000000..4cb67929b9 --- /dev/null +++ b/SPECS/kexec-tools/dracut-module-setup.sh @@ -0,0 +1,865 @@ +#!/bin/bash + +. $dracutfunctions +. /lib/kdump/kdump-lib.sh + +if ! [[ -d "${initdir}/tmp" ]]; then + mkdir -p "${initdir}/tmp" +fi + +check() { + [[ $debug ]] && set -x + #kdumpctl sets this explicitly + if [ -z "$IN_KDUMP" ] || [ ! -f /etc/kdump.conf ] + then + return 1 + fi + return 0 +} + +depends() { + local _dep="base shutdown" + + is_squash_available() { + for kmodule in squashfs overlay loop; do + if [ -z "$KDUMP_KERNELVER" ]; then + modprobe --dry-run $kmodule &>/dev/null || return 1 + else + modprobe -S $KDUMP_KERNELVER --dry-run $kmodule &>/dev/null || return 1 + fi + done + } + + if is_squash_available && ! is_fadump_capable; then + _dep="$_dep squash" + else + dwarning "Required modules to build a squashed kdump image is missing!" + fi + + if [ -n "$( find /sys/devices -name drm )" ] || [ -d /sys/module/hyperv_fb ]; then + _dep="$_dep drm" + fi + + if is_generic_fence_kdump || is_pcs_fence_kdump; then + _dep="$_dep network" + fi + + echo $_dep + return 0 +} + +kdump_is_bridge() { + [ -d /sys/class/net/"$1"/bridge ] +} + +kdump_is_bond() { + [ -d /sys/class/net/"$1"/bonding ] +} + +kdump_is_team() { + [ -f /usr/bin/teamnl ] && teamnl $1 ports &> /dev/null +} + +kdump_is_vlan() { + [ -f /proc/net/vlan/"$1" ] +} + +# $1: netdev name +source_ifcfg_file() { + local ifcfg_file + + ifcfg_file=$(get_ifcfg_filename $1) + if [ -f "${ifcfg_file}" ]; then + . ${ifcfg_file} + else + dwarning "The ifcfg file of $1 is not found!" + fi +} + +# $1: netdev name +kdump_setup_dns() { + local _nameserver _dns + local _dnsfile=${initdir}/etc/cmdline.d/42dns.conf + + source_ifcfg_file $1 + + [ -n "$DNS1" ] && echo "nameserver=$DNS1" > "$_dnsfile" + [ -n "$DNS2" ] && echo "nameserver=$DNS2" >> "$_dnsfile" + + while read content; + do + _nameserver=$(echo $content | grep ^nameserver) + [ -z "$_nameserver" ] && continue + + _dns=$(echo $_nameserver | cut -d' ' -f2) + [ -z "$_dns" ] && continue + + if [ ! -f $_dnsfile ] || [ ! $(cat $_dnsfile | grep -q $_dns) ]; then + echo "nameserver=$_dns" >> "$_dnsfile" + fi + done < "/etc/resolv.conf" +} + +#$1: netdev name +#$2: srcaddr +#if it use static ip echo it, or echo null +kdump_static_ip() { + local _netdev="$1" _srcaddr="$2" _ipv6_flag + local _netmask _gateway _ipaddr _target _nexthop + + _ipaddr=$(ip addr show dev $_netdev permanent | awk "/ $_srcaddr\/.* /{print \$2}") + + if is_ipv6_address $_srcaddr; then + _ipv6_flag="-6" + fi + + if [ -n "$_ipaddr" ]; then + _gateway=$(ip $_ipv6_flag route list dev $_netdev | \ + awk '/^default /{print $3}' | head -n 1) + + if [ "x" != "x"$_ipv6_flag ]; then + # _ipaddr="2002::56ff:feb6:56d5/64", _netmask is the number after "/" + _netmask=${_ipaddr#*\/} + _srcaddr="[$_srcaddr]" + _gateway="[$_gateway]" + else + _netmask=$(ipcalc -m $_ipaddr | cut -d'=' -f2) + fi + echo -n "${_srcaddr}::${_gateway}:${_netmask}::" + fi + + /sbin/ip $_ipv6_flag route show | grep -v default |\ + grep ".*via.* $_netdev " | grep -v "^[[:space:]]*nexthop" |\ + while read _route; do + _target=`echo $_route | cut -d ' ' -f1` + _nexthop=`echo $_route | cut -d ' ' -f3` + if [ "x" != "x"$_ipv6_flag ]; then + _target="[$_target]" + _nexthop="[$_nexthop]" + fi + echo "rd.route=$_target:$_nexthop:$_netdev" + done >> ${initdir}/etc/cmdline.d/45route-static.conf + + kdump_handle_mulitpath_route $_netdev $_srcaddr +} + +kdump_handle_mulitpath_route() { + local _netdev="$1" _srcaddr="$2" _ipv6_flag + local _target _nexthop _route _weight _max_weight _rule + + if is_ipv6_address $_srcaddr; then + _ipv6_flag="-6" + fi + + while IFS="" read _route; do + if [[ "$_route" =~ [[:space:]]+nexthop ]]; then + _route=$(echo "$_route" | sed -e 's/^[[:space:]]*//') + # Parse multipath route, using previous _target + [[ "$_target" == 'default' ]] && continue + [[ "$_route" =~ .*via.*\ $_netdev ]] || continue + + _weight=`echo "$_route" | cut -d ' ' -f7` + if [[ "$_weight" -gt "$_max_weight" ]]; then + _nexthop=`echo "$_route" | cut -d ' ' -f3` + _max_weight=$_weight + if [ "x" != "x"$_ipv6_flag ]; then + _rule="rd.route=[$_target]:[$_nexthop]:$_netdev" + else + _rule="rd.route=$_target:$_nexthop:$_netdev" + fi + fi + else + [[ -n "$_rule" ]] && echo "$_rule" + _target=`echo "$_route" | cut -d ' ' -f1` + _rule="" _max_weight=0 _weight=0 + fi + done >> ${initdir}/etc/cmdline.d/45route-static.conf\ + <<< "$(/sbin/ip $_ipv6_flag route show)" + + [[ -n $_rule ]] && echo $_rule >> ${initdir}/etc/cmdline.d/45route-static.conf +} + +kdump_get_mac_addr() { + cat /sys/class/net/$1/address +} + +#Bonding or team master modifies the mac address +#of its slaves, we should use perm address +kdump_get_perm_addr() { + local addr=$(ethtool -P $1 | sed -e 's/Permanent address: //') + if [ -z "$addr" ] || [ "$addr" = "00:00:00:00:00:00" ] + then + derror "Can't get the permanent address of $1" + else + echo "$addr" + fi +} + +# Prefix kernel assigned names with "kdump-". EX: eth0 -> kdump-eth0 +# Because kernel assigned names are not persistent between 1st and 2nd +# kernel. We could probably end up with eth0 being eth1, eth0 being +# eth1, and naming conflict happens. +kdump_setup_ifname() { + local _ifname + + # If ifname already has 'kdump-' prefix, we must be switching from + # fadump to kdump. Skip prefixing 'kdump-' in this case as adding + # another prefix may truncate the ifname. Since an ifname with + # 'kdump-' is already persistent, this should be fine. + if [[ $1 =~ eth* ]] && [[ ! $1 =~ ^kdump-* ]]; then + _ifname="kdump-$1" + else + _ifname="$1" + fi + + echo "$_ifname" +} + +kdump_setup_bridge() { + local _netdev=$1 + local _brif _dev _mac _kdumpdev + for _dev in `ls /sys/class/net/$_netdev/brif/`; do + _kdumpdev=$_dev + if kdump_is_bond "$_dev"; then + kdump_setup_bond "$_dev" + elif kdump_is_team "$_dev"; then + kdump_setup_team "$_dev" + elif kdump_is_vlan "$_dev"; then + kdump_setup_vlan "$_dev" + else + _mac=$(kdump_get_mac_addr $_dev) + _kdumpdev=$(kdump_setup_ifname $_dev) + echo -n " ifname=$_kdumpdev:$_mac" >> ${initdir}/etc/cmdline.d/41bridge.conf + fi + _brif+="$_kdumpdev," + done + echo " bridge=$_netdev:$(echo $_brif | sed -e 's/,$//')" >> ${initdir}/etc/cmdline.d/41bridge.conf +} + +kdump_setup_bond() { + local _netdev=$1 + local _dev _mac _slaves _kdumpdev + for _dev in `cat /sys/class/net/$_netdev/bonding/slaves`; do + _mac=$(kdump_get_perm_addr $_dev) + _kdumpdev=$(kdump_setup_ifname $_dev) + echo -n " ifname=$_kdumpdev:$_mac" >> ${initdir}/etc/cmdline.d/42bond.conf + _slaves+="$_kdumpdev," + done + echo -n " bond=$_netdev:$(echo $_slaves | sed 's/,$//')" >> ${initdir}/etc/cmdline.d/42bond.conf + # Get bond options specified in ifcfg + + source_ifcfg_file $_netdev + + bondoptions=":$(echo $BONDING_OPTS | xargs echo | tr " " ",")" + echo "$bondoptions" >> ${initdir}/etc/cmdline.d/42bond.conf +} + +kdump_setup_team() { + local _netdev=$1 + local _dev _mac _slaves _kdumpdev + for _dev in `teamnl $_netdev ports | awk -F':' '{print $2}'`; do + _mac=$(kdump_get_perm_addr $_dev) + _kdumpdev=$(kdump_setup_ifname $_dev) + echo -n " ifname=$_kdumpdev:$_mac" >> ${initdir}/etc/cmdline.d/44team.conf + _slaves+="$_kdumpdev," + done + echo " team=$_netdev:$(echo $_slaves | sed -e 's/,$//')" >> ${initdir}/etc/cmdline.d/44team.conf + #Buggy version teamdctl outputs to stderr! + #Try to use the latest version of teamd. + teamdctl "$_netdev" config dump > ${initdir}/tmp/$$-$_netdev.conf + if [ $? -ne 0 ] + then + derror "teamdctl failed." + exit 1 + fi + inst_dir /etc/teamd + inst_simple ${initdir}/tmp/$$-$_netdev.conf "/etc/teamd/$_netdev.conf" + rm -f ${initdir}/tmp/$$-$_netdev.conf +} + +kdump_setup_vlan() { + local _netdev=$1 + local _phydev="$(awk '/^Device:/{print $2}' /proc/net/vlan/"$_netdev")" + local _netmac="$(kdump_get_mac_addr $_phydev)" + local _kdumpdev + + #Just support vlan over bond, it is not easy + #to support all other complex setup + if kdump_is_bridge "$_phydev"; then + derror "Vlan over bridge is not supported!" + exit 1 + elif kdump_is_team "$_phydev"; then + derror "Vlan over team is not supported!" + exit 1 + elif kdump_is_bond "$_phydev"; then + kdump_setup_bond "$_phydev" + echo " vlan=$(kdump_setup_ifname $_netdev):$_phydev" > ${initdir}/etc/cmdline.d/43vlan.conf + else + _kdumpdev="$(kdump_setup_ifname $_phydev)" + echo " vlan=$(kdump_setup_ifname $_netdev):$_kdumpdev ifname=$_kdumpdev:$_netmac" > ${initdir}/etc/cmdline.d/43vlan.conf + fi +} + +# setup s390 znet cmdline +# $1: netdev name +kdump_setup_znet() { + local _options="" + local _netdev=$1 + + source_ifcfg_file $_netdev + + for i in $OPTIONS; do + _options=${_options},$i + done + echo rd.znet=${NETTYPE},${SUBCHANNELS}${_options} rd.znet_ifname=$_netdev:${SUBCHANNELS} > ${initdir}/etc/cmdline.d/30znet.conf +} + +kdump_get_ip_route() +{ + local _route=$(/sbin/ip -o route get to $1 2>&1) + [ $? != 0 ] && die "Bad kdump network destination: $1" + echo $_route +} + +kdump_get_ip_route_field() +{ + if `echo $1 | grep -q $2`; then + echo ${1##*$2} | cut -d ' ' -f1 + fi +} + +kdump_get_remote_ip() +{ + local _remote=$(get_remote_host $1) _remote_temp + if is_hostname $_remote; then + _remote_temp=`getent ahosts $_remote | grep -v : | head -n 1` + if [ -z "$_remote_temp" ]; then + _remote_temp=`getent ahosts $_remote | head -n 1` + fi + _remote=`echo $_remote_temp | cut -d' ' -f1` + fi + echo $_remote +} + +# Setup dracut to bring up network interface that enable +# initramfs accessing giving destination +# $1: destination host +kdump_install_net() { + local _destaddr _srcaddr _route _netdev + local _static _proto _ip_conf _ip_opts _ifname_opts + + _destaddr=$(kdump_get_remote_ip $1) + _route=$(kdump_get_ip_route $_destaddr) + _srcaddr=$(kdump_get_ip_route_field "$_route" "src") + _netdev=$(kdump_get_ip_route_field "$_route" "dev") + _netmac=$(kdump_get_mac_addr $_netdev) + + if [ "$(uname -m)" = "s390x" ]; then + kdump_setup_znet $_netdev + fi + + _static=$(kdump_static_ip $_netdev $_srcaddr) + if [ -n "$_static" ]; then + _proto=none + elif is_ipv6_address $_srcaddr; then + _proto=either6 + else + _proto=dhcp + fi + + _ip_conf="${initdir}/etc/cmdline.d/40ip.conf" + _ip_opts=" ip=${_static}$(kdump_setup_ifname $_netdev):${_proto}" + + # dracut doesn't allow duplicated configuration for same NIC, even they're exactly the same. + # so we have to avoid adding duplicates + # We should also check /proc/cmdline for existing ip=xx arg. + # For example, iscsi boot will specify ip=xxx arg in cmdline. + if [ ! -f $_ip_conf ] || ! grep -q $_ip_opts $_ip_conf &&\ + ! grep -q "ip=[^[:space:]]*$_netdev" /proc/cmdline; then + echo "$_ip_opts" >> $_ip_conf + fi + + if kdump_is_bridge "$_netdev"; then + kdump_setup_bridge "$_netdev" + elif kdump_is_bond "$_netdev"; then + kdump_setup_bond "$_netdev" + elif kdump_is_team "$_netdev"; then + kdump_setup_team "$_netdev" + elif kdump_is_vlan "$_netdev"; then + kdump_setup_vlan "$_netdev" + else + _ifname_opts=" ifname=$(kdump_setup_ifname $_netdev):$_netmac" + echo "$_ifname_opts" >> $_ip_conf + fi + + kdump_setup_dns "$_netdev" + + if [ ! -f ${initdir}/etc/cmdline.d/50neednet.conf ]; then + # network-manager module needs this parameter + echo "rd.neednet" >> ${initdir}/etc/cmdline.d/50neednet.conf + fi + + # Save netdev used for kdump as cmdline + # Whoever calling kdump_install_net() is setting up the default gateway, + # ie. bootdev/kdumpnic. So don't override the setting if calling + # kdump_install_net() for another time. For example, after setting eth0 as + # the default gate way for network dump, eth1 in the fence kdump path will + # call kdump_install_net again and we don't want eth1 to be the default + # gateway. + if [ ! -f ${initdir}/etc/cmdline.d/60kdumpnic.conf ] && + [ ! -f ${initdir}/etc/cmdline.d/70bootdev.conf ]; then + echo "kdumpnic=$(kdump_setup_ifname $_netdev)" > ${initdir}/etc/cmdline.d/60kdumpnic.conf + echo "bootdev=$(kdump_setup_ifname $_netdev)" > ${initdir}/etc/cmdline.d/70bootdev.conf + fi +} + +# install etc/kdump/pre.d and /etc/kdump/post.d +kdump_install_pre_post_conf() { + if [ -d /etc/kdump/pre.d ]; then + for file in /etc/kdump/pre.d/*; do + if [ -x "$file" ]; then + dracut_install $file + else + echo "$file is not executable" + fi + done + fi + + if [ -d /etc/kdump/post.d ]; then + for file in /etc/kdump/post.d/*; do + if [ -x "$file" ]; then + dracut_install $file + else + echo "$file is not executable" + fi + done + fi +} + +default_dump_target_install_conf() +{ + local _target _fstype + local _mntpoint _save_path + + is_user_configured_dump_target && return + + _save_path=$(get_bind_mount_source $(get_save_path)) + _target=$(get_target_from_path $_save_path) + _mntpoint=$(get_mntpoint_from_target $_target) + + _fstype=$(get_fs_type_from_target $_target) + if is_fs_type_nfs $_fstype; then + kdump_install_net "$_target" + _fstype="nfs" + else + _target=$(kdump_get_persistent_dev $_target) + fi + + echo "$_fstype $_target" >> ${initdir}/tmp/$$-kdump.conf + + # don't touch the path under root mount + if [ "$_mntpoint" != "/" ]; then + _save_path=${_save_path##"$_mntpoint"} + fi + + #erase the old path line, then insert the parsed path + sed -i "/^path/d" ${initdir}/tmp/$$-kdump.conf + echo "path $_save_path" >> ${initdir}/tmp/$$-kdump.conf +} + +#install kdump.conf and what user specifies in kdump.conf +kdump_install_conf() { + local _opt _val _pdev + (read_strip_comments /etc/kdump.conf) > ${initdir}/tmp/$$-kdump.conf + + while read _opt _val; + do + # remove inline comments after the end of a directive. + case "$_opt" in + raw) + _pdev=$(persistent_policy="by-id" kdump_get_persistent_dev $_val) + sed -i -e "s#^$_opt[[:space:]]\+$_val#$_opt $_pdev#" ${initdir}/tmp/$$-kdump.conf + ;; + ext[234]|xfs|btrfs|minix) + _pdev=$(kdump_get_persistent_dev $_val) + sed -i -e "s#^$_opt[[:space:]]\+$_val#$_opt $_pdev#" ${initdir}/tmp/$$-kdump.conf + ;; + ssh|nfs) + kdump_install_net "$_val" + ;; + dracut_args) + if [[ $(get_dracut_args_fstype "$_val") = nfs* ]] ; then + kdump_install_net "$(get_dracut_args_target "$_val")" + fi + ;; + kdump_pre|kdump_post|extra_bins) + dracut_install $_val + ;; + core_collector) + dracut_install "${_val%%[[:blank:]]*}" + ;; + esac + done <<< "$(read_strip_comments /etc/kdump.conf)" + + kdump_install_pre_post_conf + + default_dump_target_install_conf + + kdump_configure_fence_kdump "${initdir}/tmp/$$-kdump.conf" + inst "${initdir}/tmp/$$-kdump.conf" "/etc/kdump.conf" + rm -f ${initdir}/tmp/$$-kdump.conf +} + +# Remove user custom configurations sysctl.conf & sysctl.d/* +# and apply some optimization for kdump +overwrite_sysctl_conf() { + # As custom configurations like vm.min_free_kbytes can lead + # to OOM issues in kdump kernel, avoid them + rm -f "${initdir}/etc/sysctl.conf" + rm -rf "${initdir}/etc/sysctl.d" + rm -rf "${initdir}/run/sysctl.d" + rm -rf "${initdir}/usr/lib/sysctl.d" + + mkdir -p "${initdir}/etc/sysctl.d" + echo "vm.zone_reclaim_mode = 3" > "${initdir}/etc/sysctl.d/99-zone-reclaim.conf" +} + +kdump_iscsi_get_rec_val() { + + local result + + # The open-iscsi 742 release changed to using flat files in + # /var/lib/iscsi. + + result=$(/sbin/iscsiadm --show -m session -r ${1} | grep "^${2} = ") + result=${result##* = } + echo $result +} + +kdump_get_iscsi_initiator() { + local _initiator + local initiator_conf="/etc/iscsi/initiatorname.iscsi" + + [ -f "$initiator_conf" ] || return 1 + + while read _initiator; do + [ -z "${_initiator%%#*}" ] && continue # Skip comment lines + + case $_initiator in + InitiatorName=*) + initiator=${_initiator#InitiatorName=} + echo "rd.iscsi.initiator=${initiator}" + return 0;; + *) ;; + esac + done < ${initiator_conf} + + return 1 +} + +# Figure out iBFT session according to session type +is_ibft() { + [ "$(kdump_iscsi_get_rec_val $1 "node.discovery_type")" = fw ] +} + +kdump_setup_iscsi_device() { + local path=$1 + local tgt_name; local tgt_ipaddr; + local username; local password; local userpwd_str; + local username_in; local password_in; local userpwd_in_str; + local netroot_str ; local initiator_str; + local netroot_conf="${initdir}/etc/cmdline.d/50iscsi.conf" + local initiator_conf="/etc/iscsi/initiatorname.iscsi" + + dinfo "Found iscsi component $1" + + # Check once before getting explicit values, so we can bail out early, + # e.g. in case of pure-hardware(all-offload) iscsi. + if ! /sbin/iscsiadm -m session -r ${path} &>/dev/null ; then + return 1 + fi + + if is_ibft ${path}; then + return + fi + + # Remove software iscsi cmdline generated by 95iscsi, + # and let kdump regenerate here. + rm -f ${initdir}/etc/cmdline.d/95iscsi.conf + + tgt_name=$(kdump_iscsi_get_rec_val ${path} "node.name") + tgt_ipaddr=$(kdump_iscsi_get_rec_val ${path} "node.conn\[0\].address") + + # get and set username and password details + username=$(kdump_iscsi_get_rec_val ${path} "node.session.auth.username") + [ "$username" == "" ] && username="" + password=$(kdump_iscsi_get_rec_val ${path} "node.session.auth.password") + [ "$password" == "" ] && password="" + username_in=$(kdump_iscsi_get_rec_val ${path} "node.session.auth.username_in") + [ -n "$username" ] && userpwd_str="$username:$password" + + # get and set incoming username and password details + [ "$username_in" == "" ] && username_in="" + password_in=$(kdump_iscsi_get_rec_val ${path} "node.session.auth.password_in") + [ "$password_in" == "" ] && password_in="" + + [ -n "$username_in" ] && userpwd_in_str=":$username_in:$password_in" + + kdump_install_net "$tgt_ipaddr" + + # prepare netroot= command line + # FIXME: Do we need to parse and set other parameters like protocol, port + # iscsi_iface_name, netdev_name, LUN etc. + + if is_ipv6_address $tgt_ipaddr; then + tgt_ipaddr="[$tgt_ipaddr]" + fi + netroot_str="netroot=iscsi:${userpwd_str}${userpwd_in_str}@$tgt_ipaddr::::$tgt_name" + + [[ -f $netroot_conf ]] || touch $netroot_conf + + # If netroot target does not exist already, append. + if ! grep -q $netroot_str $netroot_conf; then + echo $netroot_str >> $netroot_conf + dinfo "Appended $netroot_str to $netroot_conf" + fi + + # Setup initator + initiator_str=$(kdump_get_iscsi_initiator) + [ $? -ne "0" ] && derror "Failed to get initiator name" && return 1 + + # If initiator details do not exist already, append. + if ! grep -q "$initiator_str" $netroot_conf; then + echo "$initiator_str" >> $netroot_conf + dinfo "Appended "$initiator_str" to $netroot_conf" + fi +} + +kdump_check_iscsi_targets () { + # If our prerequisites are not met, fail anyways. + type -P iscsistart >/dev/null || return 1 + + kdump_check_setup_iscsi() ( + local _dev + _dev=$1 + + [[ -L /sys/dev/block/$_dev ]] || return + cd "$(readlink -f /sys/dev/block/$_dev)" + until [[ -d sys || -d iscsi_session ]]; do + cd .. + done + [[ -d iscsi_session ]] && kdump_setup_iscsi_device "$PWD" + ) + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for_each_host_dev_and_slaves_all kdump_check_setup_iscsi + } +} + +# hostname -a is deprecated, do it by ourself +get_alias() { + local ips + local entries + local alias_set + + ips=$(hostname -I) + for ip in $ips + do + # in /etc/hosts, alias can come at the 2nd column + entries=$(grep $ip /etc/hosts | awk '{ $1=""; print $0 }') + if [ $? -eq 0 ]; then + alias_set="$alias_set $entries" + fi + done + + echo $alias_set +} + +is_localhost() { + local hostnames=$(hostname -A) + local shortnames=$(hostname -A -s) + local aliasname=$(get_alias) + local nodename=$1 + + hostnames="$hostnames $shortnames $aliasname" + + for name in ${hostnames}; do + if [ "$name" == "$nodename" ]; then + return 0 + fi + done + return 1 +} + +# retrieves fence_kdump nodes from Pacemaker cluster configuration +get_pcs_fence_kdump_nodes() { + local nodes + + pcs cluster sync > /dev/null 2>&1 && pcs cluster cib-upgrade > /dev/null 2>&1 + # get cluster nodes from cluster cib, get interface and ip address + nodelist=`pcs cluster cib | xmllint --xpath "/cib/status/node_state/@uname" -` + + # nodelist is formed as 'uname="node1" uname="node2" ... uname="nodeX"' + # we need to convert each to node1, node2 ... nodeX in each iteration + for node in ${nodelist}; do + # convert $node from 'uname="nodeX"' to 'nodeX' + eval $node + nodename=$uname + # Skip its own node name + if is_localhost $nodename; then + continue + fi + nodes="$nodes $nodename" + done + + echo $nodes +} + +# retrieves fence_kdump args from config file +get_pcs_fence_kdump_args() { + if [ -f $FENCE_KDUMP_CONFIG_FILE ]; then + . $FENCE_KDUMP_CONFIG_FILE + echo $FENCE_KDUMP_OPTS + fi +} + +get_generic_fence_kdump_nodes() { + local filtered + local nodes + + nodes=$(get_option_value "fence_kdump_nodes") + for node in ${nodes}; do + # Skip its own node name + if is_localhost $node; then + continue + fi + filtered="$filtered $node" + done + echo $filtered +} + +# setup fence_kdump in cluster +# setup proper network and install needed files +kdump_configure_fence_kdump () { + local kdump_cfg_file=$1 + local nodes + local args + + if is_generic_fence_kdump; then + nodes=$(get_generic_fence_kdump_nodes) + + elif is_pcs_fence_kdump; then + nodes=$(get_pcs_fence_kdump_nodes) + + # set appropriate options in kdump.conf + echo "fence_kdump_nodes $nodes" >> ${kdump_cfg_file} + + args=$(get_pcs_fence_kdump_args) + if [ -n "$args" ]; then + echo "fence_kdump_args $args" >> ${kdump_cfg_file} + fi + + else + # fence_kdump not configured + return 1 + fi + + # setup network for each node + for node in ${nodes}; do + kdump_install_net $node + done + + dracut_install /etc/hosts + dracut_install /etc/nsswitch.conf + dracut_install $FENCE_KDUMP_SEND +} + +# Install a random seed used to feed /dev/urandom +# By the time kdump service starts, /dev/uramdom is already fed by systemd +kdump_install_random_seed() { + local poolsize=`cat /proc/sys/kernel/random/poolsize` + + if [ ! -d ${initdir}/var/lib/ ]; then + mkdir -p ${initdir}/var/lib/ + fi + + dd if=/dev/urandom of=${initdir}/var/lib/random-seed \ + bs=$poolsize count=1 2> /dev/null +} + +install() { + kdump_install_conf + overwrite_sysctl_conf + + if is_ssh_dump_target; then + kdump_install_random_seed + fi + dracut_install -o /etc/adjtime /etc/localtime + inst "$moddir/monitor_dd_progress" "/kdumpscripts/monitor_dd_progress" + chmod +x ${initdir}/kdumpscripts/monitor_dd_progress + inst "/bin/dd" "/bin/dd" + inst "/bin/grep" "/bin/grep" + inst "/bin/tail" "/bin/tail" + inst "/bin/date" "/bin/date" + inst "/bin/sync" "/bin/sync" + inst "/bin/cut" "/bin/cut" + inst "/bin/head" "/bin/head" + inst "/bin/awk" "/bin/awk" + inst "/bin/sed" "/bin/sed" + inst "/sbin/makedumpfile" "/sbin/makedumpfile" + inst "/sbin/vmcore-dmesg" "/sbin/vmcore-dmesg" + inst "/lib/kdump/kdump-lib.sh" "/lib/kdump-lib.sh" + inst "/lib/kdump/kdump-lib-initramfs.sh" "/lib/kdump-lib-initramfs.sh" + inst "$moddir/kdump.sh" "/usr/bin/kdump.sh" + inst "$moddir/kdump-capture.service" "$systemdsystemunitdir/kdump-capture.service" + mkdir -p "$initdir/$systemdsystemunitdir/initrd.target.wants" + ln_r "$systemdsystemunitdir/kdump-capture.service" "$systemdsystemunitdir/initrd.target.wants/kdump-capture.service" + inst "$moddir/kdump-error-handler.sh" "/usr/bin/kdump-error-handler.sh" + inst "$moddir/kdump-error-handler.service" "$systemdsystemunitdir/kdump-error-handler.service" + # Replace existing emergency service and emergency target + cp "$moddir/kdump-emergency.service" "$initdir/$systemdsystemunitdir/emergency.service" + cp "$moddir/kdump-emergency.target" "$initdir/$systemdsystemunitdir/emergency.target" + # Also redirect dracut-emergency to kdump error handler + ln_r "$systemdsystemunitdir/emergency.service" "$systemdsystemunitdir/dracut-emergency.service" + + # Check for all the devices and if any device is iscsi, bring up iscsi + # target. Ideally all this should be pushed into dracut iscsi module + # at some point of time. + kdump_check_iscsi_targets + + # nfs/ssh dump will need to get host ip in second kernel and need to call 'ip' tool, see get_host_ip for more detail + if is_nfs_dump_target || is_ssh_dump_target; then + inst "ip" + fi + + # For the lvm type target under kdump, in /etc/lvm/lvm.conf we can + # safely replace "reserved_memory=XXXX"(default value is 8192) with + # "reserved_memory=1024" to lower memory pressure under kdump. We do + # it unconditionally here, if "/etc/lvm/lvm.conf" doesn't exist, it + # actually does nothing. + sed -i -e \ + 's/\(^[[:space:]]*reserved_memory[[:space:]]*=\)[[:space:]]*[[:digit:]]*/\1 1024/' \ + ${initdir}/etc/lvm/lvm.conf &>/dev/null + + # Kdump turns out to require longer default systemd mount timeout + # than 1st kernel(90s by default), we use default 300s for kdump. + grep -r "^[[:space:]]*DefaultTimeoutStartSec=" ${initdir}/etc/systemd/system.conf* &>/dev/null + if [ $? -ne 0 ]; then + mkdir -p ${initdir}/etc/systemd/system.conf.d + echo "[Manager]" > ${initdir}/etc/systemd/system.conf.d/kdump.conf + echo "DefaultTimeoutStartSec=300s" >> ${initdir}/etc/systemd/system.conf.d/kdump.conf + fi + + # Forward logs to console directly, this avoids unneccessary memory + # consumption and make console output more useful. + # Only do so for non fadump image. + if ! is_fadump_capable; then + mkdir -p ${initdir}/etc/systemd/journald.conf.d + echo "[Journal]" > ${initdir}/etc/systemd/journald.conf.d/kdump.conf + echo "Storage=none" >> ${initdir}/etc/systemd/journald.conf.d/kdump.conf + echo "ForwardToConsole=yes" >> ${initdir}/etc/systemd/journald.conf.d/kdump.conf + + # Save more memory by dropping switch root capability + dracut_no_switch_root + fi +} diff --git a/SPECS/kexec-tools/dracut-monitor_dd_progress b/SPECS/kexec-tools/dracut-monitor_dd_progress new file mode 100644 index 0000000000..e139d33387 --- /dev/null +++ b/SPECS/kexec-tools/dracut-monitor_dd_progress @@ -0,0 +1,28 @@ +#!/bin/sh + +SRC_FILE_MB=$1 + +while true +do + DD_PID=`pidof dd` + if [ -n "$DD_PID" ]; then + break + fi +done + +while true +do + sleep 5 + if [ ! -d /proc/$DD_PID ]; then + break + fi + + kill -s USR1 $DD_PID + CURRENT_SIZE=`tail -n 1 /tmp/dd_progress_file | sed "s/[^0-9].*//g"` + [ -n "$CURRENT_SIZE" ] && { + CURRENT_MB=$(($CURRENT_SIZE / 1048576)) + echo -e "Copied $CURRENT_MB MB / $SRC_FILE_MB MB\r" + } +done + +rm -f /tmp/dd_progress_file diff --git a/SPECS/kexec-tools/early-kdump-howto.txt b/SPECS/kexec-tools/early-kdump-howto.txt new file mode 100644 index 0000000000..68b23c7d1f --- /dev/null +++ b/SPECS/kexec-tools/early-kdump-howto.txt @@ -0,0 +1,95 @@ +Early Kdump HOWTO + +Introduction +------------ + +Early kdump is a mechanism to make kdump operational earlier than normal kdump +service. The kdump service starts early enough for general crash cases, but +there are some cases where it has no chance to make kdump operational in boot +sequence, such as detecting devices and starting early services. If you hit +such a case, early kdump may allow you to get more information of it. + +Early kdump is implemented as a dracut module. It adds a kernel (vmlinuz) and +initramfs for kdump to your system's initramfs in order to load them as early +as possible. After that, if you provide "rd.earlykdump" in kernel command line, +then in the initramfs, early kdump will load those files like the normal kdump +service. This is disabled by default. + +For the normal kdump service, it can check whether the early kdump has loaded +the crash kernel and initramfs. It has no conflict with the early kdump. + +How to configure early kdump +---------------------------- + +We assume if you're reading this document, you should already have kexec-tools +installed. + +You can rebuild the initramfs with earlykdump support with below steps: + +1. start kdump service to make sure kdump initramfs is created. + + # systemctl start kdump + + NOTE: If a crash occurs during boot process, early kdump captures a vmcore + and reboot the system by default, so the system might go into crash loop. + You can avoid such a crash loop by adding the following settings, which + power off the system after dump capturing, to kdump.conf in advance: + + final_action poweroff + failure_action poweroff + + For the failure_action, you can choose anything other than "reboot". + +2. rebuild system initramfs with earlykdump support. + + # dracut --force --add earlykdump + + NOTE: Recommend to backup the original system initramfs before performing + this step to put it back if something happens during boot-up. + +3. add rd.earlykdump in grub kernel command line. + +After making said changes, reboot your system to take effect. Of course, if you +want to disable early kdump, you can simply remove "rd.earlykdump" from kernel +boot parameters in grub, and reboot system like above. + +Once the boot is completed, you can check the status of the early kdump support +on the command prompt: + + # journalctl -b | grep early-kdump + +Then, you will see some useful logs, for example: + +- if early kdump is successful. + +Mar 09 09:57:56 localhost dracut-cmdline[190]: early-kdump is enabled. +Mar 09 09:57:56 localhost dracut-cmdline[190]: kexec: loaded early-kdump kernel + +- if early kdump is disabled. + +Mar 09 10:02:47 localhost dracut-cmdline[189]: early-kdump is disabled. + +Notes +----- + +- The size of early kdump initramfs will be large because it includes vmlinuz + and kdump initramfs. + +- Early kdump inherits the settings of normal kdump, so any changes that + caused normal kdump rebuilding also require rebuilding the system initramfs + to make sure that the changes take effect for early kdump. Therefore, after + the rebuilding of kdump initramfs is completed, provide a prompt message to + tell the fact. + +- If you install an updated kernel and reboot the system with it, the early + kdump will be disabled by default. To enable it with the new kernel, you + need to take the above steps again. + +Limitation +---------- + +- At present, early kdump doesn't support fadump. + +- Early kdump loads a crash kernel and initramfs at the beginning of the + process in system's initramfs, so a crash at earlier than that (e.g. in + kernel initialization) cannot be captured even with the early kdump. diff --git a/SPECS/kexec-tools/fadump-howto.txt b/SPECS/kexec-tools/fadump-howto.txt new file mode 100644 index 0000000000..c891e37441 --- /dev/null +++ b/SPECS/kexec-tools/fadump-howto.txt @@ -0,0 +1,338 @@ +Firmware assisted dump (fadump) HOWTO + +Introduction + +Firmware assisted dump is a new feature in the 3.4 mainline kernel supported +only on powerpc architecture. The goal of firmware-assisted dump is to enable +the dump of a crashed system, and to do so from a fully-reset system, and to +minimize the total elapsed time until the system is back in production use. A +complete documentation on implementation can be found at +Documentation/powerpc/firmware-assisted-dump.txt in upstream linux kernel tree +from 3.4 version and above. + +Please note that the firmware-assisted dump feature is only available on Power6 +and above systems with recent firmware versions. + +Overview + +Fadump + +Fadump is a robust kernel crash dumping mechanism to get reliable kernel crash +dump with assistance from firmware. This approach does not use kexec, instead +firmware assists in booting the kdump kernel while preserving memory contents. +Unlike kdump, the system is fully reset, and loaded with a fresh copy of the +kernel. In particular, PCI and I/O devices are reinitialized and are in a +clean, consistent state. This second kernel, often called a capture kernel, +boots with very little memory and captures the dump image. + +The first kernel registers the sections of memory with the Power firmware for +dump preservation during OS initialization. These registered sections of memory +are reserved by the first kernel during early boot. When a system crashes, the +Power firmware fully resets the system, preserves all the system memory +contents, save the low memory (boot memory of size larger of 5% of system +RAM or 256MB) of RAM to the previous registered region. It will also save +system registers, and hardware PTE's. + +Fadump is supported only on ppc64 platform. The standard kernel and capture +kernel are one and the same on ppc64. + +If you're reading this document, you should already have kexec-tools +installed. If not, you install it via the following command: + + # yum install kexec-tools + +Fadump Operational Flow: + +Like kdump, fadump also exports the ELF formatted kernel crash dump through +/proc/vmcore. Hence existing kdump infrastructure can be used to capture fadump +vmcore. The idea is to keep the functionality transparent to end user. From +user perspective there is no change in the way kdump init script works. + +However, unlike kdump, fadump does not pre-load kdump kernel and initrd into +reserved memory, instead it always uses default OS initrd during second boot +after crash. Hence, for fadump, we rebuild the new kdump initrd and replace it +with default initrd. Before replacing existing default initrd we take a backup +of original default initrd for user's reference. The dracut package has been +enhanced to rebuild the default initrd with vmcore capture steps. The initrd +image is rebuilt as per the configuration in /etc/kdump.conf file. + +The control flow of fadump works as follows: +01. System panics. +02. At the crash, kernel informs power firmware that kernel has crashed. +03. Firmware takes the control and reboots the entire system preserving + only the memory (resets all other devices). +04. The reboot follows the normal booting process (non-kexec). +05. The boot loader loads the default kernel and initrd from /boot +06. The default initrd loads and runs /init +07. dracut-kdump.sh script present in fadump aware default initrd checks if + '/proc/device-tree/rtas/ibm,kernel-dump' file exists before executing + steps to capture vmcore. + (This check will help to bypass the vmcore capture steps during normal boot + process.) +09. Captures dump according to /etc/kdump.conf +10. Is dump capture successful (yes goto 12, no goto 11) +11. Perform the failure action specified in /etc/kdump.conf + (The default failure action is reboot, if unspecified) +12. Perform the final action specified in /etc/kdump.conf + (The default final action is reboot, if unspecified) + + +How to configure fadump: + +Again, we assume if you're reading this document, you should already have +kexec-tools installed. If not, you install it via the following command: + + # yum install kexec-tools + +Make the kernel to be configured with FADump as the default boot entry, if +it isn't already: + + # grubby --set-default=/boot/vmlinuz- + +Boot into the kernel to be configured for FADump. To be able to do much of +anything interesting in the way of debug analysis, you'll also need to install +the kernel-debuginfo package, of the same arch as your running kernel, and the +crash utility: + + # yum --enablerepo=\*debuginfo install kernel-debuginfo.$(uname -m) crash + +Next up, we need to modify some boot parameters to enable firmware assisted +dump. With the help of grubby, it's very easy to append "fadump=on" to the end +of your kernel boot parameters. To reserve the appropriate amount of memory +for boot memory preservation, pass 'crashkernel=X' kernel cmdline parameter. +For the recommended value of X, see 'FADump Memory Requirements' section. + + # grubby --args="fadump=on crashkernel=6G" --update-kernel=/boot/vmlinuz-`uname -r` + +The term 'boot memory' means size of the low memory chunk that is required for +a kernel to boot successfully when booted with restricted memory. By default, +the boot memory size will be the larger of 5% of system RAM or 256MB. +Alternatively, user can also specify boot memory size through boot parameter +'fadump_reserve_mem=' which will override the default calculated size. Use this +option if default boot memory size is not sufficient for second kernel to boot +successfully. + +After making said changes, reboot your system, so that the specified memory is +reserved and left untouched by the normal system. Take note that the output of +'free -m' will show X MB less memory than without this parameter, which is +expected. If you see OOM (Out Of Memory) error messages while loading capture +kernel, then you should bump up the memory reservation size. + +Now that you've got that reserved memory region set up, you want to turn on +the kdump init script: + + # systemctl enable kdump.service + +Then, start up kdump as well: + + # systemctl start kdump.service + +This should turn on the firmware assisted functionality in kernel by +echo'ing 1 to /sys/kernel/fadump_registered, leaving the system ready +to capture a vmcore upon crashing. For journaling filesystems like XFS an +additional step is required to ensure bootloader does not pick the +older initrd (without vmcore capture scripts): + + * If /boot is a separate partition, run the below commands as the root user, + or as a user with CAP_SYS_ADMIN rights: + + # fsfreeze -f + # fsfreeze -u + + * If /boot is not a separate partition, reboot the system. + +After reboot check if the kdump service is up and running with: + + # systemctl status kdump.service + +To test out whether FADump is configured properly, you can force-crash your +system by echo'ing a 'c' into /proc/sysrq-trigger: + + # echo c > /proc/sysrq-trigger + +You should see some panic output, followed by the system reset and booting into +fresh copy of kernel. When default initrd loads and runs /init, vmcore should +be copied out to disk (by default, in /var/crash//vmcore), +then the system rebooted back into your normal kernel. + +Once back to your normal kernel, you can use the previously installed crash +kernel in conjunction with the previously installed kernel-debuginfo to +perform postmortem analysis: + + # crash /usr/lib/debug/lib/modules/2.6.17-1.2621.el5/vmlinux + /var/crash/2006-08-23-15:34/vmcore + + crash> bt + +and so on... + +Saving vmcore-dmesg.txt +----------------------- +Kernel log bufferes are one of the most important information available +in vmcore. Now before saving vmcore, kernel log bufferes are extracted +from /proc/vmcore and saved into a file vmcore-dmesg.txt. After +vmcore-dmesg.txt, vmcore is saved. Destination disk and directory for +vmcore-dmesg.txt is same as vmcore. Note that kernel log buffers will +not be available if dump target is raw device. + +FADump Memory Requirements: + + System Memory Recommended memory +--------------------- ---------------------- + 4 GB - 16 GB : 768 MB + 16 GB - 64 GB : 1024 MB + 64 GB - 128 GB : 2 GB + 128 GB - 1 TB : 4 GB + 1 TB - 2 TB : 6 GB + 2 TB - 4 TB : 12 GB + 4 TB - 8 TB : 20 GB + 8 TB - 16 TB : 36 GB + 16 TB - 32 TB : 64 GB + 32 TB - 64 TB : 128 GB + 64 TB & above : 180 GB + +Things to remember: + +1) The memory required to boot capture Kernel is a moving target that depends + on many factors like hardware attached to the system, kernel and modules in + use, packages installed and services enabled, there is no one-size-fits-all. + But the above recommendations are based on system memory. So, the above + recommendations for FADump come with a few assumptions, based on available + system memory, about the resources the system could have. So, please take + the recommendations with a pinch of salt and remember to try capturing dump + a few times to confirm that the system is configured successfully with dump + capturing support. + +2) Though the memory requirements for FADump seem high, this memory is not + completely set aside but made available for userspace applications to use, + through the CMA allocator. + +3) As the same initrd is used for booting production kernel as well as capture + kernel and with dump being captured in a restricted memory environment, few + optimizations (like not inclding network dracut module, disabling multipath + and such) are applied while building the initrd. In case, the production + environment needs these optimizations to be avoided, dracut_args option in + /etc/kdump.conf file could be leveraged. For example, if a user wishes for + network module to be included in the initrd, adding the below entry in + /etc/kdump.conf file and restarting kdump service would take care of it. + + dracut_args --add "network" + +4) If FADump is configured to capture vmcore to a remote dump target using SSH + or NFS protocol, the network interface is renamed to kdump- + if is generic, for example, *eth#, or net#. This problem + occurs because the vmcore capture scripts in the initial RAM disk (initrd) + add the kdump- prefix to the network interface name to secure persistent + naming. As the same initrd is used for production kernel boot, the interface + name is changed for the production kernel too. + +Dump Triggering methods: + +This section talks about the various ways, other than a Kernel Panic, in which +fadump can be triggered. The following methods assume that fadump is configured +on your system, with the scripts enabled as described in the section above. + +1) AltSysRq C + +FAdump can be triggered with the combination of the 'Alt','SysRq' and 'C' +keyboard keys. Please refer to the following link for more details: + +https://fedoraproject.org/wiki/QA/Sysrq + +In addition, on PowerPC boxes, fadump can also be triggered via Hardware +Management Console(HMC) using 'Ctrl', 'O' and 'C' keyboard keys. + +2) Kernel OOPs + +If we want to generate a dump everytime the Kernel OOPses, we can achieve this +by setting the 'Panic On OOPs' option as follows: + + # echo 1 > /proc/sys/kernel/panic_on_oops + +3) PowerPC specific methods: + +On IBM PowerPC machines, issuing a soft reset invokes the XMON debugger(if +XMON is configured). To configure XMON one needs to compile the kernel with +the CONFIG_XMON and CONFIG_XMON_DEFAULT options, or by compiling with +CONFIG_XMON and booting the kernel with xmon=on option. + +Following are the ways to remotely issue a soft reset on PowerPC boxes, which +would drop you to XMON. Pressing a 'X' (capital alphabet X) followed by an +'Enter' here will trigger the dump. + +3.1) HMC + +Hardware Management Console(HMC) available on Power4 and Power5 machines allow +partitions to be reset remotely. This is specially useful in hang situations +where the system is not accepting any keyboard inputs. + +Once you have HMC configured, the following steps will enable you to trigger +fadump via a soft reset: + +On Power4 + Using GUI + + * In the right pane, right click on the partition you wish to dump. + * Select "Operating System->Reset". + * Select "Soft Reset". + * Select "Yes". + + Using HMC Commandline + + # reset_partition -m -p -t soft + +On Power5 + Using GUI + + * In the right pane, right click on the partition you wish to dump. + * Select "Restart Partition". + * Select "Dump". + * Select "OK". + + Using HMC Commandline + + # chsysstate -m -n -o dumprestart -r lpar + +3.2) Blade Management Console for Blade Center + +To initiate a dump operation, go to Power/Restart option under "Blade Tasks" in +the Blade Management Console. Select the corresponding blade for which you want +to initate the dump and then click "Restart blade with NMI". This issues a +system reset and invokes xmon debugger. + + +Advanced Setups & Failure action: + +Kdump and fadump exhibit similar behavior in terms of setup & failure action. +For fadump advanced setup related information see section "Advanced Setups" in +"kexec-kdump-howto.txt" document. Refer to "Failure action" section in "kexec- +kdump-howto.txt" document for fadump failure action related information. + +Compression and filtering + +Refer "Compression and filtering" section in "kexec-kdump-howto.txt" document. +Compression and filtering are same for kdump & fadump. + + +Notes on rootfs mount: +Dracut is designed to mount rootfs by default. If rootfs mounting fails it +will refuse to go on. So fadump leaves rootfs mounting to dracut currently. +We make the assumtion that proper root= cmdline is being passed to dracut +initramfs for the time being. If you need modify "KDUMP_COMMANDLINE=" in +/etc/sysconfig/kdump, you will need to make sure that appropriate root= +options are copied from /proc/cmdline. In general it is best to append +command line options using "KDUMP_COMMANDLINE_APPEND=" instead of replacing +the original command line completely. + +How to disable FADump: + +Remove "fadump=on" from kernel cmdline parameters: + + # grubby --update-kernel=/boot/vmlinuz-`uname -r` --remove-args="fadump=on" + +If KDump is to be used as the dump capturing mechanism, update the crashkernel +parameter (Else, remove "crashkernel=" parameter too, using grubby): + + # grubby --update-kernel=/boot/vmlinuz-$kver --args="crashkernl=auto" + +Reboot the system for the settings to take effect. diff --git a/SPECS/kexec-tools/kdump-dep-generator.sh b/SPECS/kexec-tools/kdump-dep-generator.sh new file mode 100644 index 0000000000..b6fab2dbe6 --- /dev/null +++ b/SPECS/kexec-tools/kdump-dep-generator.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# More details about systemd generator: +# http://www.freedesktop.org/wiki/Software/systemd/Generators/ + +. /usr/lib/kdump/kdump-lib.sh + +# If invokded with no arguments for testing purpose, output to /tmp to +# avoid overriding the existing. +dest_dir="/tmp" + +if [ -n "$1" ]; then + dest_dir=$1 +fi + +systemd_dir=/usr/lib/systemd/system +kdump_wants=$dest_dir/kdump.service.wants + +if is_ssh_dump_target; then + mkdir -p $kdump_wants + ln -sf $systemd_dir/network-online.target $kdump_wants/ +fi diff --git a/SPECS/kexec-tools/kdump-in-cluster-environment.txt b/SPECS/kexec-tools/kdump-in-cluster-environment.txt new file mode 100644 index 0000000000..de1eb5e33b --- /dev/null +++ b/SPECS/kexec-tools/kdump-in-cluster-environment.txt @@ -0,0 +1,91 @@ +Kdump-in-cluster-environment HOWTO + +Introduction + +Kdump is a kexec based crash dumping mechansim for Linux. This docuement +illustrate how to configure kdump in cluster environment to allow the kdump +crash recovery service complete without being preempted by traditional power +fencing methods. + +Overview + +Kexec/Kdump + +Details about Kexec/Kdump are available in Kexec-Kdump-howto file and will not +be described here. + +fence_kdump + +fence_kdump is an I/O fencing agent to be used with the kdump crash recovery +service. When the fence_kdump agent is invoked, it will listen for a message +from the failed node that acknowledges that the failed node is executing the +kdump crash kernel. Note that fence_kdump is not a replacement for traditional +fencing methods. The fence_kdump agent can only detect that a node has entered +the kdump crash recovery service. This allows the kdump crash recovery service +complete without being preempted by traditional power fencing methods. + +fence_kdump_send + +fence_kdump_send is a utility used to send messages that acknowledge that the +node itself has entered the kdump crash recovery service. The fence_kdump_send +utility is typically run in the kdump kernel after a cluster node has +encountered a kernel panic. Once the cluster node has entered the kdump crash +recovery service, fence_kdump_send will periodically send messages to all +cluster nodes. When the fence_kdump agent receives a valid message from the +failed nodes, fencing is complete. + +How to configure Pacemaker cluster environment: + +If we want to use kdump in Pacemaker cluster environment, fence-agents-kdump +should be installed in every nodes in the cluster. You can achieve this via +the following command: + + # yum install -y fence-agents-kdump + +Next is to add kdump_fence to the cluster. Assuming that the cluster consists +of three nodes, they are node1, node2 and node3, and use Pacemaker to perform +resource management and pcs as cli configuration tool. + +With pcs it is easy to add a stonith resource to the cluster. For example, add +a stonith resource named mykdumpfence with fence type of fence_kdump via the +following commands: + + # pcs stonith create mykdumpfence fence_kdump \ + pcmk_host_check=static-list pcmk_host_list="node1 node2 node3" + # pcs stonith update mykdumpfence pcmk_monitor_action=metadata --force + # pcs stonith update mykdumpfence pcmk_status_action=metadata --force + # pcs stonith update mykdumpfence pcmk_reboot_action=off --force + +Then enable stonith + # pcs property set stonith-enabled=true + +How to configure kdump: + +Actually there are two ways how to configure fence_kdump support: + +1) Pacemaker based clusters + If you have successfully configured fence_kdump in Pacemaker, there is + no need to add some special configuration in kdump. So please refer to + Kexec-Kdump-howto file for more information. + +2) Generic clusters + For other types of clusters there are two configuration options in + kdump.conf which enables fence_kdump support: + + fence_kdump_nodes + Contains list of cluster node(s) separated by space to send + fence_kdump notification to (this option is mandatory to enable + fence_kdump) + + fence_kdump_args + Command line arguments for fence_kdump_send (it can contain + all valid arguments except hosts to send notification to) + + These options will most probably be configured by your cluster software, + so please refer to your cluster documentation how to enable fence_kdump + support. + +Please be aware that these two ways cannot be combined and 2) has precedence +over 1). It means that if fence_kdump is configured using fence_kdump_nodes +and fence_kdump_args options in kdump.conf, Pacemaker configuration is not +used even if it exists. diff --git a/SPECS/kexec-tools/kdump-lib-initramfs.sh b/SPECS/kexec-tools/kdump-lib-initramfs.sh new file mode 100755 index 0000000000..c98a43b473 --- /dev/null +++ b/SPECS/kexec-tools/kdump-lib-initramfs.sh @@ -0,0 +1,221 @@ +# These variables and functions are useful in 2nd kernel + +. /lib/kdump-lib.sh + +KDUMP_PATH="/var/crash" +CORE_COLLECTOR="" +DEFAULT_CORE_COLLECTOR="makedumpfile -l --message-level 1 -d 31" +DMESG_COLLECTOR="/sbin/vmcore-dmesg" +FAILURE_ACTION="systemctl reboot -f" +DATEDIR=`date +%Y-%m-%d-%T` +HOST_IP='127.0.0.1' +DUMP_INSTRUCTION="" +SSH_KEY_LOCATION="/root/.ssh/kdump_id_rsa" +KDUMP_SCRIPT_DIR="/kdumpscripts" +DD_BLKSIZE=512 +FINAL_ACTION="systemctl reboot -f" +KDUMP_CONF="/etc/kdump.conf" +KDUMP_PRE="" +KDUMP_POST="" +NEWROOT="/sysroot" +OPALCORE="/sys/firmware/opal/mpipl/core" + +get_kdump_confs() +{ + local config_opt config_val + + while read config_opt config_val; + do + # remove inline comments after the end of a directive. + case "$config_opt" in + path) + KDUMP_PATH="$config_val" + ;; + core_collector) + [ -n "$config_val" ] && CORE_COLLECTOR="$config_val" + ;; + sshkey) + if [ -f "$config_val" ]; then + SSH_KEY_LOCATION=$config_val + fi + ;; + kdump_pre) + KDUMP_PRE="$config_val" + ;; + kdump_post) + KDUMP_POST="$config_val" + ;; + fence_kdump_args) + FENCE_KDUMP_ARGS="$config_val" + ;; + fence_kdump_nodes) + FENCE_KDUMP_NODES="$config_val" + ;; + failure_action|default) + case $config_val in + shell) + FAILURE_ACTION="kdump_emergency_shell" + ;; + reboot) + FAILURE_ACTION="systemctl reboot -f && exit" + ;; + halt) + FAILURE_ACTION="halt && exit" + ;; + poweroff) + FAILURE_ACTION="systemctl poweroff -f && exit" + ;; + dump_to_rootfs) + FAILURE_ACTION="dump_to_rootfs" + ;; + esac + ;; + final_action) + case $config_val in + reboot) + FINAL_ACTION="systemctl reboot -f" + ;; + halt) + FINAL_ACTION="halt" + ;; + poweroff) + FINAL_ACTION="systemctl poweroff -f" + ;; + esac + ;; + esac + done <<< "$(read_strip_comments $KDUMP_CONF)" + + if [ -z "$CORE_COLLECTOR" ]; then + CORE_COLLECTOR="$DEFAULT_CORE_COLLECTOR" + if is_ssh_dump_target || is_raw_dump_target; then + CORE_COLLECTOR="$CORE_COLLECTOR -F" + fi + fi +} + +# dump_fs +dump_fs() +{ + local _mp=$1 + local _dev=$(get_mount_info SOURCE target $_mp -f) + local _op=$(get_mount_info OPTIONS target $_mp -f) + + # If dump path have a corresponding device entry but not mounted, mount it. + if [ -n "$_dev" ]; then + if ! is_mounted "$_mp"; then + echo "kdump: dump target $_dev is not mounted, trying to mount..." + mkdir -p $_mp + mount -o $_op $_dev $_mp + + if [ $? -ne 0 ]; then + echo "kdump: mounting failed (mount point: $_mp, option: $_op)" + return 1 + fi + fi + else + echo "kdump: failed to dump to \"$_mp\", it's not a mount point!" + return 1 + fi + + # Remove -F in makedumpfile case. We don't want a flat format dump here. + [[ $CORE_COLLECTOR = *makedumpfile* ]] && CORE_COLLECTOR=`echo $CORE_COLLECTOR | sed -e "s/-F//g"` + + local _dump_path=$(echo "$_mp/$KDUMP_PATH/$HOST_IP-$DATEDIR/" | tr -s /) + + echo "kdump: saving to $_dump_path" + + # Only remount to read-write mode if the dump target is mounted read-only. + if [[ "$_op" = "ro"* ]]; then + echo "kdump: Mounting Dump target $_dev in rw mode." + mount -o remount,rw $_dev $_mp || return 1 + fi + + mkdir -p $_dump_path || return 1 + + save_vmcore_dmesg_fs ${DMESG_COLLECTOR} "$_dump_path" + save_opalcore_fs "$_dump_path" + + echo "kdump: saving vmcore" + $CORE_COLLECTOR /proc/vmcore $_dump_path/vmcore-incomplete || return 1 + mv $_dump_path/vmcore-incomplete $_dump_path/vmcore + sync + + echo "kdump: saving vmcore complete" + + # improper kernel cmdline can cause the failure of echo, we can ignore this kind of failure + return 0 +} + +save_vmcore_dmesg_fs() { + local _dmesg_collector=$1 + local _path=$2 + + echo "kdump: saving vmcore-dmesg.txt" + $_dmesg_collector /proc/vmcore > ${_path}/vmcore-dmesg-incomplete.txt + _exitcode=$? + if [ $_exitcode -eq 0 ]; then + mv ${_path}/vmcore-dmesg-incomplete.txt ${_path}/vmcore-dmesg.txt + + # Make sure file is on disk. There have been instances where later + # saving vmcore failed and system rebooted without sync and there + # was no vmcore-dmesg.txt available. + sync + echo "kdump: saving vmcore-dmesg.txt complete" + else + echo "kdump: saving vmcore-dmesg.txt failed" + fi +} + +save_opalcore_fs() { + local _path=$1 + + if [ ! -f $OPALCORE ]; then + # Check if we are on an old kernel that uses a different path + if [ -f /sys/firmware/opal/core ]; then + OPALCORE="/sys/firmware/opal/core" + else + return 0 + fi + fi + + echo "kdump: saving opalcore" + cp $OPALCORE ${_path}/opalcore + if [ $? -ne 0 ]; then + echo "kdump: saving opalcore failed" + return 1 + fi + + sync + echo "kdump: saving opalcore complete" + return 0 +} + +dump_to_rootfs() +{ + + echo "Kdump: trying to bring up rootfs device" + systemctl start dracut-initqueue + echo "Kdump: waiting for rootfs mount, will timeout after 90 seconds" + systemctl start sysroot.mount + + dump_fs $NEWROOT +} + +kdump_emergency_shell() +{ + echo "PS1=\"kdump:\\\${PWD}# \"" >/etc/profile + /bin/dracut-emergency + rm -f /etc/profile +} + +do_failure_action() +{ + echo "Kdump: Executing failure action $FAILURE_ACTION" + eval $FAILURE_ACTION +} + +do_final_action() +{ + eval $FINAL_ACTION +} diff --git a/SPECS/kexec-tools/kdump-lib.sh b/SPECS/kexec-tools/kdump-lib.sh new file mode 100755 index 0000000000..f78e06481c --- /dev/null +++ b/SPECS/kexec-tools/kdump-lib.sh @@ -0,0 +1,725 @@ +#!/bin/sh +# +# Kdump common variables and functions +# + +DEFAULT_PATH="/var/crash/" +FENCE_KDUMP_CONFIG_FILE="/etc/sysconfig/fence_kdump" +FENCE_KDUMP_SEND="/usr/libexec/fence_kdump_send" +FADUMP_ENABLED_SYS_NODE="/sys/kernel/fadump_enabled" + +is_fadump_capable() +{ + # Check if firmware-assisted dump is enabled + # if no, fallback to kdump check + if [ -f $FADUMP_ENABLED_SYS_NODE ]; then + rc=`cat $FADUMP_ENABLED_SYS_NODE` + [ $rc -eq 1 ] && return 0 + fi + return 1 +} + +perror_exit() { + echo $@ >&2 + exit 1 +} + +perror() { + echo $@ >&2 +} + +is_fs_type_nfs() +{ + [ "$1" = "nfs" ] || [ "$1" = "nfs4" ] +} + +is_ssh_dump_target() +{ + grep -q "^ssh[[:blank:]].*@" /etc/kdump.conf +} + +is_nfs_dump_target() +{ + if grep -q "^nfs" /etc/kdump.conf; then + return 0; + fi + + if is_fs_type_nfs $(get_dracut_args_fstype "$(grep "^dracut_args .*\-\-mount" /etc/kdump.conf)"); then + return 0 + fi + + local _save_path=$(get_save_path) + local _target=$(get_target_from_path $_save_path) + local _fstype=$(get_fs_type_from_target $_target) + + if is_fs_type_nfs $_fstype; then + return 0 + fi + + return 1 +} + +is_raw_dump_target() +{ + grep -q "^raw" /etc/kdump.conf +} + +is_fs_dump_target() +{ + egrep -q "^ext[234]|^xfs|^btrfs|^minix" /etc/kdump.conf +} + +strip_comments() +{ + echo $@ | sed -e 's/\(.*\)#.*/\1/' +} + +# Read from kdump config file stripping all comments +read_strip_comments() +{ + # strip heading spaces, and print any content starting with + # neither space or #, and strip everything after # + sed -n -e "s/^\s*\([^# \t][^#]\+\).*/\1/gp" $1 +} + +# Check if fence kdump is configured in Pacemaker cluster +is_pcs_fence_kdump() +{ + # no pcs or fence_kdump_send executables installed? + type -P pcs > /dev/null || return 1 + [ -x $FENCE_KDUMP_SEND ] || return 1 + + # fence kdump not configured? + (pcs cluster cib | grep 'type="fence_kdump"') &> /dev/null || return 1 +} + +# Check if fence_kdump is configured using kdump options +is_generic_fence_kdump() +{ + [ -x $FENCE_KDUMP_SEND ] || return 1 + + grep -q "^fence_kdump_nodes" /etc/kdump.conf +} + +to_dev_name() { + local dev="${1//\"/}" + + case "$dev" in + UUID=*) + dev=`blkid -U "${dev#UUID=}"` + ;; + LABEL=*) + dev=`blkid -L "${dev#LABEL=}"` + ;; + esac + echo $dev +} + +is_user_configured_dump_target() +{ + grep -E -q "^ext[234]|^xfs|^btrfs|^minix|^raw|^nfs|^ssh" /etc/kdump.conf || is_mount_in_dracut_args; +} + +get_user_configured_dump_disk() +{ + local _target + + _target=$(egrep "^ext[234]|^xfs|^btrfs|^minix|^raw" /etc/kdump.conf 2>/dev/null |awk '{print $2}') + [ -n "$_target" ] && echo $_target && return + + _target=$(get_dracut_args_target "$(grep "^dracut_args .*\-\-mount" /etc/kdump.conf)") + [ -b "$_target" ] && echo $_target +} + +get_root_fs_device() +{ + findmnt -k -f -n -o SOURCE / +} + +get_save_path() +{ + local _save_path=$(awk '$1 == "path" {print $2}' /etc/kdump.conf) + [ -z "$_save_path" ] && _save_path=$DEFAULT_PATH + + # strip the duplicated "/" + echo $_save_path | tr -s / +} + +get_block_dump_target() +{ + local _target _path + + if is_ssh_dump_target || is_nfs_dump_target; then + return + fi + + _target=$(get_user_configured_dump_disk) + [ -n "$_target" ] && echo $(to_dev_name $_target) && return + + # Get block device name from local save path + _path=$(get_save_path) + _target=$(get_target_from_path $_path) + [ -b "$_target" ] && echo $(to_dev_name $_target) +} + +is_dump_to_rootfs() +{ + grep -E "^(failure_action|default)[[:space:]]dump_to_rootfs" /etc/kdump.conf >/dev/null +} + +get_failure_action_target() +{ + local _target + + if is_dump_to_rootfs; then + # Get rootfs device name + _target=$(get_root_fs_device) + [ -b "$_target" ] && echo $(to_dev_name $_target) && return + # Then, must be nfs root + echo "nfs" + fi +} + +# Get kdump targets(including root in case of dump_to_rootfs). +get_kdump_targets() +{ + local _target _root + local kdump_targets + + _target=$(get_block_dump_target) + if [ -n "$_target" ]; then + kdump_targets=$_target + elif is_ssh_dump_target; then + kdump_targets="ssh" + else + kdump_targets="nfs" + fi + + # Add the root device if dump_to_rootfs is specified. + _root=$(get_failure_action_target) + if [ -n "$_root" -a "$kdump_targets" != "$_root" ]; then + kdump_targets="$kdump_targets $_root" + fi + + echo "$kdump_targets" +} + +# Return the bind mount source path, return the path itself if it's not bind mounted +# Eg. if /path/to/src is bind mounted to /mnt/bind, then: +# /mnt/bind -> /path/to/src, /mnt/bind/dump -> /path/to/src/dump +# +# findmnt uses the option "-v, --nofsroot" to exclusive the [/dir] +# in the SOURCE column for bind-mounts, then if $_mntpoint equals to +# $_mntpoint_nofsroot, the mountpoint is not bind mounted directory. +# +# Below is just an example for mount info +# /dev/mapper/atomicos-root[/ostree/deploy/rhel-atomic-host/var], if the +# directory is bind mounted. The former part represents the device path, rest +# part is the bind mounted directory which quotes by bracket "[]". +get_bind_mount_source() +{ + local _path=$1 + # In case it's a sub path in a mount point, get the mount point first + local _mnt_top=$(df $_path | tail -1 | awk '{print $NF}') + local _mntpoint=$(findmnt $_mnt_top | tail -n 1 | awk '{print $2}') + local _mntpoint_nofsroot=$(findmnt -v $_mnt_top | tail -n 1 | awk '{print $2}') + + if [[ "$_mntpoint" = $_mntpoint_nofsroot ]]; then + echo $_path && return + fi + + _mntpoint=${_mntpoint#*$_mntpoint_nofsroot} + _mntpoint=${_mntpoint#[} + _mntpoint=${_mntpoint%]} + _path=${_path#$_mnt_top} + + echo $_mntpoint$_path +} + +# Return the current underlaying device of a path, ignore bind mounts +get_target_from_path() +{ + local _target + + _target=$(df $1 2>/dev/null | tail -1 | awk '{print $1}') + [[ "$_target" == "/dev/root" ]] && [[ ! -e /dev/root ]] && _target=$(get_root_fs_device) + echo $_target +} + +is_mounted() +{ + findmnt -k -n $1 &>/dev/null +} + +get_mount_info() +{ + local _info_type=$1 _src_type=$2 _src=$3; shift 3 + local _info=$(findmnt --real -k -n -r -o $_info_type --$_src_type $_src $@) + + [ -z "$_info" ] && [ -e "/etc/fstab" ] && _info=$(findmnt --real -s -n -r -o $_info_type --$_src_type $_src $@) + + echo $_info +} + +get_fs_type_from_target() +{ + get_mount_info FSTYPE source $1 -f +} + +get_mntopt_from_target() +{ + get_mount_info OPTIONS source $1 -f +} +# Find the general mount point of a dump target, not the bind mount point +get_mntpoint_from_target() +{ + # Expcilitly specify --source to findmnt could ensure non-bind mount is returned + get_mount_info TARGET source $1 -f +} + +# Get the path where the target will be mounted in kdump kernel +# $1: kdump target device +get_kdump_mntpoint_from_target() +{ + local _mntpoint=$(get_mntpoint_from_target $1) + + # mount under /sysroot if dump to root disk or mount under + # mount under /kdumproot if dump target is not mounted in first kernel + # mount under /kdumproot/$_mntpoint in other cases in 2nd kernel. + # systemd will be in charge to umount it. + if [ -z "$_mntpoint" ];then + _mntpoint="/kdumproot" + else + if [ "$_mntpoint" = "/" ];then + _mntpoint="/sysroot" + else + _mntpoint="/kdumproot/$_mntpoint" + fi + fi + + # strip duplicated "/" + echo $_mntpoint | tr -s "/" +} + +# get_option_value +# retrieves value of option defined in kdump.conf +get_option_value() { + strip_comments `grep "^$1[[:space:]]\+" /etc/kdump.conf | tail -1 | cut -d\ -f2-` +} + +kdump_get_persistent_dev() { + local dev="${1//\"/}" + + case "$dev" in + UUID=*) + dev=`blkid -U "${dev#UUID=}"` + ;; + LABEL=*) + dev=`blkid -L "${dev#LABEL=}"` + ;; + esac + echo $(get_persistent_dev "$dev") +} + +is_atomic() +{ + grep -q "ostree" /proc/cmdline +} + +is_ipv6_address() +{ + echo $1 | grep -q ":" +} + +# get ip address or hostname from nfs/ssh config value +get_remote_host() +{ + local _config_val=$1 + + # ipv6 address in kdump.conf is around with "[]", + # factor out the ipv6 address + _config_val=${_config_val#*@} + _config_val=${_config_val%:/*} + _config_val=${_config_val#[} + _config_val=${_config_val%]} + echo $_config_val +} + +is_hostname() +{ + local _hostname=`echo $1 | grep ":"` + + if [ -n "$_hostname" ]; then + return 1 + fi + echo $1 | grep -q "[a-zA-Z]" +} + +# Copied from "/etc/sysconfig/network-scripts/network-functions" +get_hwaddr() +{ + if [ -f "/sys/class/net/${1}/address" ]; then + awk '{ print toupper($0) }' < /sys/class/net/${1}/address + elif [ -d "/sys/class/net/${1}" ]; then + LC_ALL= LANG= ip -o link show ${1} 2>/dev/null | \ + awk '{ print toupper(gensub(/.*link\/[^ ]* ([[:alnum:]:]*).*/, + "\\1", 1)); }' + fi +} + +get_ifcfg_by_device() +{ + grep -E -i -l "^[[:space:]]*DEVICE=\"*${1}\"*[[:space:]]*$" \ + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1 +} + +get_ifcfg_by_hwaddr() +{ + grep -E -i -l "^[[:space:]]*HWADDR=\"*${1}\"*[[:space:]]*$" \ + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1 +} + +get_ifcfg_by_uuid() +{ + grep -E -i -l "^[[:space:]]*UUID=\"*${1}\"*[[:space:]]*$" \ + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1 +} + +get_ifcfg_by_name() +{ + grep -E -i -l "^[[:space:]]*NAME=\"*${1}\"*[[:space:]]*$" \ + /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null | head -1 +} + +is_nm_running() +{ + [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)" = "running" ] +} + +is_nm_handling() +{ + LANG=C nmcli -t --fields device,state dev status 2>/dev/null \ + | grep -q "^\(${1}:connected\)\|\(${1}:connecting.*\)$" +} + +# $1: netdev name +get_ifcfg_nmcli() +{ + local nm_uuid nm_name + local ifcfg_file + + # Get the active nmcli config name of $1 + if is_nm_running && is_nm_handling "${1}" ; then + # The configuration "uuid" and "name" generated by nm is wrote to + # the ifcfg file as "UUID=" and "NAME=". + nm_uuid=$(LANG=C nmcli -t --fields uuid,device c show --active 2>/dev/null \ + | grep "${1}" | head -1 | cut -d':' -f1) + nm_name=$(LANG=C nmcli -t --fields name,device c show --active 2>/dev/null \ + | grep "${1}" | head -1 | cut -d':' -f1) + ifcfg_file=$(get_ifcfg_by_uuid "${nm_uuid}") + [ -z "${ifcfg_file}" ] && ifcfg_file=$(get_ifcfg_by_name "${nm_name}") + fi + + echo -n "${ifcfg_file}" +} + +# $1: netdev name +get_ifcfg_legacy() +{ + local ifcfg_file + + ifcfg_file="/etc/sysconfig/network-scripts/ifcfg-${1}" + [ -f "${ifcfg_file}" ] && echo -n "${ifcfg_file}" && return + + ifcfg_file=$(get_ifcfg_by_name "${1}") + [ -f "${ifcfg_file}" ] && echo -n "${ifcfg_file}" && return + + local hwaddr=$(get_hwaddr "${1}") + if [ -n "$hwaddr" ]; then + ifcfg_file=$(get_ifcfg_by_hwaddr "${hwaddr}") + [ -f "${ifcfg_file}" ] && echo -n "${ifcfg_file}" && return + fi + + ifcfg_file=$(get_ifcfg_by_device "${1}") + + echo -n "${ifcfg_file}" +} + +# $1: netdev name +# Return the ifcfg file whole name(including the path) of $1 if any. +get_ifcfg_filename() { + local ifcfg_file + + ifcfg_file=$(get_ifcfg_nmcli "${1}") + if [ -z "${ifcfg_file}" ]; then + ifcfg_file=$(get_ifcfg_legacy "${1}") + fi + + echo -n "${ifcfg_file}" +} + +# returns 0 when omission of watchdog module is desired in dracut_args +# returns 1 otherwise +is_wdt_mod_omitted() { + local dracut_args + local ret=1 + + dracut_args=$(grep "^dracut_args" /etc/kdump.conf) + [[ -z $dracut_args ]] && return $ret + + eval set -- $dracut_args + while :; do + [[ -z $1 ]] && break + case $1 in + -o|--omit) + echo $2 | grep -qw "watchdog" + [[ $? == 0 ]] && ret=0 + break + esac + shift + done + + return $ret +} + +# If "dracut_args" contains "--mount" information, use it +# directly without any check(users are expected to ensure +# its correctness). +is_mount_in_dracut_args() +{ + grep -q "^dracut_args .*\-\-mount" /etc/kdump.conf +} + +# If $1 contains dracut_args "--mount", return +get_dracut_args_fstype() +{ + echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f3 +} + +# If $1 contains dracut_args "--mount", return +get_dracut_args_target() +{ + echo $1 | grep "\-\-mount" | sed "s/.*--mount .\(.*\)/\1/" | cut -d' ' -f1 +} + +check_crash_mem_reserved() +{ + local mem_reserved + + mem_reserved=$(cat /sys/kernel/kexec_crash_size) + if [ $mem_reserved -eq 0 ]; then + echo "No memory reserved for crash kernel" + return 1 + fi + + return 0 +} + +check_kdump_feasibility() +{ + if [ ! -e /sys/kernel/kexec_crash_loaded ]; then + echo "Kdump is not supported on this kernel" + return 1 + fi + check_crash_mem_reserved + return $? +} + +check_current_kdump_status() +{ + if [ ! -f /sys/kernel/kexec_crash_loaded ];then + echo "Perhaps CONFIG_CRASH_DUMP is not enabled in kernel" + return 1 + fi + + rc=`cat /sys/kernel/kexec_crash_loaded` + if [ $rc == 1 ]; then + return 0 + else + return 1 + fi +} + +# remove_cmdline_param [] ... [] +# Remove a list of kernel parameters from a given kernel cmdline and print the result. +# For each "arg" in the removing params list, "arg" and "arg=xxx" will be removed if exists. +remove_cmdline_param() +{ + local cmdline=$1 + shift + + for arg in $@; do + cmdline=`echo $cmdline | \ + sed -e "s/\b$arg=[^ ]*//g" \ + -e "s/^$arg\b//g" \ + -e "s/[[:space:]]$arg\b//g" \ + -e "s/\s\+/ /g"` + done + echo $cmdline +} + +# +# This function returns the "apicid" of the boot +# cpu (cpu 0) if present. +# +get_bootcpu_apicid() +{ + awk ' \ + BEGIN { CPU = "-1"; } \ + $1=="processor" && $2==":" { CPU = $NF; } \ + CPU=="0" && /^apicid/ { print $NF; } \ + ' \ + /proc/cpuinfo +} + +# +# append_cmdline +# This function appends argument "$2=$3" to string ($1) if not already present. +# +append_cmdline() +{ + local cmdline=$1 + local newstr=${cmdline/$2/""} + + # unchanged str implies argument wasn't there + if [ "$cmdline" == "$newstr" ]; then + cmdline="${cmdline} ${2}=${3}" + fi + + echo $cmdline +} + +# This function check iomem and determines if we have more than +# 4GB of ram available. Returns 1 if we do, 0 if we dont +need_64bit_headers() +{ + return `tail -n 1 /proc/iomem | awk '{ split ($1, r, "-"); \ + print (strtonum("0x" r[2]) > strtonum("0xffffffff")); }'` +} + +# Check if secure boot is being enforced. +# +# Per Peter Jones, we need check efivar SecureBoot-$(the UUID) and +# SetupMode-$(the UUID), they are both 5 bytes binary data. The first four +# bytes are the attributes associated with the variable and can safely be +# ignored, the last bytes are one-byte true-or-false variables. If SecureBoot +# is 1 and SetupMode is 0, then secure boot is being enforced. +# +# Assume efivars is mounted at /sys/firmware/efi/efivars. +is_secure_boot_enforced() +{ + local secure_boot_file setup_mode_file + local secure_boot_byte setup_mode_byte + + secure_boot_file=$(find /sys/firmware/efi/efivars -name SecureBoot-* 2>/dev/null) + setup_mode_file=$(find /sys/firmware/efi/efivars -name SetupMode-* 2>/dev/null) + + if [ -f "$secure_boot_file" ] && [ -f "$setup_mode_file" ]; then + secure_boot_byte=$(hexdump -v -e '/1 "%d\ "' $secure_boot_file|cut -d' ' -f 5) + setup_mode_byte=$(hexdump -v -e '/1 "%d\ "' $setup_mode_file|cut -d' ' -f 5) + + if [ "$secure_boot_byte" = "1" ] && [ "$setup_mode_byte" = "0" ]; then + return 0 + fi + fi + + return 1 +} + +# +# prepare_kexec_args +# This function prepares kexec argument. +# +prepare_kexec_args() +{ + local kexec_args=$1 + local found_elf_args + + ARCH=`uname -m` + if [ "$ARCH" == "i686" -o "$ARCH" == "i386" ] + then + need_64bit_headers + if [ $? == 1 ] + then + found_elf_args=`echo $kexec_args | grep elf32-core-headers` + if [ -n "$found_elf_args" ] + then + echo -n "Warning: elf32-core-headers overrides correct elf64 setting" + echo + else + kexec_args="$kexec_args --elf64-core-headers" + fi + else + found_elf_args=`echo $kexec_args | grep elf64-core-headers` + if [ -z "$found_elf_args" ] + then + kexec_args="$kexec_args --elf32-core-headers" + fi + fi + fi + echo $kexec_args +} + +check_boot_dir() +{ + local kdump_bootdir=$1 + #If user specify a boot dir for kdump kernel, let's use it. Otherwise + #check whether it's a atomic host. If yes parse the subdirectory under + #/boot; If not just find it under /boot. + if [ -n "$kdump_bootdir" ]; then + echo "$kdump_bootdir" + return + fi + + if ! is_atomic || [ "$(uname -m)" = "s390x" ]; then + kdump_bootdir="/boot" + else + eval $(cat /proc/cmdline| grep "BOOT_IMAGE" | cut -d' ' -f1) + kdump_bootdir="/boot"$(dirname ${BOOT_IMAGE#*)}) + fi + echo $kdump_bootdir +} + +# +# prepare_cmdline +# This function performs a series of edits on the command line. +# Store the final result in global $KDUMP_COMMANDLINE. +prepare_cmdline() +{ + local cmdline id + + if [ -z "$1" ]; then + cmdline=$(cat /proc/cmdline) + else + cmdline="$1" + fi + + # These params should always be removed + cmdline=$(remove_cmdline_param "$cmdline" crashkernel panic_on_warn) + # These params can be removed configurably + cmdline=$(remove_cmdline_param "$cmdline" "$2") + + # Always remove "root=X", as we now explicitly generate all kinds + # of dump target mount information including root fs. + # + # We do this before KDUMP_COMMANDLINE_APPEND, if one really cares + # about it(e.g. for debug purpose), then can pass "root=X" using + # KDUMP_COMMANDLINE_APPEND. + cmdline=$(remove_cmdline_param "$cmdline" root) + + # With the help of "--hostonly-cmdline", we can avoid some interitage. + cmdline=$(remove_cmdline_param "$cmdline" rd.lvm.lv rd.luks.uuid rd.dm.uuid rd.md.uuid fcoe) + + # Remove netroot, rd.iscsi.initiator and iscsi_initiator since + # we get duplicate entries for the same in case iscsi code adds + # it as well. + cmdline=$(remove_cmdline_param "$cmdline" netroot rd.iscsi.initiator iscsi_initiator) + + cmdline="${cmdline} $3" + + id=$(get_bootcpu_apicid) + if [ ! -z ${id} ] ; then + cmdline=$(append_cmdline "${cmdline}" disable_cpu_apicid ${id}) + fi + echo ${cmdline} +} diff --git a/SPECS/kexec-tools/kdump-udev-throttler b/SPECS/kexec-tools/kdump-udev-throttler new file mode 100755 index 0000000000..cd77a31932 --- /dev/null +++ b/SPECS/kexec-tools/kdump-udev-throttler @@ -0,0 +1,42 @@ +#!/bin/bash +# This util helps to reduce the workload of kdump service restarting +# on udev event. When hotplugging memory / CPU, multiple udev +# events may be triggered concurrently, and obviously, we don't want +# to restart kdump service for each event. + +# This script will be called by udev, and make sure kdump service is +# restart after all events we are watching are settled. + +# On each call, this script will update try to aquire the $throttle_lock +# The first instance acquired the file lock will keep waiting for events +# to settle and then reload kdump. Other instances will just exit +# In this way, we can make sure kdump service is restarted immediately +# and for exactly once after udev events are settled. + +throttle_lock="/var/lock/kdump-udev-throttle" + +exec 9>$throttle_lock +if [ $? -ne 0 ]; then + echo "Failed to create the lock file! Fallback to non-throttled kdump service restart" + /bin/kdumpctl reload + exit 1 +fi + +flock -n 9 +if [ $? -ne 0 ]; then + echo "Throttling kdump restart for concurrent udev event" + exit 0 +fi + +# Wait for at least 1 second, at most 4 seconds for udev to settle +# Idealy we will have a less than 1 second lag between udev events settle +# and kdump reload +sleep 1 && udevadm settle --timeout 3 + +# Release the lock, /bin/kdumpctl will block and make the process +# holding two locks at the same time and we might miss some events +exec 9>&- + +/bin/kdumpctl reload + +exit 0 diff --git a/SPECS/kexec-tools/kdump.conf b/SPECS/kexec-tools/kdump.conf new file mode 100644 index 0000000000..ed78507b27 --- /dev/null +++ b/SPECS/kexec-tools/kdump.conf @@ -0,0 +1,185 @@ +# This file contains a series of commands to perform (in order) in the kdump +# kernel after a kernel crash in the crash kernel(1st kernel) has happened. +# +# Directives in this file are only applicable to the kdump initramfs, and have +# no effect once the root filesystem is mounted and the normal init scripts are +# processed. +# +# Currently, only one dump target and path can be specified. If the dumping to +# the configured target fails, the failure action which can be configured via +# the "failure_action" directive will be performed. +# +# Supported options: +# +# raw +# - Will dd /proc/vmcore into . +# Use persistent device names for partition devices, +# such as /dev/vg/. +# +# nfs +# - Will mount nfs to , and copy /proc/vmcore to +# //%HOST-%DATE/, supports DNS. +# +# ssh +# - Will scp /proc/vmcore to :/%HOST-%DATE/, +# supports DNS. +# NOTE: make sure the user has write permissions on the server. +# +# sshkey +# - Will use the sshkey to do ssh dump. +# Specify the path of the ssh key to use when dumping +# via ssh. The default value is /root/.ssh/kdump_id_rsa. +# +# +# - Will mount -t , and copy +# /proc/vmcore to //%HOST_IP-%DATE/. +# NOTE: can be a device node, label or uuid. +# It's recommended to use persistent device names +# such as /dev/vg/. +# Otherwise it's suggested to use label or uuid. +# +# path +# - "path" represents the file system path in which vmcore +# will be saved. If a dump target is specified in +# kdump.conf, then "path" is relative to the specified +# dump target. +# +# Interpretation of "path" changes a bit if the user didn't +# specify any dump target explicitly in kdump.conf. In this +# case, "path" represents the absolute path from root. The +# dump target and adjusted path are arrived at automatically +# depending on what's mounted in the current system. +# +# Ignored for raw device dumps. If unset, will use the default +# "/var/crash". +# +# core_collector +# - This allows you to specify the command to copy +# the vmcore. The default is makedumpfile, which on +# some architectures can drastically reduce vmcore size. +# See /sbin/makedumpfile --help for a list of options. +# Note that the -i and -g options are not needed here, +# as the initrd will automatically be populated with a +# config file appropriate for the running kernel. +# The default core_collector for raw/ssh dump is: +# "makedumpfile -F -l --message-level 1 -d 31". +# The default core_collector for other targets is: +# "makedumpfile -l --message-level 1 -d 31". +# +# "makedumpfile -F" will create a flattened vmcore. +# You need to use "makedumpfile -R" to rearrange the dump data to +# a normal dumpfile readable with analysis tools. For example: +# "makedumpfile -R vmcore < vmcore.flat". +# +# For core_collector format details, you can refer to +# kexec-kdump-howto.txt or kdump.conf manpage. +# +# kdump_post +# - This directive allows you to run a executable binary +# or script after the vmcore dump process terminates. +# The exit status of the current dump process is fed to +# the executable binary or script as its first argument. +# If /etc/kdump/post.d directory exists, all files in +# the directory are collectively sorted and executed in +# lexical order, before binary or script specified +# kdump_post parameter is executed. +# +# kdump_pre +# - Works like the "kdump_post" directive, but instead of running +# after the dump process, runs immediately before it. +# Exit status of this binary is interpreted as follows: +# 0 - continue with dump process as usual +# non 0 - reboot the system +# If /etc/kdump/pre.d directory exists, all files in +# the directory are collectively sorted and executed in +# lexical order, after binary or script specified +# kdump_pre parameter is executed. +# Even if the binary or script in /etc/kdump/pre.d directory +# returns non 0 exit status, the processing is continued. +# +# extra_bins +# - This directive allows you to specify additional binaries or +# shell scripts to be included in the kdump initrd. +# Generally they are useful in conjunction with a kdump_post +# or kdump_pre binary or script which depends on these extra_bins. +# +# extra_modules +# - This directive allows you to specify extra kernel modules +# that you want to be loaded in the kdump initrd. +# Multiple modules can be listed, separated by spaces, and any +# dependent modules will automatically be included. +# +# failure_action +# - Action to perform in case dumping fails. +# reboot: Reboot the system. +# halt: Halt the system. +# poweroff: Power down the system. +# shell: Drop to a bash shell. +# Exiting the shell reboots the system by default, +# or perform "final_action". +# dump_to_rootfs: Dump vmcore to rootfs from initramfs context and +# reboot by default or perform "final_action". +# Useful when non-root dump target is specified. +# The default option is "reboot". +# +# default +# - Same as the "failure_action" directive above, but this directive +# is obsolete and will be removed in the future. +# +# final_action +# - Action to perform in case dumping succeeds. Also performed +# when "shell" or "dump_to_rootfs" failure action finishes. +# Each action is same as the "failure_action" directive above. +# The default is "reboot". +# +# force_rebuild <0 | 1> +# - By default, kdump initrd will only be rebuilt when necessary. +# Specify 1 to force rebuilding kdump initrd every time when kdump +# service starts. +# +# force_no_rebuild <0 | 1> +# - By default, kdump initrd will be rebuilt when necessary. +# Specify 1 to bypass rebuilding of kdump initrd. +# +# force_no_rebuild and force_rebuild options are mutually +# exclusive and they should not be set to 1 simultaneously. +# +# override_resettable <0 | 1> +# - Usually an unresettable block device can't be a dump target. +# Specifying 1 when you want to dump even though the block +# target is unresettable +# By default, it is 0, which will not try dumping destined to fail. +# +# dracut_args +# - Pass extra dracut options when rebuilding kdump initrd. +# +# fence_kdump_args +# - Command line arguments for fence_kdump_send (it can contain +# all valid arguments except hosts to send notification to). +# +# fence_kdump_nodes +# - List of cluster node(s) except localhost, separated by spaces, +# to send fence_kdump notifications to. +# (this option is mandatory to enable fence_kdump). +# + +#raw /dev/vg/lv_kdump +#ext4 /dev/vg/lv_kdump +#ext4 LABEL=/boot +#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937 +#nfs my.server.com:/export/tmp +#ssh user@my.server.com +#sshkey /root/.ssh/kdump_id_rsa +path /var/crash +core_collector makedumpfile -l --message-level 1 -d 31 +#core_collector scp +#kdump_post /var/crash/scripts/kdump-post.sh +#kdump_pre /var/crash/scripts/kdump-pre.sh +#extra_bins /usr/bin/lftp +#extra_modules gfs2 +#failure_action shell +#force_rebuild 1 +#force_no_rebuild 1 +#dracut_args --omit-drivers "cfg80211 snd" --add-drivers "ext2 ext3" +#fence_kdump_args -p 7410 -f auto -c 0 -i 10 +#fence_kdump_nodes node1 node2 diff --git a/SPECS/kexec-tools/kdump.conf.5 b/SPECS/kexec-tools/kdump.conf.5 new file mode 100644 index 0000000000..9f2b2b611e --- /dev/null +++ b/SPECS/kexec-tools/kdump.conf.5 @@ -0,0 +1,372 @@ +.TH KDUMP.CONF 5 "07/23/2008" "kexec-tools" + +.SH NAME +kdump.conf \- configuration file for kdump kernel. + +.SH DESCRIPTION + +kdump.conf is a configuration file for the kdump kernel crash +collection service. + +kdump.conf provides post-kexec instructions to the kdump kernel. It is +stored in the initrd file managed by the kdump service. If you change +this file and do not want to reboot in order for the changes to take +effect, restart the kdump service to rebuild the initrd. + +For most configurations, you can simply review the examples provided +in the stock /etc/kdump.conf. + +.B NOTE: +For filesystem dumps the dump target must be mounted before building +kdump initramfs. + +kdump.conf only affects the behavior of the initramfs. Please read the +kdump operational flow section of kexec-kdump-howto.txt in the docs to better +understand how this configuration file affects the behavior of kdump. + +.SH OPTIONS + +.B raw +.RS +Will dd /proc/vmcore into . Use persistent device names for +partition devices, such as /dev/vg/. +.RE + +.B nfs +.RS +Will mount nfs to , and copy /proc/vmcore to //%HOST-%DATE/, +supports DNS. Note that a fqdn should be used as the server name in the +mount point. +.RE + +.B ssh +.RS +Will scp /proc/vmcore to :/%HOST-%DATE/, +supports DNS. NOTE: make sure user has necessary write permissions on +server and that a fqdn is used as the server name. +.RE + +.B sshkey +.RS +Specify the path of the ssh key to use when dumping via ssh. +The default value is /root/.ssh/kdump_id_rsa. +.RE + +.B +.RS +Will mount -t , and copy /proc/vmcore to +//%HOST_IP-%DATE/. NOTE: can be a device node, label +or uuid. It's recommended to use persistent device names such as +/dev/vg/. Otherwise it's suggested to use label or uuid. +.RE + +.B path +.RS +"path" represents the file system path in which vmcore will be saved. +If a dump target is specified in kdump.conf, then "path" is relative to the +specified dump target. +.PP +Interpretation of "path" changes a bit if the user didn't specify any dump +target explicitly in kdump.conf. In this case, "path" represents the +absolute path from root. The dump target and adjusted path are arrived +at automatically depending on what's mounted in the current system. +.PP +Ignored for raw device dumps. If unset, will use the default "/var/crash". +.RE + +.B core_collector +.RS +This allows you to specify the command to copy the vmcore. +The default is makedumpfile, which on some architectures can drastically reduce +core file size. See /sbin/makedumpfile --help for a list of options. +Note that the -i and -g options are not needed here, as the initrd +will automatically be populated with a config file appropriate +for the running kernel. +.PP +Note 1: About default core collector: +The default core_collector for raw/ssh dump is: +"makedumpfile -F -l --message-level 1 -d 31". +The default core_collector for other targets is: +"makedumpfile -l --message-level 1 -d 31". +Even if core_collector option is commented out in kdump.conf, makedumpfile +is the default core collector and kdump uses it internally. +If one does not want makedumpfile as default core_collector, then they +need to specify one using core_collector option to change the behavior. +.PP +Note 2: If "makedumpfile -F" is used then you will get a flattened format +vmcore.flat, you will need to use "makedumpfile -R" to rearrange the +dump data from standard input to a normal dumpfile (readable with analysis +tools). +ie. "makedumpfile -R vmcore < vmcore.flat" + +.RE + +.B kdump_post +.RS +This directive allows you to run a specified executable +just after the vmcore dump process terminates. The exit +status of the current dump process is fed to the kdump_post +executable as its first argument($1). Executable can modify +it to indicate the new exit status of succeeding dump process, +.PP +If /etc/kdump/post.d directory exists, All files in +the directory are collectively sorted and executed in +lexical order, before binary or script specified +kdump_post parameter is executed. +.PP +Note that scripts written for use with this directive must use +the /bin/bash interpreter. +.RE + +.B kdump_pre +.RS +Works just like the "kdump_post" directive, but instead +of running after the dump process, runs immediately +before. Exit status of this binary is interpreted +as follows: +.PP +0 - continue with dump process as usual +.PP +non 0 - reboot the system +.PP +If /etc/kdump/pre.d directory exists, all files in +the directory are collectively sorted and executed in +lexical order, after binary or script specified +kdump_pre parameter is executed. +Even if the binary or script in /etc/kdump/pre.d directory +returns non 0 exit status, the processing is continued. +.PP +Note that scripts written for this directive must use +the /bin/bash interpreter. +.RE + +.B extra_bins +.RS +This directive allows you to specify additional +binaries or shell scripts you'd like to include in +your kdump initrd. Generally only useful in +conjunction with a kdump_post binary or script that +relies on other binaries or scripts. +.RE + +.B extra_modules +.RS +This directive allows you to specify extra kernel +modules that you want to be loaded in the kdump +initrd, typically used to set up access to +non-boot-path dump targets that might otherwise +not be accessible in the kdump environment. Multiple +modules can be listed, separated by spaces, and any +dependent modules will automatically be included. +.RE + +.B failure_action +.RS +Action to perform in case dumping to the intended target fails. The default is "reboot". +reboot: Reboot the system (this is what most people will want, as it returns the system +to a normal state). halt: Halt the system and lose the vmcore. poweroff: The system +will be powered down. shell: Drop to a shell session inside the initramfs, from which +you can manually perform additional recovery actions. Exiting this shell reboots the +system by default or performs "final_action". +Note: kdump uses bash as the default shell. dump_to_rootfs: If non-root dump +target is specified, the failure action can be set as dump_to_rootfs. That means when +dumping to target fails, dump vmcore to rootfs from initramfs context and reboot +by default or perform "final_action". +.RE + +.B default +.RS +Same as the "failure_action" directive above, but this directive is obsolete +and will be removed in the future. +.RE + +.B final_action +.RS +Action to perform in case dumping to the intended target succeeds. +Also performed when "shell" or "dump_to_rootfs" failure action finishes. +Each action is same as the "failure_action" directive above. +The default is "reboot". +.RE + +.B force_rebuild <0 | 1> +.RS +By default, kdump initrd will only be rebuilt when necessary. +Specify 1 to force rebuilding kdump initrd every time when kdump service starts. +.RE + +.B force_no_rebuild <0 | 1> +.RS +By default, kdump initrd will be rebuilt when necessary. +Specify 1 to bypass rebuilding of kdump initrd. + +.PP +force_no_rebuild and force_rebuild options are mutually exclusive and +they should not be set to 1 simultaneously. +.RE + +.B override_resettable <0 | 1> +.RS +Usually an unresettable block device can't be a dump target. Specifying 1 means +that even though the block target is unresettable, the user wants to try dumping anyway. +By default, it's set to 0, which will not try something destined to fail. +.RE + + +.B dracut_args +.RS +Kdump uses dracut to generate initramfs for second kernel. This option +allows a user to pass arguments to dracut directly. +.RE + + +.B fence_kdump_args +.RS +Command line arguments for fence_kdump_send (it can contain all valid +arguments except hosts to send notification to). +.RE + + +.B fence_kdump_nodes +.RS +List of cluster node(s) except localhost, separated by spaces, to send fence_kdump notification +to (this option is mandatory to enable fence_kdump). +.RE + + +.SH DEPRECATED OPTIONS + +.B net | +.RS +net option is replaced by nfs and ssh options. Use nfs or ssh options +directly. +.RE + +.B options

). -+ // -+ // To avoid this, we check that the last non-bracket character of the tag -+ // (z.raw.end-2) isn't the same character as the last non-quote character of -+ // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has -+ // attributes. -+ nAttrs := len(z.attr) -+ if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { - return SelfClosingTagToken - } - return StartTagToken --- -2.45.3 - diff --git a/SPECS/packer/CVE-2025-27144.patch b/SPECS/packer/CVE-2025-27144.patch deleted file mode 100644 index 6015ed48ca..0000000000 --- a/SPECS/packer/CVE-2025-27144.patch +++ /dev/null @@ -1,50 +0,0 @@ -From fa324fa38481f9d2da9109cb5983326f62ff7507 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 07:45:53 +0000 -Subject: [PATCH] CVE-2025-27144 -Upstream Ref: https://github.com/go-jose/go-jose/commit/c9ed84d8f0cfadcfad817150158caca6fcbc518b - ---- - vendor/gopkg.in/square/go-jose.v2/jwe.go | 5 +++-- - vendor/gopkg.in/square/go-jose.v2/jws.go | 5 +++-- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/vendor/gopkg.in/square/go-jose.v2/jwe.go b/vendor/gopkg.in/square/go-jose.v2/jwe.go -index b5a6dcd..cd1de9e 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/jwe.go -+++ b/vendor/gopkg.in/square/go-jose.v2/jwe.go -@@ -201,10 +201,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { - - // parseEncryptedCompact parses a message in compact format. - func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("square/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) - if err != nil { -diff --git a/vendor/gopkg.in/square/go-jose.v2/jws.go b/vendor/gopkg.in/square/go-jose.v2/jws.go -index 7e261f9..a8d55fb 100644 ---- a/vendor/gopkg.in/square/go-jose.v2/jws.go -+++ b/vendor/gopkg.in/square/go-jose.v2/jws.go -@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { - - // parseSignedCompact parses a message in compact format. - func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("square/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("square/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/packer/CVE-2025-30204.patch b/SPECS/packer/CVE-2025-30204.patch deleted file mode 100644 index b72c6e6ae2..0000000000 --- a/SPECS/packer/CVE-2025-30204.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 3b49efd441bf131dd895fd75dcf669a493b95638 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Sat, 29 Mar 2025 17:54:57 +0000 -Subject: [PATCH] CVE-2025-30204 - -Upstream Patch Reference : v4: https://github.com/golang-jwt/jwt/commit/2f0e9add62078527821828c76865661aa7718a84 - ---- - vendor/github.com/golang-jwt/jwt/v4/parser.go | 36 +++++++++++++++++++++++--- - 1 file changed, 33 insertions(+), 3 deletions(-) - -diff --git a/vendor/github.com/golang-jwt/jwt/v4/parser.go b/vendor/github.com/golang-jwt/jwt/v4/parser.go -index 2f61a69..9484f28 100644 ---- a/vendor/github.com/golang-jwt/jwt/v4/parser.go -+++ b/vendor/github.com/golang-jwt/jwt/v4/parser.go -@@ -7,6 +7,8 @@ import ( - "strings" - ) - -+const tokenDelimiter = "." -+ - type Parser struct { - // If populated, only these methods will be considered valid. - // -@@ -116,9 +118,10 @@ func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyf - // It's only ever useful in cases where you know the signature is valid (because it has - // been checked previously in the stack) and you want to extract values from it. - func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Token, parts []string, err error) { -- parts = strings.Split(tokenString, ".") -- if len(parts) != 3 { -- return nil, parts, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) -+ var ok bool -+ parts, ok = splitToken(tokenString) -+ if !ok { -+ return nil, nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - token = &Token{Raw: tokenString} -@@ -168,3 +171,30 @@ func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Toke - - return token, parts, nil - } -+ -+// splitToken splits a token string into three parts: header, claims, and signature. It will only -+// return true if the token contains exactly two delimiters and three parts. In all other cases, it -+// will return nil parts and false. -+func splitToken(token string) ([]string, bool) { -+ parts := make([]string, 3) -+ header, remain, ok := strings.Cut(token, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[0] = header -+ claims, remain, ok := strings.Cut(remain, tokenDelimiter) -+ if !ok { -+ return nil, false -+ } -+ parts[1] = claims -+ // One more cut to ensure the signature is the last part of the token and there are no more -+ // delimiters. This avoids an issue where malicious input could contain additional delimiters -+ // causing unecessary overhead parsing tokens. -+ signature, _, unexpected := strings.Cut(remain, tokenDelimiter) -+ if unexpected { -+ return nil, false -+ } -+ parts[2] = signature -+ -+ return parts, true -+} --- -2.45.2 - diff --git a/SPECS/packer/packer.signatures.json b/SPECS/packer/packer.signatures.json deleted file mode 100644 index 458be6b9fa..0000000000 --- a/SPECS/packer/packer.signatures.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Signatures": { - "packer-1.9.5-vendor-v2.tar.gz": "4b77d1bba3adb00a8a410b8a507df96f66e2b36a016d49300b08f77c8d3f7245", - "packer-1.9.5.tar.gz": "a6da3e455578f5373c5e333023a7be483e9c22f4235ccd599fe39d42df55f870" - } -} \ No newline at end of file diff --git a/SPECS/packer/packer.spec b/SPECS/packer/packer.spec deleted file mode 100644 index 82d518c446..0000000000 --- a/SPECS/packer/packer.spec +++ /dev/null @@ -1,157 +0,0 @@ -%global debug_package %{nil} -%define our_gopath %{_topdir}/.gopath - -Summary: Tool for creating identical machine images for multiple platforms from a single source configuration. -Name: packer -Version: 1.9.5 -Release: 10%{?dist} -License: MPLv2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Applications/Tools -URL: https://github.com/hashicorp/packer -Source0: https://github.com/hashicorp/packer/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -# Below is a manually created tarball, no download link. -# We're using pre-populated Go modules from this tarball, since network is disabled during build time. -# How to re-build this file: -# 1. wget https://github.com/hashicorp/packer/archive/v%{version}.tar.gz -O %%{name}-%%{version}.tar.gz -# 2. tar -xf %%{name}-%%{version}.tar.gz -# 3. cd %%{name}-%%{version} -# 4. Apply all patches affecting "go.mod" and "go.sum" files. Example: CVE-2025-21613.patch. -# 5. go mod vendor -# 6. tar --sort=name \ -# --mtime="2021-04-26 00:00Z" \ -# --owner=0 --group=0 --numeric-owner \ -# --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ -# -cf %%{name}-%%{version}-vendor.tar.gz vendor -# -# NOTES: -# - You require GNU tar version 1.28+. -# - The additional options enable generation of a tarball with the same hash every time regardless of the environment. -# See: https://reproducible-builds.org/docs/archives/ -# - For the value of "--mtime" use the date "2021-04-26 00:00Z" to simplify future updates. -Source1: %{name}-%{version}-vendor-v2.tar.gz -Patch0: CVE-2022-3064.patch -Patch1: CVE-2024-6104.patch -Patch2: CVE-2024-24786.patch -Patch3: CVE-2025-21613.patch -Patch4: CVE-2024-28180.patch -Patch5: CVE-2025-27144.patch -Patch6: CVE-2025-22869.patch -Patch7: CVE-2025-22868.patch -Patch8: CVE-2025-30204.patch -Patch9: CVE-2025-22870.patch -Patch10: CVE-2024-51744.patch -Patch11: CVE-2025-22872.patch - -BuildRequires: golang >= 1.21 -BuildRequires: kernel-headers -BuildRequires: glibc-devel - -%description -Packer is a tool for building identical machine images for multiple platforms from a single source configuration. - -%prep -%autosetup -p1 -a1 - -%build -export GOPATH=%{our_gopath} -LD_FLAGS="-X github.com/hashicorp/packer/version.Version=%{version} -X github.com/hashicorp/packer/version.VersionPrerelease=" -go build -mod=vendor -v -a -o packer -ldflags="$LD_FLAGS" - -%install -install -m 755 -d %{buildroot}%{_bindir} -install -p -m 755 -t %{buildroot}%{_bindir} ./packer/packer - -%check -go test -mod=vendor -./packer/packer -help - -%files -%defattr(-,root,root) -%license LICENSE -%doc README.md CHANGELOG.md -%{_bindir}/packer - -%changelog -* Fri May 30 2025 Ranjan Dutta - 1.9.5-10 -- merge from Azure Linux 3.0.20250521-3.0 -- Patch CVE-2025-22872 -- Fix CVE-2025-22870, CVE-2024-51744 with upstream patches -- Patch CVE-2025-30204 - -* Fri Apr 28 2025 Ranjan Dutta - 1.9.5-8 -- merge from Azure Linux tag 3.0.20250423-3.0 - -* Fri Mar 21 2025 Anuj Mittal - 1.9.5-7 -- Bump Release to rebuild - -* Fri Feb 28 2025 Kanishk Bansal - 1.9.5-6 -- Fix CVE-2024-28180, CVE-2025-27144, CVE-2025-22869, CVE-2025-22868 with an upstream patch - -* Thu Jan 09 2025 Sudipta Pandit - 1.9.5-5 -- Add patch for CVE-2025-21613 and CVE-2025-21614 -- Remove patch for CVE-2023-45288, CVE-2023-49569, CVE-2024-45337 - -* Fri Dec 20 2024 Aurelien Bombo - 1.9.5-4 -- Add patch for CVE-2024-45337 - -* Mon Nov 25 2024 Bala - 1.9.5-3 -- Patched CVE-2024-24786 - -* Mon Aug 05 2024 Bala - 1.9.5-2 -- Patched CVE-2024-6104. - -* Mon Jul 01 2024 Pawel Winogrodzki - 1.9.5-1 -- Bump to version 1.9.5. -- Patched CVE-2022-3064. -- Ported patches from 2.0: CVE-2023-45288 and CVE-2023-49569. - -* Fri Oct 27 2023 CBL-Mariner Servicing Account - 1.9.4-1 -- Auto-upgrade to 1.9.4 - Azure Linux 3.0 - package upgrades - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.8.1-15 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.8.1-14 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.8.1-13 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.8.1-12 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.8.1-11 -- Bump release to rebuild with go 1.19.10 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.8.1-10 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.8.1-9 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.8.1-8 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.8.1-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.8.1-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.8.1-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.8.1-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 1.8.1-3 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jun 14 2022 Muhammad Falak - 1.8.1-2 -- Bump release to rebuild with golang 1.18.3 - -* Tue Jun 07 2022 Suresh Babu Chalamalasetty - 1.8.1-1 -- Original version for CBL-Mariner. -- License verified. diff --git a/SPECS/prebuilt-ca-certificates-base/prebuilt-ca-certificates-base.spec b/SPECS/prebuilt-ca-certificates-base/prebuilt-ca-certificates-base.spec index f9c0dd0876..a3cac099ce 100644 --- a/SPECS/prebuilt-ca-certificates-base/prebuilt-ca-certificates-base.spec +++ b/SPECS/prebuilt-ca-certificates-base/prebuilt-ca-certificates-base.spec @@ -3,7 +3,7 @@ Name: prebuilt-ca-certificates-base # When updating, "Epoch, "Version", AND "Release" tags must be updated in the "ca-certificates" package as well. Epoch: 1 Version: %{emt}.0.0 -Release: 11%{?dist} +Release: 14%{?dist} License: MIT Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -46,6 +46,10 @@ find %{buildroot} -name README -delete %{_sysconfdir}/pki/java/cacerts %changelog +* Mon Jan 5 2025 Lee Chee Yang - 1:3.0.0-14 +- merge from Azure Linux 3.0.20251206-3.0 +- Making 'Release' match with 'ca-certificates' + * Fri Oct 3 2025 Lee Chee Yang - 1:3.0.0-11 - merge from Azure Linux 3.0.20250910-3.0 - Making 'Release' match with 'ca-certificates' diff --git a/SPECS/prebuilt-ca-certificates/prebuilt-ca-certificates.spec b/SPECS/prebuilt-ca-certificates/prebuilt-ca-certificates.spec index bc8006c989..b9faed0693 100644 --- a/SPECS/prebuilt-ca-certificates/prebuilt-ca-certificates.spec +++ b/SPECS/prebuilt-ca-certificates/prebuilt-ca-certificates.spec @@ -3,7 +3,7 @@ Name: prebuilt-ca-certificates # When updating, "Epoch, "Version", AND "Release" tags must be updated in the "ca-certificates" package as well. Epoch: 1 Version: %{emt}.0.0 -Release: 11%{?dist} +Release: 14%{?dist} License: MIT Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -49,6 +49,10 @@ find %{buildroot} -name README -delete %{_sysconfdir}/pki/java/cacerts %changelog +* Mon Jan 5 2025 Lee Chee Yang - 1:3.0.0-14 +- merge from Azure Linux 3.0.20251206-3.0 +- Making 'Release' match with 'ca-certificates' + * Fri Oct 3 2025 Lee Chee Yang - 1:3.0.0-11 - merge from Azure Linux 3.0.20250910-3.0 - Making 'Release' match with 'ca-certificates' diff --git a/SPECS/prometheus-adapter/CVE-2025-47911.patch b/SPECS/prometheus-adapter/CVE-2025-47911.patch new file mode 100644 index 0000000000..8bcf17450e --- /dev/null +++ b/SPECS/prometheus-adapter/CVE-2025-47911.patch @@ -0,0 +1,100 @@ +From 8883fae3bfd8f236517505577e5403a2956943d2 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit + +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go +index 04c6bec..12f2273 100644 +--- a/vendor/golang.org/x/net/html/escape.go ++++ b/vendor/golang.org/x/net/html/escape.go +@@ -299,7 +299,7 @@ func escape(w writer, s string) error { + case '\r': + esc = " " + default: +- panic("unrecognized escape character") ++ panic("html: unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 979ef17..4d12a1c 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { + } + + if n.Type == ElementNode { +- p.oe = append(p.oe, n) ++ p.insertOpenElement(n) ++ } ++} ++ ++func (p *parser) insertOpenElement(n *Node) { ++ p.oe = append(p.oe, n) ++ if len(p.oe) > 512 { ++ panic("html: open stack of elements exceeds 512 nodes") + } + } + +@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: +- p.oe = append(p.oe, p.head) ++ p.insertOpenElement(p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: +@@ -2320,9 +2327,13 @@ func (p *parser) parseCurrentToken() { + } + } + +-func (p *parser) parse() error { ++func (p *parser) parse() (err error) { ++ defer func() { ++ if panicErr := recover(); panicErr != nil { ++ err = fmt.Errorf("%s", panicErr) ++ } ++ }() + // Iterate until EOF. Any other error will cause an early return. +- var err error + for err != io.EOF { + // CDATA sections are allowed only in foreign content. + n := p.oe.top() +@@ -2351,6 +2362,8 @@ func (p *parser) parse() error { + // s. Conversely, explicit s in r's data can be silently dropped, + // with no corresponding node in the resulting tree. + // ++// Parse will reject HTML that is nested deeper than 512 elements. ++// + // The input is assumed to be UTF-8 encoded. + func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/prometheus-adapter/CVE-2025-58190.patch b/SPECS/prometheus-adapter/CVE-2025-58190.patch new file mode 100644 index 0000000000..87174d423c --- /dev/null +++ b/SPECS/prometheus-adapter/CVE-2025-58190.patch @@ -0,0 +1,126 @@ +From 00d49967776b5a8e9a043d9b3e961596c07efa02 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec + +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 5b8374b..979ef17 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + return -1 + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) + } + } + switch s { +@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { + return + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) + } + } + } +@@ -1674,7 +1674,7 @@ func inTableBodyIM(p *parser) bool { + return inTableIM(p) + } + +-// Section 12.2.6.4.14. ++// Section 13.2.6.4.14. + func inRowIM(p *parser) bool { + switch p.tok.Type { + case StartTagToken: +@@ -1686,7 +1686,9 @@ func inRowIM(p *parser) bool { + p.im = inCellIM + return true + case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } +@@ -1696,22 +1698,28 @@ func inRowIM(p *parser) bool { + case EndTagToken: + switch p.tok.DataAtom { + case a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return true + } + // Ignore the token. + return true + case a.Table: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } + // Ignore the token. + return true + case a.Tbody, a.Tfoot, a.Thead: +- if p.elementInScope(tableScope, p.tok.DataAtom) { +- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) ++ if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() ++ p.im = inTableBodyIM + return false + } + // Ignore the token. +@@ -2218,16 +2226,20 @@ func parseForeignContent(p *parser) bool { + p.acknowledgeSelfClosingTag() + } + case EndTagToken: ++ if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { ++ p.oe = p.oe[:len(p.oe)-1] ++ return true ++ } + for i := len(p.oe) - 1; i >= 0; i-- { +- if p.oe[i].Namespace == "" { +- return p.im(p) +- } + if strings.EqualFold(p.oe[i].Data, p.tok.Data) { + p.oe = p.oe[:i] ++ return true ++ } ++ if i > 0 && p.oe[i-1].Namespace == "" { + break + } + } +- return true ++ return p.im(p) + default: + // Ignore the token. + } +-- +2.45.4 + diff --git a/SPECS/prometheus-adapter/prometheus-adapter.spec b/SPECS/prometheus-adapter/prometheus-adapter.spec index cb5ca417e6..6e0a737809 100644 --- a/SPECS/prometheus-adapter/prometheus-adapter.spec +++ b/SPECS/prometheus-adapter/prometheus-adapter.spec @@ -1,7 +1,7 @@ Summary: Kubernetes Custom, Resource, and External Metric APIs implemented to work with Prometheus. Name: prometheus-adapter Version: 0.12.0 -Release: 5%{?dist} +Release: 6%{?dist} License: Apache-2.0 Vendor: Microsoft Corporation Distribution: Azure Linux @@ -9,6 +9,8 @@ URL: https://github.com/kubernetes-sigs/prometheus-adapter Source0: https://github.com/kubernetes-sigs/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Patch0: CVE-2024-45338.patch Patch1: CVE-2025-22872.patch +Patch2: CVE-2025-47911.patch +Patch3: CVE-2025-58190.patch BuildRequires: golang < 1.25 %description @@ -43,6 +45,10 @@ make test %doc README.md RELEASE.md %changelog +* Mon Mar 16 2026 Lee Chee Yang - 0.12.0-6 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-47911, CVE-2025-58190 + * Fri Oct 3 2025 Lee Chee Yang - 0.12.0-5 - merge from Azure Linux 3.0.20250910-3.0 - Set BR for golang to < 1.25 diff --git a/SPECS/python-dmidecode/python-dmidecode.signatures.json b/SPECS/python-dmidecode/python-dmidecode.signatures.json index bbd4890b56..0872c33b63 100644 --- a/SPECS/python-dmidecode/python-dmidecode.signatures.json +++ b/SPECS/python-dmidecode/python-dmidecode.signatures.json @@ -2,4 +2,4 @@ "Signatures": { "python-dmidecode-3.12.3.tar.gz": "44d45d7d8344290c259c989d3af3f614c7837cbd85052d486adfa46a1c777164" } -} +} \ No newline at end of file diff --git a/SPECS/python-dmidecode/python-dmidecode.spec b/SPECS/python-dmidecode/python-dmidecode.spec index 678bf04a8f..af26cfece2 100644 --- a/SPECS/python-dmidecode/python-dmidecode.spec +++ b/SPECS/python-dmidecode/python-dmidecode.spec @@ -1,13 +1,15 @@ -Summary: Python module to access DMI data -Name: python-dmidecode -Version: 3.12.3 -Release: 2%{?dist} -License: GPL-2.0-only -Vendor: Intel Corporation -Distribution: Edge Microvisor Toolkit -URL: https://github.com/nima/python-dmidecode -Source0: %{url}/archive/refs/tags/v%{version}/%{name}-%{version}.tar.gz -Patch0: python-dmidecode-rhbz2154949.patch +Name: python-dmidecode +Summary: Python module to access DMI data +Version: 3.12.3 +Release: 10%{?dist} +License: GPL-2.0-only +Vendor: Microsoft Corporation +Distribution: Azure Linux +URL: https://github.com/nima/python-dmidecode +Source0: https://github.com/nima/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz + +Patch0: python-dmidecode-rhbz2154949.patch + BuildRequires: make BuildRequires: gcc BuildRequires: libxml2-devel @@ -26,11 +28,12 @@ as python data structures or as XML data using libxml2.\ %package -n python3-dmidecode Summary: Python 3 module to access DMI data Requires: libxml2-python3 + %description -n python3-dmidecode %_description + %prep -%autosetup -n %{name}-%{version} -N -%patch 0 -p1 -b .backup +%autosetup -p1 -n %{name}-%{version} %build # -std=gnu89 is there to avoid `undefined symbol: dmixml_GetContent` @@ -45,9 +48,9 @@ export CXX=g++ %{__python3} src/setup.py install --root %{buildroot} --prefix=%{_prefix} %check -export PYTHONPATH=%{buildroot}%{python3_sitearch} -export PYTHON_BIN=%{__python3} -make -C unit-tests +pushd unit-tests +make +popd %files -n python3-dmidecode %license doc/LICENSE @@ -58,15 +61,69 @@ make -C unit-tests %{_datadir}/%{name}/ %changelog -* Fri Feb 14 2025 Naveen Saini - 3.12.3-2 -- Fix source url. +* Wed Apr 23 2025 Akhila Guruju - 3.12.3-10 +- Initial Azure Linux import from Fedora 41 (license: MIT). +- License verified + +* Fri Jul 19 2024 Fedora Release Engineering - 3.12.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 3.12.3-8 +- Rebuilt for Python 3.13 + +* Mon Jan 22 2024 Fedora Release Engineering - 3.12.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Aug 10 2023 Lichen Liu - 3.12.3-6 +- Use SPDX identifiers for license + +* Fri Jul 21 2023 Fedora Release Engineering - 3.12.3-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Python Maint - 3.12.3-4 +- Rebuilt for Python 3.12 + +* Sat May 20 2023 Antonio Trande - 3.12.3-3 +- Fix BuildRequires packages for Python-3.12 + +* Fri Jan 20 2023 Fedora Release Engineering - 3.12.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sun Dec 25 2022 Antonio Trande - 3.12.3-1 +- Release 3.12.3 +- Temporary fix for rhbz#2154949 + +* Fri Jul 22 2022 Fedora Release Engineering - 3.12.2-29.20210630gitf0a089a1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 3.12.2-28.20210630gitf0a089a1 +- Rebuilt for Python 3.11 + +* Sun Apr 24 2022 Antonio Trande - 3.12.2-27.20210630gitf0a089a1 +- Build commit #f0a089a1 (include covscan error fixes) + +* Fri Jan 21 2022 Fedora Release Engineering - 3.12.2-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Jul 27 2021 Fedora Release Engineering - 3.12.2-25 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 3.12.2-24 +- Rebuilt for Python 3.10 + +* Wed Jan 27 2021 Fedora Release Engineering - 3.12.2-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Nov 26 2020 Antonio Trande - 3.12.2-22 +- Refresh SPEC file +- Fixed for Python-3.10 (rhbz#1898981) -* Wed Sep 18 2024 Mun Chun Yep - 3.12.3-1 -- Upgrade version for Edge Microvisor Toolkit. -- Update version 3.12.3 and patch from Fedora 41 to resolve build error. +* Wed Jul 29 2020 Fedora Release Engineering - 3.12.2-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild -* Fri Oct 15 2021 Pawel Winogrodzki - 3.12.2-20 -- Initial CBL-Mariner import from Fedora 32 (license: MIT). License verified. +* Tue May 26 2020 Miro Hrončok - 3.12.2-20 +- Rebuilt for Python 3.9 * Thu Jan 30 2020 Fedora Release Engineering - 3.12.2-19 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild diff --git a/SPECS/qemu/0059-hw-usb-host-libusb-udev-product_desc-is-non-NULL.patch b/SPECS/qemu/0059-hw-usb-host-libusb-udev-product_desc-is-non-NULL.patch new file mode 100644 index 0000000000..2232ee7d62 --- /dev/null +++ b/SPECS/qemu/0059-hw-usb-host-libusb-udev-product_desc-is-non-NULL.patch @@ -0,0 +1,38 @@ +From 092fb023ac87a9d47615df2547aae6f7bcdf3599 Mon Sep 17 00:00:00 2001 +From: Dongwon Kim +Date: Wed, 14 Jan 2026 13:57:31 -0800 +Subject: [PATCH 3/6] hw/usb/host-libusb: udev->product_desc is non-NULL + +Null checking on udev->product_desc is always false as +it is an array. + +Signed-off-by: Dongwon Kim +--- + hw/usb/host-libusb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c +index 3a08caafa5..6291d57cea 100644 +--- a/hw/usb/host-libusb.c ++++ b/hw/usb/host-libusb.c +@@ -889,7 +889,7 @@ static void usb_host_ep_update(USBHostDevice *s) + if (!conf || conf->bNumInterfaces == 0) { + warn_report("usb-host: ignoring invalid configuration " + "for device %s (bus=%03d, addr=%03d)", +- udev->product_desc ? udev->product_desc : "unknown", ++ udev->product_desc, + s->bus_num, s->addr); + return; + } +@@ -916,7 +916,7 @@ static void usb_host_ep_update(USBHostDevice *s) + alt, + conf->interface[i].num_altsetting ? conf->interface[i].num_altsetting - 1 : -1, + i, +- udev->product_desc ? udev->product_desc : "unknown", ++ udev->product_desc, + s->bus_num, s->addr); + continue; + } +-- +2.43.0 + diff --git a/SPECS/qemu/0060-ui-gtk-Add-HW-cursor-and-render_sync-status-to-statu.patch b/SPECS/qemu/0060-ui-gtk-Add-HW-cursor-and-render_sync-status-to-statu.patch new file mode 100644 index 0000000000..79d2f9e444 --- /dev/null +++ b/SPECS/qemu/0060-ui-gtk-Add-HW-cursor-and-render_sync-status-to-statu.patch @@ -0,0 +1,55 @@ +From 37c235ed7b3f18d5d7c3a437939742c0c4ccafe9 Mon Sep 17 00:00:00 2001 +From: Dongwon Kim +Date: Thu, 8 Jan 2026 15:31:32 -0800 +Subject: [PATCH] ui/gtk: Add HW cursor and render_sync status to status bar + +Display HW cursor and render_sync status at the beginning of the GTK +status bar before FPS information. The status shows 'on' when hw_cursor +option is enabled and a cursor image is present, otherwise shows 'off'. +Similarly, render_sync shows 'on' when dmabuf has render_sync enabled. + +This provides better visibility into hardware cursor and render_sync +state during runtime. + +Signed-off-by: Dongwon Kim +--- + ui/gtk.c | 21 ++++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +diff --git a/ui/gtk.c b/ui/gtk.c +index 1442507b45..9496b6dad4 100644 +--- a/ui/gtk.c ++++ b/ui/gtk.c +@@ -618,9 +618,28 @@ void gd_gl_count_frame(DisplayChangeListener *dcl, bool ups, bool fps) + + delta = curr - prev; + if (delta > 1000000) { +- int d = 0; ++ int d = 0; + /* update rate is calculated and displayed at every 1 secs */ + prev = curr; ++ ++ /* Add HW cursor status at the beginning */ ++ bool hw_cursor_active = false; ++ bool render_sync_active = false; ++ for (i = 0; i < vc->s->nb_vcs; i++) { ++ vc = &s->vc[i]; ++ if (vc->type == GD_VC_GFX && vc->gfx.cursor_image != NULL) { ++ hw_cursor_active = true; ++ } ++ if (vc->type == GD_VC_GFX && vc->gfx.guest_fb.dmabuf && ++ qemu_dmabuf_get_render_sync(vc->gfx.guest_fb.dmabuf)) { ++ render_sync_active = true; ++ } ++ } ++ offset += sprintf(ups_fps_str + offset, "HW cursor %s | render_sync %s ", ++ (s->opts->u.gtk.has_hw_cursor && ++ s->opts->u.gtk.hw_cursor && hw_cursor_active) ? "on" : "off", ++ render_sync_active ? "on" : "off"); ++ + for (i = 0; i < vc->s->nb_vcs; i++) { + vc = &s->vc[i]; + if (vc->type == GD_VC_GFX && +-- +2.43.0 + diff --git a/SPECS/qemu/0061-ui-gtk-check-return-value-of-gdk_seat_grab.patch b/SPECS/qemu/0061-ui-gtk-check-return-value-of-gdk_seat_grab.patch new file mode 100644 index 0000000000..5b27461008 --- /dev/null +++ b/SPECS/qemu/0061-ui-gtk-check-return-value-of-gdk_seat_grab.patch @@ -0,0 +1,130 @@ +From 276b832f7d4d31b954155b362dff6fd0c39ac060 Mon Sep 17 00:00:00 2001 +From: Dongwon Kim +Date: Wed, 4 Mar 2026 21:31:59 -0800 +Subject: [PATCH 6/6] ui/gtk: check return value of gdk_seat_grab + +The function gd_grab_update previously ignored the return value of +gdk_seat_grab. This could lead to a state inconsistency where QEMU +believes it owns the input grab (setting kbd_owner or ptr_owner) +even if the underlying window system denied the request. + +Change gd_grab_update to return a boolean indicating success. +Update gd_grab_keyboard and gd_grab_pointer to check this status +before updating the owner pointers and calculating grab positions. + +Signed-off-by: Dongwon Kim +--- + ui/gtk.c | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/ui/gtk.c b/ui/gtk.c +index 5c14fbb186..cb7bb9dd36 100644 +--- a/ui/gtk.c ++++ b/ui/gtk.c +@@ -1602,7 +1602,6 @@ static gboolean gd_window_state_event(GtkWidget *widget, GdkEvent *event, + s->kbd_owner = NULL; + gd_grab_keyboard(vc, "windows-focused"); + } +- + } + + /* WA to fullscreen window if it's forcefully un-fullscreened by +@@ -1682,7 +1681,7 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque) + } + + static void gd_accel_grab_input(void *opaque); +-static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr); ++static bool gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr); + + static void gd_window_show_on_monitor(GdkDisplay *dpy, VirtualConsole *vc, + gint monitor_num) +@@ -2068,13 +2067,14 @@ static void gd_menu_zoom_fit(GtkMenuItem *item, void *opaque) + gd_update_full_redraw(vc); + } + +-static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr) ++static bool gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr) + { + GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area); + GdkSeat *seat = gdk_display_get_default_seat(display); + GdkWindow *window = gtk_widget_get_window(vc->gfx.drawing_area); + GdkSeatCapabilities caps = 0; + GdkCursor *cursor = NULL; ++ GdkGrabStatus grab_status; + + if (kbd) { + caps |= GDK_SEAT_CAPABILITY_KEYBOARD; +@@ -2085,15 +2085,21 @@ static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr) + } + + if (caps) { +- gdk_seat_grab(seat, window, caps, false, cursor, +- NULL, NULL, NULL); ++ grab_status = gdk_seat_grab(seat, window, caps, false, cursor, ++ NULL, NULL, NULL); ++ if (grab_status != GDK_GRAB_SUCCESS) { ++ return FALSE; ++ } + } else { + gdk_seat_ungrab(seat); + } ++ ++ return TRUE; + } + + static void gd_grab_keyboard(VirtualConsole *vc, const char *reason) + { ++ bool grab_status; + if (vc->s->kbd_owner) { + if (vc->s->kbd_owner == vc) { + return; +@@ -2103,8 +2109,10 @@ static void gd_grab_keyboard(VirtualConsole *vc, const char *reason) + } + + win32_kbd_set_grab(true); +- gd_grab_update(vc, true, vc->s->ptr_owner == vc); +- vc->s->kbd_owner = vc; ++ grab_status = gd_grab_update(vc, true, vc->s->ptr_owner == vc); ++ if (grab_status) { ++ vc->s->kbd_owner = vc; ++ } + gd_update_caption(vc->s); + trace_gd_grab(vc->label, "kbd", reason); + } +@@ -2127,6 +2135,7 @@ static void gd_ungrab_keyboard(GtkDisplayState *s) + static void gd_grab_pointer(VirtualConsole *vc, const char *reason) + { + GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area); ++ bool grab_status; + + if (vc->s->ptr_owner) { + if (vc->s->ptr_owner == vc) { +@@ -2136,10 +2145,13 @@ static void gd_grab_pointer(VirtualConsole *vc, const char *reason) + } + } + +- gd_grab_update(vc, vc->s->kbd_owner == vc, true); +- gdk_device_get_position(gd_get_pointer(display), +- NULL, &vc->s->grab_x_root, &vc->s->grab_y_root); +- vc->s->ptr_owner = vc; ++ grab_status = gd_grab_update(vc, vc->s->kbd_owner == vc, true); ++ if (grab_status) { ++ gdk_device_get_position(gd_get_pointer(display), ++ NULL, &vc->s->grab_x_root, &vc->s->grab_y_root); ++ vc->s->ptr_owner = vc; ++ } ++ + gd_update_caption(vc->s); + trace_gd_grab(vc->label, "ptr", reason); + } +@@ -3019,7 +3031,6 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts) + vc = gd_vc_find_current(s); + g_signal_connect(s->window, "window-state-event", + G_CALLBACK(gd_window_state_event), vc); +- + gtk_widget_set_sensitive(s->view_menu, vc != NULL); + #ifdef CONFIG_VTE + gtk_widget_set_sensitive(s->copy_item, +-- +2.43.0 + diff --git a/SPECS/qemu/qemu.spec b/SPECS/qemu/qemu.spec index 351577d3ce..e3869b36ed 100644 --- a/SPECS/qemu/qemu.spec +++ b/SPECS/qemu/qemu.spec @@ -446,7 +446,7 @@ Obsoletes: sgabios-bin <= 1:0.20180715git-10.fc38 Summary: QEMU is a FAST! processor emulator Name: qemu Version: 9.1.0 -Release: 6%{?dist} +Release: 8%{?dist} License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND FSFAP AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-2.0-or-later WITH GCC-exception-2.0 AND LGPL-2.0-only AND LGPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND MIT AND LicenseRef-Fedora-Public-Domain AND CC-BY-3.0 URL: http://www.qemu.org/ @@ -541,6 +541,9 @@ Patch59: 0056-hw-display-virtio-gpu-Properly-free-current_cursor.patch Patch60: 0057-ui-gtk-Re-grabbing-PTR-KBD-individually.patch Patch61: 0058-hw-usb-host-libusb-Do-not-assert-when-detects-invali.patch Patch62: CVE-2025-54567.patch +Patch63: 0059-hw-usb-host-libusb-udev-product_desc-is-non-NULL.patch +Patch64: 0060-ui-gtk-Add-HW-cursor-and-render_sync-status-to-statu.patch +Patch65: 0061-ui-gtk-check-return-value-of-gdk_seat_grab.patch BuildRequires: gnupg2 BuildRequires: meson >= %{meson_version} @@ -732,7 +735,7 @@ BuildRequires: python3-tomli %endif %if %{user_static} -BuildRequires: glibc-static >= 2.38-12%{?dist} +BuildRequires: glibc-static >= 2.38-18%{?dist} BuildRequires: glib2-static BuildRequires: zlib-static # -latomic added by GLib 2.81.0, 2024-06-28 @@ -3539,6 +3542,14 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %changelog +* Wed Mar 25 2026 Lee Chee Yang - 9.1.0-8 +- Bump to rebuild with updated glibc + +* Mon Mar 17 2026 Dongwon Kim - 9.1.0-7 +- Mouse regrab fix +- Null check in libusb-udev-product_desc +- Check pass/fail from gdk_seat_grab + * Tue Jan 27 2025 Rajesh Shanmugam - 9.1.0-6 - Added 1 patch from Intel Distribution Qemu Commit 8e06d09 - Add patch for CVE-2025-54566 CVE-2025-54567 diff --git a/SPECS/rdma-core/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch b/SPECS/rdma-core/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch deleted file mode 100644 index e4fce78fc7..0000000000 --- a/SPECS/rdma-core/0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -Naur rdma-core-36.3-a/kernel-boot/rdma-persistent-naming.rules rdma-core-36.3-b/kernel-boot/rdma-persistent-naming.rules ---- rdma-core-36.3-a/kernel-boot/rdma-persistent-naming.rules 2022-01-07 00:54:18.000000000 -0800 -+++ rdma-core-36.3-b/kernel-boot/rdma-persistent-naming.rules 2022-02-03 15:10:26.763415015 -0800 -@@ -26,10 +26,10 @@ - # Device type = RoCE - # mlx5_0 -> rocex525400c0fe123455 - # --ACTION=="add", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FALLBACK" -+ACTION=="add", SUBSYSTEM=="infiniband", KERNEL!="hfi1*", PROGRAM="rdma_rename %k NAME_FALLBACK" - - # Example: - # * NAME_FIXED - # fixed name for specific board_id - # --#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" -\ No newline at end of file -+#ACTION=="add", ATTR{board_id}=="MSF0010110035", SUBSYSTEM=="infiniband", PROGRAM="rdma_rename %k NAME_FIXED myib" diff --git a/SPECS/rdma-core/rdma-core.signatures.json b/SPECS/rdma-core/rdma-core.signatures.json index 53e5847d7a..9f118bffa4 100644 --- a/SPECS/rdma-core/rdma-core.signatures.json +++ b/SPECS/rdma-core/rdma-core.signatures.json @@ -1,5 +1,5 @@ { - "Signatures": { - "rdma-core-49.1.tar.gz": "2e531d398073dd7ed28d95c94fa698e1a831952b508e9af93e36644dcd399936" - } -} \ No newline at end of file + "Signatures": { + "rdma-core-59.0.tar.gz": "e2c169b13b318cdc3b5ff957cd8b6dcc8bdf96dd9c5d42324129c163bb057ce5" + } +} diff --git a/SPECS/rdma-core/rdma-core.spec b/SPECS/rdma-core/rdma-core.spec index f91f0e12c3..7e5c4cd17f 100644 --- a/SPECS/rdma-core/rdma-core.spec +++ b/SPECS/rdma-core/rdma-core.spec @@ -1,10 +1,10 @@ Summary: RDMA core userspace libraries and daemons Name: rdma-core -Version: 49.1 -Release: 2%{?dist} +Version: 59.0 +Release: 1%{?dist} URL: https://github.com/linux-rdma/rdma-core -Vendor: Intel Corporation -Distribution: Edge Microvisor Toolkit +Vendor: Microsoft Corporation +Distribution: Azure Linux # Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license # providers/ipathverbs/ Dual licensed using a BSD license with an extra patent clause @@ -12,7 +12,6 @@ Distribution: Edge Microvisor Toolkit # providers/hfi1verbs Uses the 3 Clause BSD license License: GPLv2 or BSD Source0: https://github.com/linux-rdma/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz -Patch1: 0001-kernel-boot-Do-not-perform-device-rename-on-OPA-devi.patch # Do not build static libs by default. %define with_static %{?_with_static: 1} %{?!_with_static: 0} @@ -400,20 +399,21 @@ fi %{_libdir}/lib*.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/efadv* +%{_mandir}/man3/hnsdv* %{_mandir}/man3/ibv_* %{_mandir}/man3/rdma* %{_mandir}/man3/umad* %{_mandir}/man3/*_to_ibv_rate.* %{_mandir}/man7/rdma_cm.* +%{_mandir}/man3/manadv* %{_mandir}/man3/mlx5dv* %{_mandir}/man3/mlx4dv* %{_mandir}/man7/efadv* +%{_mandir}/man7/hnsdv* +%{_mandir}/man7/manadv* %{_mandir}/man7/mlx5dv* %{_mandir}/man7/mlx4dv* %{_mandir}/man3/ibnd_* -# New in v49.0 -%{_mandir}/man3/manadv* -%{_mandir}/man7/manadv* %files -n infiniband-diags-compat %{_sbindir}/ibcheckerrs @@ -528,6 +528,7 @@ fi %dir %{_sysconfdir}/libibverbs.d %dir %{_libdir}/libibverbs %{_libdir}/libefa.so.* +%{_libdir}/libhns.so.* %{_libdir}/libibverbs*.so.* %{_libdir}/libibverbs/*.so %{_libdir}/libmlx5.so.* @@ -624,8 +625,12 @@ fi %endif %changelog -* Tue Sep 30 2025 Andy - 49.1-2 -- Bump version for release +* Tue Nov 04 2025 Suresh Babu Chalamalasetty - 59.0-1 +- Upgrade version to 59.0. + +* Tue Jan 07 2025 Elaheh Dehghani - 55.0-1 +- Upgrade to version 55.0 +- Add rdma-core to PMC extended repo * Mon Jan 22 2024 Kanika Nema - 49.1-1 - Upgrade to version 49.1 for AzL 3.0 release diff --git a/SPECS/runc/runc.signatures.json b/SPECS/runc/runc.signatures.json deleted file mode 100644 index d17c00f6dc..0000000000 --- a/SPECS/runc/runc.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "runc-1.3.3.tar.gz": "3da010af5c2c1c3d12d460255e4a7dc049c223ebc629c80fbbe4c10720997ffe" - } -} diff --git a/SPECS/runc/runc.spec b/SPECS/runc/runc.spec deleted file mode 100644 index 2d9d23a056..0000000000 --- a/SPECS/runc/runc.spec +++ /dev/null @@ -1,149 +0,0 @@ -%define commit_hash d842d7719497cc3b774fd71620278ac9e17710e0 -Summary: CLI tool for spawning and running containers per OCI spec. -Name: runc -# update "commit_hash" above when upgrading version -Version: 1.3.3 -Release: 1%{?dist} -License: ASL 2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Tools/Container -URL: https://github.com/opencontainers/runc -Source0: https://github.com/opencontainers/runc/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -BuildRequires: git -BuildRequires: go-md2man -BuildRequires: golang < 1.25 -BuildRequires: libseccomp-devel -BuildRequires: make -Requires: glibc -Requires: libgcc -Requires: libseccomp -Provides: moby-runc = %{version}-%{release} - -%description -runc is a CLI tool for spawning and running containers according to the OCI specification. Containers are started as a child process of runC and can be embedded into various other systems without having to run a daemon. - -%prep -%autosetup -p1 -n runc-%{version} - -%build -export CGO_ENABLED=1 -make %{?_smp_mflags} BUILDTAGS="seccomp" COMMIT="%{commit_hash}" man runc - -%check -make %{?_smp_mflags} COMMIT="%{commit_hash}" localunittest - -%install -make install DESTDIR=%{buildroot} PREFIX=%{_prefix} BINDIR=%{_bindir} -make install-man DESTDIR=%{buildroot} PREFIX=%{_prefix} - -%files -%license LICENSE NOTICE -%{_bindir}/runc -%{_mandir}/* - -%changelog -* Wed Nov 05 2025 Nan Liu - 1.3.3-1 -- Upgrade to 1.3.3 -- BR golang < 1.25 - -* Mon Nov 25 2024 Nan Liu - 1.2.2-1 -- Bump version to 1.2.2 -- Remove the golang version constraint - -* Tue Oct 15 2024 Muhammad Falak - 1.1.12-2 -- Pin golang version to <= 1.22 - -* Mon Feb 05 2024 Henry Beberman - 1.1.12-1 -- Bump version to 1.1.12 -- Drop cgroups cpuset patch because it's included upstream now -- Rename spec and package to runc instead of moby-runc - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.1.9-3 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.1.9-2 -- Bump release to rebuild with updated version of Go. - -* Tue Aug 15 2023 Muhammad Falak - 1.1.9-1 -- Bump version to 1.1.9 - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.1.5-4 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.1.5-3 -- Bump release to rebuild with go 1.19.11 - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.1.5-2 -- Bump release to rebuild with go 1.19.10 - -* Mon Apr 10 2023 CBL-Mariner Servicing Account - 1.1.5-1 -- Auto-upgrade to 1.1.5 - to fix CVE-2023-28642, CVE-2023-27561, CVE-2023-25809 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.1.2-11 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.1.2-10 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.1.2-9 -- Bump release to rebuild with go 1.19.6 - -* Fri Feb 03 2023 Vince Perri - 1.1.2-8 -- Add 0001-cgroups-cpuset-fix-byte-order-while-parsing-cpuset-r.patch - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.1.2-7 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.1.2-6 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.1.2-5 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.1.2-4 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 1.1.2-3 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jun 14 2022 Muhammad Falak - 1.1.2-2 -- Bump release to rebuild with golang 1.18.3 - -* Thu Jun 02 2022 Nicolas Guibourge 1.1.2-1 -- Upgrade to 1.1.2 to fix CVE-2022-29162. - -* Fri Jan 28 2022 Nicolas Guibourge 1.1.0-1 -- Upgrade to 1.1.0. -- Use code from upstream instead of Azure fork. -- License verified. - -* Tue Jun 08 2021 Henry Beberman 1.0.0~rc95+azure-2 -- Increment release to force republishing using golang 1.15.13. - -* Wed May 19 2021 Andrew Phelps 1.0.0~rc95+azure-1 -- Update to version 1.0.0~rc95+azure to fix CVE-2021-30465 - -* Thu May 13 2021 Andrew Phelps 1.0.0~rc94+azure-1 -- Update to version 1.0.0~rc94+azure - -* Mon Apr 26 2021 Nicolas Guibourge 1.0.0~rc10+azure-6 -- Increment release to force republishing using golang 1.15.11. - -* Thu Dec 10 2020 Andrew Phelps 1.0.0~rc10+azure-5 -- Increment release to force republishing using golang 1.15. - -* Wed May 20 2020 Joe Schmitt 1.0.0~rc10+azure-4 -- Remove reliance on existing GOPATH environment variable. - -* Sat May 09 2020 Nick Samson 1.0.0~rc10+azure-3 -- Added %%license line automatically - -* Fri May 01 2020 Emre Girgin 1.0.0~rc10+azure-2 -- Renaming go to golang - -* Fri Apr 03 2020 Mohan Datla 1.0.0~rc10+azure-1 -- Initial CBL-Mariner import from Azure. - -* Thu Jan 23 2020 Brian Goff -- Initial version diff --git a/SPECS/skopeo/CVE-2022-2879.patch b/SPECS/skopeo/CVE-2022-2879.patch deleted file mode 100644 index a39373ee16..0000000000 --- a/SPECS/skopeo/CVE-2022-2879.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff -ru skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/format.go skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/format.go ---- skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/format.go 2024-06-27 14:36:58.955879940 +0000 -+++ skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/format.go 2024-06-27 14:37:27.387930441 +0000 -@@ -143,6 +143,10 @@ - blockSize = 512 // Size of each block in a tar stream - nameSize = 100 // Max length of the name field in USTAR format - prefixSize = 155 // Max length of the prefix field in USTAR format -+ -+ // Max length of a special file (PAX header, GNU long name or link). -+ // This matches the limit used by libarchive. -+ maxSpecialFileSize = 1 << 20 - ) - - // blockPadding computes the number of bytes needed to pad offset up to the -diff -ru skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/reader.go skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/reader.go ---- skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/reader.go 2024-06-27 14:36:58.955879940 +0000 -+++ skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/reader.go 2024-06-27 14:44:13.452888975 +0000 -@@ -139,7 +139,7 @@ - continue // This is a meta header affecting the next header - case TypeGNULongName, TypeGNULongLink: - format.mayOnlyBe(FormatGNU) -- realname, err := io.ReadAll(tr) -+ realname, err := readSpecialFile(tr) - if err != nil { - return nil, err - } -@@ -333,7 +333,7 @@ - // parsePAX parses PAX headers. - // If an extended header (type 'x') is invalid, ErrHeader is returned - func parsePAX(r io.Reader) (map[string]string, error) { -- buf, err := io.ReadAll(r) -+ buf, err := readSpecialFile(r) - if err != nil { - return nil, err - } -@@ -844,6 +844,16 @@ - } - } - -+// readSpecialFile is like io.ReadAll except it returns -+// ErrFieldTooLong if more than maxSpecialFileSize is read. -+func readSpecialFile(r io.Reader) ([]byte, error) { -+ buf, err := io.ReadAll(io.LimitReader(r, maxSpecialFileSize+1)) -+ if len(buf) > maxSpecialFileSize { -+ return nil, ErrFieldTooLong -+ } -+ return buf, err -+} -+ - func (sr sparseFileReader) LogicalRemaining() int64 { - return sr.sp[len(sr.sp)-1].endOffset() - sr.pos - } -diff -ru skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/writer.go skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/writer.go ---- skopeo-1.14.4-orig/vendor/github.com/vbatts/tar-split/archive/tar/writer.go 2024-06-27 14:36:58.955879940 +0000 -+++ skopeo-1.14.4/vendor/github.com/vbatts/tar-split/archive/tar/writer.go 2024-06-27 14:45:26.077061393 +0000 -@@ -199,6 +199,9 @@ - flag = TypeXHeader - } - data := buf.String() -+ if len(data) > maxSpecialFileSize { -+ return ErrFieldTooLong -+ } - if err := tw.writeRawFile(name, data, flag, FormatPAX); err != nil || isGlobal { - return err // Global headers return here - } diff --git a/SPECS/skopeo/CVE-2023-45288.patch b/SPECS/skopeo/CVE-2023-45288.patch deleted file mode 100644 index f6360426c2..0000000000 --- a/SPECS/skopeo/CVE-2023-45288.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 224f3ac556af38fe8a2f719cdfe5752acfc276b6 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Sun, 10 Nov 2024 19:06:25 +0000 -Subject: [PATCH] http2: close connections when receiving too many headers - -Patch from https://go-review.googlesource.com/c/net/+/576057 ---- - vendor/golang.org/x/net/http2/frame.go | 31 ++++++++++++++++++++++++++ - 1 file changed, 31 insertions(+) - -diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go -index c1f6b90..175c154 100644 ---- a/vendor/golang.org/x/net/http2/frame.go -+++ b/vendor/golang.org/x/net/http2/frame.go -@@ -1565,6 +1565,7 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { - if size > remainSize { - hdec.SetEmitEnabled(false) - mh.Truncated = true -+ remainSize = 0 - return - } - remainSize -= size -@@ -1577,6 +1578,36 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { - var hc headersOrContinuation = hf - for { - frag := hc.HeaderBlockFragment() -+ -+ // Avoid parsing large amounts of headers that we will then discard. -+ // If the sender exceeds the max header list size by too much, -+ // skip parsing the fragment and close the connection. -+ // -+ // "Too much" is either any CONTINUATION frame after we've already -+ // exceeded the max header list size (in which case remainSize is 0), -+ // or a frame whose encoded size is more than twice the remaining -+ // header list bytes we're willing to accept. -+ if int64(len(frag)) > int64(2*remainSize) { -+ if VerboseLogs { -+ log.Printf("http2: header list too large") -+ } -+ // It would be nice to send a RST_STREAM before sending the GOAWAY, -+ // but the struture of the server's frame writer makes this difficult. -+ return nil, ConnectionError(ErrCodeProtocol) -+ } -+ -+ // Also close the connection after any CONTINUATION frame following an -+ // invalid header, since we stop tracking the size of the headers after -+ // an invalid one. -+ if invalid != nil { -+ if VerboseLogs { -+ log.Printf("http2: invalid header: %v", invalid) -+ } -+ // It would be nice to send a RST_STREAM before sending the GOAWAY, -+ // but the struture of the server's frame writer makes this difficult. -+ return nil, ConnectionError(ErrCodeProtocol) -+ } -+ - if _, err := hdec.Write(frag); err != nil { - return nil, ConnectionError(ErrCodeCompression) - } --- -2.39.4 - diff --git a/SPECS/skopeo/CVE-2024-6104.patch b/SPECS/skopeo/CVE-2024-6104.patch deleted file mode 100644 index 879a134e1f..0000000000 --- a/SPECS/skopeo/CVE-2024-6104.patch +++ /dev/null @@ -1,81 +0,0 @@ -From b6bb7dacb0086d150cfbd44f1a636c871485b42d Mon Sep 17 00:00:00 2001 -From: Sindhu Karri -Date: Wed, 17 Jul 2024 08:35:51 +0000 -Subject: [PATCH] Fix CVE-2024-6104 - ---- - .../hashicorp/go-retryablehttp/client.go | 28 ++++++++++++++----- - 1 file changed, 21 insertions(+), 7 deletions(-) - -diff --git a/vendor/github.com/hashicorp/go-retryablehttp/client.go b/vendor/github.com/hashicorp/go-retryablehttp/client.go -index c9edbd0..1394fbc 100644 ---- a/vendor/github.com/hashicorp/go-retryablehttp/client.go -+++ b/vendor/github.com/hashicorp/go-retryablehttp/client.go -@@ -609,9 +609,9 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - if logger != nil { - switch v := logger.(type) { - case LeveledLogger: -- v.Debug("performing request", "method", req.Method, "url", req.URL) -+ v.Debug("performing request", "method", req.Method, "url", redactURL(req.URL)) - case Logger: -- v.Printf("[DEBUG] %s %s", req.Method, req.URL) -+ v.Printf("[DEBUG] %s %s", req.Method, redactURL(req.URL)) - } - } - -@@ -666,9 +666,9 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - if err != nil { - switch v := logger.(type) { - case LeveledLogger: -- v.Error("request failed", "error", err, "method", req.Method, "url", req.URL) -+ v.Error("request failed", "error", err, "method", req.Method, "url", redactURL(req.URL)) - case Logger: -- v.Printf("[ERR] %s %s request failed: %v", req.Method, req.URL, err) -+ v.Printf("[ERR] %s %s request failed: %v", req.Method, redactURL(req.URL), err) - } - } else { - // Call this here to maintain the behavior of logging all requests, -@@ -704,7 +704,7 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - - wait := c.Backoff(c.RetryWaitMin, c.RetryWaitMax, i, resp) - if logger != nil { -- desc := fmt.Sprintf("%s %s", req.Method, req.URL) -+ desc := fmt.Sprintf("%s %s", req.Method, redactURL(req.URL)) - if resp != nil { - desc = fmt.Sprintf("%s (status: %d)", desc, resp.StatusCode) - } -@@ -760,11 +760,11 @@ func (c *Client) Do(req *Request) (*http.Response, error) { - // communicate why - if err == nil { - return nil, fmt.Errorf("%s %s giving up after %d attempt(s)", -- req.Method, req.URL, attempt) -+ req.Method, redactURL(req.URL), attempt) - } - - return nil, fmt.Errorf("%s %s giving up after %d attempt(s): %w", -- req.Method, req.URL, attempt, err) -+ req.Method, redactURL(req.URL), attempt, err) - } - - // Try to read the response body so we can reuse this connection. -@@ -845,3 +845,17 @@ func (c *Client) StandardClient() *http.Client { - Transport: &RoundTripper{Client: c}, - } - } -+ -+// Taken from url.URL#Redacted() which was introduced in go 1.15. -+// We can switch to using it directly if we'll bump the minimum required go version. -+func redactURL(u *url.URL) string { -+ if u == nil { -+ return "" -+ } -+ -+ ru := *u -+ if _, has := ru.User.Password(); has { -+ ru.User = url.UserPassword(ru.User.Username(), "xxxxx") -+ } -+ return ru.String() -+} --- -2.33.8 - diff --git a/SPECS/skopeo/CVE-2024-9676.patch b/SPECS/skopeo/CVE-2024-9676.patch deleted file mode 100644 index 2de7c43f12..0000000000 --- a/SPECS/skopeo/CVE-2024-9676.patch +++ /dev/null @@ -1,182 +0,0 @@ -From d461620d47450c72d9f0da215606949272df3398 Mon Sep 17 00:00:00 2001 -From: Rohit Rawat -Date: Sun, 10 Nov 2024 18:36:17 +0000 -Subject: [PATCH] Backport CVE-2024-9676 fix - -Patch from https://github.com/containers/storage/pull/2146 by Matt Heon ---- - .../github.com/containers/storage/.cirrus.yml | 2 +- - .../github.com/containers/storage/userns.go | 92 +++++++++++++------ - .../containers/storage/userns_unsupported.go | 14 +++ - 3 files changed, 80 insertions(+), 28 deletions(-) - create mode 100644 vendor/github.com/containers/storage/userns_unsupported.go - -diff --git a/vendor/github.com/containers/storage/.cirrus.yml b/vendor/github.com/containers/storage/.cirrus.yml -index c41dd5d..9e61509 100644 ---- a/vendor/github.com/containers/storage/.cirrus.yml -+++ b/vendor/github.com/containers/storage/.cirrus.yml -@@ -119,7 +119,7 @@ lint_task: - env: - CIRRUS_WORKING_DIR: "/go/src/github.com/containers/storage" - container: -- image: golang -+ image: golang:1.19 - modules_cache: - fingerprint_script: cat go.sum - folder: $GOPATH/pkg/mod -diff --git a/vendor/github.com/containers/storage/userns.go b/vendor/github.com/containers/storage/userns.go -index 32ae830..2c855da 100644 ---- a/vendor/github.com/containers/storage/userns.go -+++ b/vendor/github.com/containers/storage/userns.go -@@ -1,18 +1,21 @@ -+//go:build linux -+ - package storage - - import ( - "fmt" - "os" - "os/user" -- "path/filepath" - "strconv" - - drivers "github.com/containers/storage/drivers" - "github.com/containers/storage/pkg/idtools" - "github.com/containers/storage/pkg/unshare" - "github.com/containers/storage/types" -+ securejoin "github.com/cyphar/filepath-securejoin" - libcontainerUser "github.com/opencontainers/runc/libcontainer/user" - "github.com/sirupsen/logrus" -+ "golang.org/x/sys/unix" - ) - - // getAdditionalSubIDs looks up the additional IDs configured for -@@ -85,40 +88,59 @@ const nobodyUser = 65534 - // parseMountedFiles returns the maximum UID and GID found in the /etc/passwd and - // /etc/group files. - func parseMountedFiles(containerMount, passwdFile, groupFile string) uint32 { -+ var ( -+ passwd *os.File -+ group *os.File -+ size int -+ err error -+ ) - if passwdFile == "" { -- passwdFile = filepath.Join(containerMount, "etc/passwd") -- } -- if groupFile == "" { -- groupFile = filepath.Join(groupFile, "etc/group") -+ passwd, err = secureOpen(containerMount, "/etc/passwd") -+ } else { -+ // User-specified override from a volume. Will not be in -+ // container root. -+ passwd, err = os.Open(passwdFile) - } -- -- size := 0 -- -- users, err := libcontainerUser.ParsePasswdFile(passwdFile) - if err == nil { -- for _, u := range users { -- // Skip the "nobody" user otherwise we end up with 65536 -- // ids with most images -- if u.Name == "nobody" { -- continue -- } -- if u.Uid > size && u.Uid != nobodyUser { -- size = u.Uid -- } -- if u.Gid > size && u.Gid != nobodyUser { -- size = u.Gid -+ defer passwd.Close() -+ -+ users, err := libcontainerUser.ParsePasswd(passwd) -+ if err == nil { -+ for _, u := range users { -+ // Skip the "nobody" user otherwise we end up with 65536 -+ // ids with most images -+ if u.Name == "nobody" || u.Name == "nogroup" { -+ continue -+ } -+ if u.Uid > size && u.Uid != nobodyUser { -+ size = u.Uid + 1 -+ } -+ if u.Gid > size && u.Gid != nobodyUser { -+ size = u.Gid + 1 -+ } - } - } - } - -- groups, err := libcontainerUser.ParseGroupFile(groupFile) -+ if groupFile == "" { -+ group, err = secureOpen(containerMount, "/etc/group") -+ } else { -+ // User-specified override from a volume. Will not be in -+ // container root. -+ group, err = os.Open(groupFile) -+ } - if err == nil { -- for _, g := range groups { -- if g.Name == "nobody" { -- continue -- } -- if g.Gid > size && g.Gid != nobodyUser { -- size = g.Gid -+ defer group.Close() -+ -+ groups, err := libcontainerUser.ParseGroup(group) -+ if err == nil { -+ for _, g := range groups { -+ if g.Name == "nobody" || g.Name == "nogroup" { -+ continue -+ } -+ if g.Gid > size && g.Gid != nobodyUser { -+ size = g.Gid + 1 -+ } - } - } - } -@@ -309,3 +331,19 @@ func getAutoUserNSIDMappings( - gidMap := append(availableGIDs.zip(requestedContainerGIDs), additionalGIDMappings...) - return uidMap, gidMap, nil - } -+ -+// Securely open (read-only) a file in a container mount. -+func secureOpen(containerMount, file string) (*os.File, error) { -+ filePath, err := securejoin.SecureJoin(containerMount, file) -+ if err != nil { -+ return nil, err -+ } -+ -+ flags := unix.O_PATH | unix.O_CLOEXEC | unix.O_RDONLY -+ fileHandle, err := os.OpenFile(filePath, flags, 0) -+ if err != nil { -+ return nil, err -+ } -+ -+ return fileHandle, nil -+} -diff --git a/vendor/github.com/containers/storage/userns_unsupported.go b/vendor/github.com/containers/storage/userns_unsupported.go -new file mode 100644 -index 0000000..e37c18f ---- /dev/null -+++ b/vendor/github.com/containers/storage/userns_unsupported.go -@@ -0,0 +1,14 @@ -+//go:build !linux -+ -+package storage -+ -+import ( -+ "errors" -+ -+ "github.com/containers/storage/pkg/idtools" -+ "github.com/containers/storage/types" -+) -+ -+func (s *store) getAutoUserNS(_ *types.AutoUserNsOptions, _ *Image, _ rwLayerStore, _ []roLayerStore) ([]idtools.IDMap, []idtools.IDMap, error) { -+ return nil, nil, errors.New("user namespaces are not supported on this platform") -+} --- -2.39.4 - diff --git a/SPECS/skopeo/CVE-2025-27144.patch b/SPECS/skopeo/CVE-2025-27144.patch deleted file mode 100644 index 5b897aacac..0000000000 --- a/SPECS/skopeo/CVE-2025-27144.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 4da065cd7a4f7263e96bc7028f674c7730177035 Mon Sep 17 00:00:00 2001 -From: Kanishk-Bansal -Date: Fri, 28 Feb 2025 19:31:53 +0000 -Subject: [PATCH] CVE-2025-27144 -Upstream Reference: https://github.com/go-jose/go-jose/commit/5253038e3b5f64a2200b5b6c72107bf9823f4358 - ---- - vendor/github.com/go-jose/go-jose/v3/jwe.go | 5 +++-- - vendor/github.com/go-jose/go-jose/v3/jws.go | 5 +++-- - vendor/gopkg.in/go-jose/go-jose.v2/jwe.go | 5 +++-- - vendor/gopkg.in/go-jose/go-jose.v2/jws.go | 5 +++-- - 4 files changed, 12 insertions(+), 8 deletions(-) - -diff --git a/vendor/github.com/go-jose/go-jose/v3/jwe.go b/vendor/github.com/go-jose/go-jose/v3/jwe.go -index 4267ac7..1ba4ae0 100644 ---- a/vendor/github.com/go-jose/go-jose/v3/jwe.go -+++ b/vendor/github.com/go-jose/go-jose/v3/jwe.go -@@ -202,10 +202,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { - - // parseEncryptedCompact parses a message in compact format. - func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64URLDecode(parts[0]) - if err != nil { -diff --git a/vendor/github.com/go-jose/go-jose/v3/jws.go b/vendor/github.com/go-jose/go-jose/v3/jws.go -index e37007d..401fc18 100644 ---- a/vendor/github.com/go-jose/go-jose/v3/jws.go -+++ b/vendor/github.com/go-jose/go-jose/v3/jws.go -@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { - - // parseSignedCompact parses a message in compact format. - func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") -diff --git a/vendor/gopkg.in/go-jose/go-jose.v2/jwe.go b/vendor/gopkg.in/go-jose/go-jose.v2/jwe.go -index a8966ab..faebb8d 100644 ---- a/vendor/gopkg.in/go-jose/go-jose.v2/jwe.go -+++ b/vendor/gopkg.in/go-jose/go-jose.v2/jwe.go -@@ -201,10 +201,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { - - // parseEncryptedCompact parses a message in compact format. - func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 5 { -+ // Five parts is four separators -+ if strings.Count(input, ".") != 4 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") - } -+ parts := strings.SplitN(input, ".", 5) - - rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) - if err != nil { -diff --git a/vendor/gopkg.in/go-jose/go-jose.v2/jws.go b/vendor/gopkg.in/go-jose/go-jose.v2/jws.go -index 1a24fa4..717f04a 100644 ---- a/vendor/gopkg.in/go-jose/go-jose.v2/jws.go -+++ b/vendor/gopkg.in/go-jose/go-jose.v2/jws.go -@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { - - // parseSignedCompact parses a message in compact format. - func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { -- parts := strings.Split(input, ".") -- if len(parts) != 3 { -+ // Three parts is two separators -+ if strings.Count(input, ".") != 2 { - return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") - } -+ parts := strings.SplitN(input, ".", 3) - - if parts[1] != "" && payload != nil { - return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") --- -2.45.2 - diff --git a/SPECS/skopeo/skopeo.signatures.json b/SPECS/skopeo/skopeo.signatures.json deleted file mode 100644 index 5e2d898f70..0000000000 --- a/SPECS/skopeo/skopeo.signatures.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Signatures": { - "skopeo-1.14.4.tar.gz": "5523a9b91516a400cbdf6a2df86a06d5cb2313ea8b3102afd7751427e3d8b0b0" - } -} diff --git a/SPECS/skopeo/skopeo.spec b/SPECS/skopeo/skopeo.spec deleted file mode 100644 index 7dc7aa6d30..0000000000 --- a/SPECS/skopeo/skopeo.spec +++ /dev/null @@ -1,127 +0,0 @@ -Summary: Inspect container images and repositories on registries -Name: skopeo -Version: 1.14.4 -Release: 6%{?dist} -License: Apache-2.0 -Vendor: Microsoft Corporation -Distribution: Azure Linux -Group: Applications/Tools -URL: https://github.com/containers/skopeo -Source0: https://github.com/containers/skopeo/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch0: CVE-2022-2879.patch -Patch1: CVE-2024-6104.patch -Patch2: CVE-2023-45288.patch -Patch3: CVE-2024-9676.patch -Patch4: CVE-2025-27144.patch - -%global debug_package %{nil} -%define our_gopath %{_topdir}/.gopath -BuildRequires: btrfs-progs-devel -BuildRequires: device-mapper-devel -BuildRequires: go-md2man -BuildRequires: golang >= 1.18 -BuildRequires: gpgme-devel -BuildRequires: libassuan-devel -BuildRequires: pkgconfig -Requires: libcontainers-common - -%description -Command line utility to inspect images and repositories directly on Docker -registries without the need to pull them. - -%prep -%autosetup -p1 - -%build -export GOPATH=%{our_gopath} -make - -%install -make PREFIX=%{buildroot}%{_prefix} install-binary install-docs - -%check -make test-unit-local -./bin/skopeo --version - -%files -%defattr(-,root,root) -%license LICENSE -%doc README.md -%{_bindir}/%{name} -%{_mandir}/man1/%%{name}* - -%changelog -* Fri May 30 2025 Ranjan Dutta - 1.14.4-6 -- merge from Azure Linux 3.0.20250521-3.0 -- Remove extraction command from build -- Fix CVE-2025-27144 with an upstream patch - -* Fri Apr 28 2025 Ranjan Dutta - 1.14.4-5 -- merge from Azure Linux tag 3.0.20250423-3.0 - -* Fri Mar 21 2025 Anuj Mittal - 1.14.4-4 -- Bump Release to rebuild - -* Mon Nov 11 2024 Rohit Rawat - 1.14.4-3 -- Fix CVE-2023-45288 and CVE-2024-9676 - -* Fri Aug 02 2024 Sindhu Karri - 1.14.4-2 -- Fix CVE-2024-6104 in github.com/hashicorp/go-retryablehttp with a patch - -* Thu Jun 27 2024 Nicolas Guibourge - 1.14.4-1 -- Upgrade to v1.14.4, address CVE-2022-2879 - -* Tue Jan 30 2024 Henry Li - 1.14.1-1 -- Upgrade to v1.14.1 - -* Tue Oct 17 2023 Neha Agarwal - 1.13.3-1 -- Update to v1.13.3 to fix CVE-2023-33199 in rekor. - -* Mon Oct 16 2023 CBL-Mariner Servicing Account - 1.12.0-5 -- Bump release to rebuild with go 1.20.10 - -* Tue Oct 10 2023 Dan Streetman - 1.12.0-4 -- Bump release to rebuild with updated version of Go. - -* Mon Aug 07 2023 CBL-Mariner Servicing Account - 1.12.0-3 -- Bump release to rebuild with go 1.19.12 - -* Thu Jul 13 2023 CBL-Mariner Servicing Account - 1.12.0-2 -- Bump release to rebuild with go 1.19.11 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.12.0-1 -- Bump skopeo version to 1.12.0 - upgrade to latest - -* Thu Jun 15 2023 CBL-Mariner Servicing Account - 1.11.0-5 -- Bump release to rebuild with go 1.19.10 - -* Wed Apr 05 2023 CBL-Mariner Servicing Account - 1.11.0-4 -- Bump release to rebuild with go 1.19.8 - -* Tue Mar 28 2023 CBL-Mariner Servicing Account - 1.11.0-3 -- Bump release to rebuild with go 1.19.7 - -* Wed Mar 15 2023 CBL-Mariner Servicing Account - 1.11.0-2 -- Bump release to rebuild with go 1.19.6 - -* Wed Feb 15 2023 CBL-Mariner Servicing Account - 1.11.0-1 -- Auto-upgrade to 1.11.0 - upgrade to latest - -* Fri Feb 03 2023 CBL-Mariner Servicing Account - 1.9.1-6 -- Bump release to rebuild with go 1.19.5 - -* Wed Jan 18 2023 CBL-Mariner Servicing Account - 1.9.1-5 -- Bump release to rebuild with go 1.19.4 - -* Fri Dec 16 2022 Daniel McIlvaney - 1.9.1-4 -- Bump release to rebuild with go 1.18.8 with patch for CVE-2022-41717 - -* Tue Nov 01 2022 Olivia Crain - 1.9.1-3 -- Bump release to rebuild with go 1.18.8 - -* Mon Aug 22 2022 Olivia Crain - 1.9.1-2 -- Bump release to rebuild against Go 1.18.5 - -* Tue Jul 26 2022 Tom Fay - 1.9.1-1 -- Original version for CBL-Mariner. -- License verified. diff --git a/SPECS/sriov-network-device-plugin/CVE-2025-47911.patch b/SPECS/sriov-network-device-plugin/CVE-2025-47911.patch new file mode 100644 index 0000000000..1189a0d204 --- /dev/null +++ b/SPECS/sriov-network-device-plugin/CVE-2025-47911.patch @@ -0,0 +1,100 @@ +From 74f51674ea6e7e5d6dd2dbaaf5f2de040fbf9e45 Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit + +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go +index 04c6bec..12f2273 100644 +--- a/vendor/golang.org/x/net/html/escape.go ++++ b/vendor/golang.org/x/net/html/escape.go +@@ -299,7 +299,7 @@ func escape(w writer, s string) error { + case '\r': + esc = " " + default: +- panic("unrecognized escape character") ++ panic("html: unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 979ef17..4d12a1c 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { + } + + if n.Type == ElementNode { +- p.oe = append(p.oe, n) ++ p.insertOpenElement(n) ++ } ++} ++ ++func (p *parser) insertOpenElement(n *Node) { ++ p.oe = append(p.oe, n) ++ if len(p.oe) > 512 { ++ panic("html: open stack of elements exceeds 512 nodes") + } + } + +@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: +- p.oe = append(p.oe, p.head) ++ p.insertOpenElement(p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: +@@ -2320,9 +2327,13 @@ func (p *parser) parseCurrentToken() { + } + } + +-func (p *parser) parse() error { ++func (p *parser) parse() (err error) { ++ defer func() { ++ if panicErr := recover(); panicErr != nil { ++ err = fmt.Errorf("%s", panicErr) ++ } ++ }() + // Iterate until EOF. Any other error will cause an early return. +- var err error + for err != io.EOF { + // CDATA sections are allowed only in foreign content. + n := p.oe.top() +@@ -2351,6 +2362,8 @@ func (p *parser) parse() error { + // s. Conversely, explicit s in r's data can be silently dropped, + // with no corresponding node in the resulting tree. + // ++// Parse will reject HTML that is nested deeper than 512 elements. ++// + // The input is assumed to be UTF-8 encoded. + func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/sriov-network-device-plugin/CVE-2025-58190.patch b/SPECS/sriov-network-device-plugin/CVE-2025-58190.patch new file mode 100644 index 0000000000..88f20a6708 --- /dev/null +++ b/SPECS/sriov-network-device-plugin/CVE-2025-58190.patch @@ -0,0 +1,126 @@ +From 339853695796a6434ad500ae6ef123b159cf0edb Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec + +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 5b8374b..979ef17 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + return -1 + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) + } + } + switch s { +@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { + return + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) + } + } + } +@@ -1674,7 +1674,7 @@ func inTableBodyIM(p *parser) bool { + return inTableIM(p) + } + +-// Section 12.2.6.4.14. ++// Section 13.2.6.4.14. + func inRowIM(p *parser) bool { + switch p.tok.Type { + case StartTagToken: +@@ -1686,7 +1686,9 @@ func inRowIM(p *parser) bool { + p.im = inCellIM + return true + case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } +@@ -1696,22 +1698,28 @@ func inRowIM(p *parser) bool { + case EndTagToken: + switch p.tok.DataAtom { + case a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return true + } + // Ignore the token. + return true + case a.Table: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } + // Ignore the token. + return true + case a.Tbody, a.Tfoot, a.Thead: +- if p.elementInScope(tableScope, p.tok.DataAtom) { +- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) ++ if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() ++ p.im = inTableBodyIM + return false + } + // Ignore the token. +@@ -2218,16 +2226,20 @@ func parseForeignContent(p *parser) bool { + p.acknowledgeSelfClosingTag() + } + case EndTagToken: ++ if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { ++ p.oe = p.oe[:len(p.oe)-1] ++ return true ++ } + for i := len(p.oe) - 1; i >= 0; i-- { +- if p.oe[i].Namespace == "" { +- return p.im(p) +- } + if strings.EqualFold(p.oe[i].Data, p.tok.Data) { + p.oe = p.oe[:i] ++ return true ++ } ++ if i > 0 && p.oe[i-1].Namespace == "" { + break + } + } +- return true ++ return p.im(p) + default: + // Ignore the token. + } +-- +2.45.4 + diff --git a/SPECS/sriov-network-device-plugin/sriov-network-device-plugin.spec b/SPECS/sriov-network-device-plugin/sriov-network-device-plugin.spec index 2704aff5f7..82123c613e 100644 --- a/SPECS/sriov-network-device-plugin/sriov-network-device-plugin.spec +++ b/SPECS/sriov-network-device-plugin/sriov-network-device-plugin.spec @@ -1,7 +1,7 @@ Summary: Plugin for discovering and advertising networking resources Name: sriov-network-device-plugin Version: 3.7.0 -Release: 5%{?dist} +Release: 6%{?dist} License: MIT Vendor: Microsoft Corporation Distribution: Azure Linux @@ -11,6 +11,8 @@ Source1: %{name}-%{version}-vendor.tar.gz Patch0: CVE-2024-45338.patch Patch1: CVE-2024-45339.patch Patch2: CVE-2025-22872.patch +Patch3: CVE-2025-47911.patch +Patch4: CVE-2025-58190.patch BuildRequires: golang Requires: gawk Requires: hwdata @@ -20,9 +22,7 @@ sriov-network-device-plugin is Kubernetes device plugin for discovering and adve resources in the form of SR-IOV virtual functions and PCI physical functions %prep -%autosetup -N -tar -xf %{SOURCE1} -%autopatch -p1 +%autosetup -p1 -a1 %build go build -mod vendor -o ./build/sriovdp ./cmd/sriovdp/ @@ -40,6 +40,10 @@ install -D -m0755 images/ddptool-1.0.1.12.tar.gz %{buildroot}%{_datadir}/%{name} %{_datadir}/%{name}/ddptool-1.0.1.12.tar.gz %changelog +* Mon Mar 16 2026 Lee Chee Yang - 3.7.0-6 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-47911, CVE-2025-58190 + * Fri May 30 2025 Ranjan Dutta - 3.7.0-5 - merge from Azure Linux 3.0.20250521-3.0 - Patch CVE-2025-22872 diff --git a/SPECS/stunnel/Certificate-Creation b/SPECS/stunnel/Certificate-Creation new file mode 100644 index 0000000000..16d86f9659 --- /dev/null +++ b/SPECS/stunnel/Certificate-Creation @@ -0,0 +1,9 @@ +To generate a key and self signed certificate, execute the following commands: + +cd /etc/pki/tls/certs +make stunnel.pem + +Note that by default, the file containing the key and certificate has its +permissions set to 0600, which means that any service using it needs to be +started as root in order to read it. Such a service should be configured +to switch UIDs using stunnel's "-s" flag. diff --git a/SPECS/stunnel/pop3-redirect.xinetd b/SPECS/stunnel/pop3-redirect.xinetd new file mode 100644 index 0000000000..73b95ad482 --- /dev/null +++ b/SPECS/stunnel/pop3-redirect.xinetd @@ -0,0 +1,17 @@ +# default: off +# description: The POP3 redirector allows client software which does not have \ +# native support for SSL to connect to the local machine's POP3 \ +# port and have the connection forwarded over the network using \ +# SSL. You will need to modify stunnel-pop3s-client.conf to \ +# specify the server to connect to in order for this to be useful. +service pop3 +{ + disable = yes + socket_type = stream + wait = no + user = root + server = /usr/sbin/stunnel + server_args = /etc/stunnel/stunnel-pop3s-client.conf + log_on_success += USERID + log_on_failure += USERID +} diff --git a/SPECS/stunnel/sfinger.xinetd b/SPECS/stunnel/sfinger.xinetd new file mode 100644 index 0000000000..39a91f57f9 --- /dev/null +++ b/SPECS/stunnel/sfinger.xinetd @@ -0,0 +1,11 @@ +# Not that anyone in their right mind would tunnel the finger protocol over +# SSL, but here's how to do it using xinetd.... +service sfinger +{ + disable = yes + socket_type = stream + wait = no + user = root + server = /usr/sbin/stunnel + server_args = /etc/stunnel/stunnel-sfinger.conf +} diff --git a/SPECS/stunnel/stunnel-5.50-authpriv.patch b/SPECS/stunnel/stunnel-5.50-authpriv.patch new file mode 100644 index 0000000000..dbb3b434b8 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.50-authpriv.patch @@ -0,0 +1,73 @@ +From cfbf803dd3338a915f41bdfded69b34e7f21403d Mon Sep 17 00:00:00 2001 +From: Tomas Mraz +Date: Mon, 12 Sep 2022 11:07:38 +0200 +Subject: [PATCH 1/7] Apply patch stunnel-5.50-authpriv.patch + +Patch-name: stunnel-5.50-authpriv.patch +Patch-id: 0 +From-dist-git-commit: 70b3076eb09912b3a11f371b8c523303114fffa3 +--- + doc/stunnel.8.in | 2 +- + doc/stunnel.html.in | 2 +- + doc/stunnel.pod.in | 2 +- + src/options.c | 4 ++++ + 4 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/doc/stunnel.8.in b/doc/stunnel.8.in +index 8cd8bc0..b5d7d75 100644 +--- a/doc/stunnel.8.in ++++ b/doc/stunnel.8.in +@@ -209,7 +209,7 @@ requested to do so by an stunnel developer, or when you intend to get confused. + .Sp + The default logging level is notice (5). + .Sp +-The syslog 'daemon' facility will be used unless a facility name is supplied. ++The syslog 'authpriv' facility will be used unless a facility name is supplied. + (Facilities are not supported on Win32.) + .Sp + Case is ignored for both facilities and levels. +diff --git a/doc/stunnel.html.in b/doc/stunnel.html.in +index a7931aa..cda5993 100644 +--- a/doc/stunnel.html.in ++++ b/doc/stunnel.html.in +@@ -248,7 +248,7 @@ + +

The default logging level is notice (5).

+ +-

The syslog 'daemon' facility will be used unless a facility name is supplied. (Facilities are not supported on Win32.)

++

The syslog 'authpriv' facility will be used unless a facility name is supplied. (Facilities are not supported on Win32.)

+ +

Case is ignored for both facilities and levels.

+ +diff --git a/doc/stunnel.pod.in b/doc/stunnel.pod.in +index a54b25d..f830cf3 100644 +--- a/doc/stunnel.pod.in ++++ b/doc/stunnel.pod.in +@@ -197,7 +197,7 @@ requested to do so by an stunnel developer, or when you intend to get confused. + + The default logging level is notice (5). + +-The syslog 'daemon' facility will be used unless a facility name is supplied. ++The syslog 'authpriv' facility will be used unless a facility name is supplied. + (Facilities are not supported on Win32.) + + Case is ignored for both facilities and levels. +diff --git a/src/options.c b/src/options.c +index 5f8ad8b..6e4a18b 100644 +--- a/src/options.c ++++ b/src/options.c +@@ -1960,7 +1960,11 @@ NOEXPORT const char *parse_service_option(CMD cmd, SERVICE_OPTIONS **section_ptr + case CMD_SET_DEFAULTS: + section->log_level=LOG_NOTICE; + #if !defined (USE_WIN32) && !defined (__vms) ++#if defined(LOG_AUTHPRIV) ++ new_global_options.log_facility=LOG_AUTHPRIV; ++#else + new_global_options.log_facility=LOG_DAEMON; ++#endif + #endif + break; + case CMD_SET_COPY: +-- +2.39.2 + diff --git a/SPECS/stunnel/stunnel-5.56-curves-doc-update.patch b/SPECS/stunnel/stunnel-5.56-curves-doc-update.patch new file mode 100644 index 0000000000..884b53c990 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.56-curves-doc-update.patch @@ -0,0 +1,97 @@ +From 2d720572b081397b187f502980bb57a8301f06f0 Mon Sep 17 00:00:00 2001 +From: Sahana Prasad +Date: Mon, 12 Sep 2022 11:07:38 +0200 +Subject: [PATCH 5/5] Apply patch stunnel-5.56-curves-doc-update.patch + +Patch-name: stunnel-5.56-curves-doc-update.patch +Patch-id: 6 +From-dist-git-commit: 70b3076eb09912b3a11f371b8c523303114fffa3 +--- + doc/stunnel.8.in | 2 ++ + doc/stunnel.html.in | 2 ++ + doc/stunnel.pl.8.in | 2 ++ + doc/stunnel.pl.html.in | 2 ++ + doc/stunnel.pl.pod.in | 2 ++ + doc/stunnel.pod.in | 2 ++ + 6 files changed, 12 insertions(+) + +diff --git a/doc/stunnel.8.in b/doc/stunnel.8.in +index e74e174..03b503b 100644 +--- a/doc/stunnel.8.in ++++ b/doc/stunnel.8.in +@@ -490,6 +490,8 @@ This file contains multiple CRLs, used with the \fIverifyChain\fR and + .IX Item "curves = list" + ECDH curves separated with ':' + .Sp ++Note: This option is supported for server mode sockets only. ++.Sp + Only a single curve name is allowed for OpenSSL older than 1.1.1. + .Sp + To get a list of supported curves use: +diff --git a/doc/stunnel.html.in b/doc/stunnel.html.in +index df0efdd..385ac8d 100644 +--- a/doc/stunnel.html.in ++++ b/doc/stunnel.html.in +@@ -596,6 +596,8 @@ + +

ECDH curves separated with ':'

+ ++

Note: This option is supported for server mode sockets only.

++ +

Only a single curve name is allowed for OpenSSL older than 1.1.1.

+ +

To get a list of supported curves use:

+diff --git a/doc/stunnel.pl.8.in b/doc/stunnel.pl.8.in +index 4efe602..9683b4c 100644 +--- a/doc/stunnel.pl.8.in ++++ b/doc/stunnel.pl.8.in +@@ -494,6 +494,8 @@ przez opcje \fIverifyChain\fR i \fIverifyPeer\fR. + .IX Item "curves = lista" + krzywe ECDH odddzielone ':' + .Sp ++Uwaga: ta opcja wpływa tylko na gniazda w trybie serwera. ++.Sp + Wersje OpenSSL starsze niż 1.1.1 pozwalają na użycie tylko jednej krzywej. + .Sp + Listę dostępnych krzywych można uzyskać poleceniem: +diff --git a/doc/stunnel.pl.html.in b/doc/stunnel.pl.html.in +index 8e40042..3025e9f 100644 +--- a/doc/stunnel.pl.html.in ++++ b/doc/stunnel.pl.html.in +@@ -586,6 +586,8 @@ + +

krzywe ECDH odddzielone ':'

+ ++

Uwaga: ta opcja wpływa tylko na gniazda w trybie serwera.

++ +

Wersje OpenSSL starsze niż 1.1.1 pozwalają na użycie tylko jednej krzywej.

+ +

Listę dostępnych krzywych można uzyskać poleceniem:

+diff --git a/doc/stunnel.pl.pod.in b/doc/stunnel.pl.pod.in +index 4419f9f..c48387a 100644 +--- a/doc/stunnel.pl.pod.in ++++ b/doc/stunnel.pl.pod.in +@@ -535,6 +535,8 @@ przez opcje I i I. + + krzywe ECDH odddzielone ':' + ++Uwaga: ta opcja wpływa tylko na gniazda w trybie serwera. ++ + Wersje OpenSSL starsze niż 1.1.1 pozwalają na użycie tylko jednej krzywej. + + Listę dostępnych krzywych można uzyskać poleceniem: +diff --git a/doc/stunnel.pod.in b/doc/stunnel.pod.in +index 1a49d42..7a92697 100644 +--- a/doc/stunnel.pod.in ++++ b/doc/stunnel.pod.in +@@ -533,6 +533,8 @@ I options. + + ECDH curves separated with ':' + ++Note: This option is supported for server mode sockets only. ++ + Only a single curve name is allowed for OpenSSL older than 1.1.1. + + To get a list of supported curves use: +-- +2.46.0 diff --git a/SPECS/stunnel/stunnel-5.56.tar.gz.asc b/SPECS/stunnel/stunnel-5.56.tar.gz.asc new file mode 100644 index 0000000000..6142f0f8f6 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.56.tar.gz.asc @@ -0,0 +1,18 @@ +-----BEGIN PGP SIGNATURE----- + +iQKTBAABCgB9FiEEK8fk5n48wMG+py+MLvx/8NQW4BQFAl3YIPhfFIAAAAAALgAo +aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDJC +QzdFNEU2N0UzQ0MwQzFCRUE3MkY4QzJFRkM3RkYwRDQxNkUwMTQACgkQLvx/8NQW +4BTuMw//R+LJhCo2prR6RIxEsYbfzIwkl9NwcE5EPTKse2umTOHsMRfVMpZiKjCl +5UC1tLbqUzSjAydQiFwdvcHZAJLWblr84p+CC5hEaS/rwX4PL221gqqrC8Ut7ap3 +n/v5gCJ8iqnpgZSgHPSGqucG3x1KlZotPnny1RVIjCSHPvoUtocAwJNSChRkyUT0 +ym8qhUPyOmRhYQZew1haxFJa26yc017dN5QZy+H3uo0zPLXaWJpPjJG/1pBtden4 +mL+mg8phZZ9MtBtEOK2NTA+4K24vcM+aHoEyMI/dcmi4NN256N5CJZ13tF3LgHNV +j0vp1a75p5aAMeRTv7zShegZGvJJciyYJKwRnOAUnHVFDhnsgd05VQHeWC1aFKjM +cXwrvHgGn+TG0V29ahnzR7NdVhkuP3etcqx6FuIgcj2omp0Bj4zFRlKSl4x+hY56 +MTvwksIXZTItHvffiE49ExGPA8OQW3S9Sr+lPFk98xjVuTU/P8GIVNp2kof4ezYN +Yhav4mA/KAkMX0fb+Cw6eyZl0aZEPx76hhkKhh2OmR8w3k5X2hetGcXX1/UFEHCm +uNCvWwV5Ry6Kc8Zpr8p6fUOh0Se4cNi59c1FKEwMX1hTgLklbIZioiFM/fR0RLOJ +PU/Cq+NbaZ3O8Cup7PsVjCDgXTcKcQAdQTOxgfW6f+szmTo5Qx4= +=RhpX +-----END PGP SIGNATURE----- diff --git a/SPECS/stunnel/stunnel-5.61-systemd-service.patch b/SPECS/stunnel/stunnel-5.61-systemd-service.patch new file mode 100644 index 0000000000..a7831d8c30 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.61-systemd-service.patch @@ -0,0 +1,27 @@ +From 6cb73d824ac204f5680e469b0474855aaa6b8ddc Mon Sep 17 00:00:00 2001 +From: Clemens Lang +Date: Mon, 12 Sep 2022 11:07:38 +0200 +Subject: [PATCH 2/8] Apply patch stunnel-5.61-systemd-service.patch + +Patch-name: stunnel-5.61-systemd-service.patch +Patch-id: 1 +From-dist-git-commit: 70b3076eb09912b3a11f371b8c523303114fffa3 +--- + tools/stunnel.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tools/stunnel.service.in b/tools/stunnel.service.in +index fa98996..0c5a216 100644 +--- a/tools/stunnel.service.in ++++ b/tools/stunnel.service.in +@@ -6,6 +6,7 @@ After=syslog.target network-online.target + ExecStart=@bindir@/stunnel + ExecReload=/bin/kill -HUP $MAINPID + Type=forking ++PrivateTmp=true + + [Install] + WantedBy=multi-user.target +-- +2.37.3 + diff --git a/SPECS/stunnel/stunnel-5.69-default-tls-version.patch b/SPECS/stunnel/stunnel-5.69-default-tls-version.patch new file mode 100644 index 0000000000..59bb35a356 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.69-default-tls-version.patch @@ -0,0 +1,117 @@ +From 749c3b57caded6285cb5f76f17c4359e92474875 Mon Sep 17 00:00:00 2001 +From: Clemens Lang +Date: Mon, 12 Sep 2022 11:07:38 +0200 +Subject: [PATCH] Apply patch stunnel-5.69-default-tls-version.patch + +Patch-name: stunnel-5.69-default-tls-version.patch +Patch-id: 5 +From-dist-git-commit: 70b3076eb09912b3a11f371b8c523303114fffa3 +--- + src/ctx.c | 34 ++++++++++++++++++++++------------ + src/options.c | 15 +++++++++++---- + src/prototypes.h | 3 +++ + 3 files changed, 36 insertions(+), 16 deletions(-) + +diff --git a/src/ctx.c b/src/ctx.c +index 3f3dbf8..7935e84 100644 +--- a/src/ctx.c ++++ b/src/ctx.c +@@ -168,19 +168,29 @@ int context_init(SERVICE_OPTIONS *section) { /* init TLS context */ + + /* set supported protocol versions */ + #if OPENSSL_VERSION_NUMBER>=0x10100000L +- if(section->min_proto_version && +- !SSL_CTX_set_min_proto_version(section->ctx, +- section->min_proto_version)) { +- s_log(LOG_ERR, "Failed to set the minimum protocol version 0x%X", +- section->min_proto_version); +- return 1; /* FAILED */ ++ if (section->min_proto_version == USE_DEFAULT_TLS_VERSION) { ++ s_log(LOG_INFO, "Using the default TLS minimum version as specified in" ++ " crypto policies. Not setting explicitly."); ++ } else { ++ if(section->min_proto_version && ++ !SSL_CTX_set_min_proto_version(section->ctx, ++ section->min_proto_version)) { ++ s_log(LOG_ERR, "Failed to set the minimum protocol version 0x%X", ++ section->min_proto_version); ++ return 1; /* FAILED */ ++ } + } +- if(section->max_proto_version && +- !SSL_CTX_set_max_proto_version(section->ctx, +- section->max_proto_version)) { +- s_log(LOG_ERR, "Failed to set the maximum protocol version 0x%X", +- section->max_proto_version); +- return 1; /* FAILED */ ++ if (section->max_proto_version == USE_DEFAULT_TLS_VERSION) { ++ s_log(LOG_INFO, "Using the default TLS maximum version as specified in" ++ " crypto policies. Not setting explicitly"); ++ } else { ++ if(section->max_proto_version && ++ !SSL_CTX_set_max_proto_version(section->ctx, ++ section->max_proto_version)) { ++ s_log(LOG_ERR, "Failed to set the maximum protocol version 0x%X", ++ section->max_proto_version); ++ return 1; /* FAILED */ ++ } + } + #endif /* OPENSSL_VERSION_NUMBER>=0x10100000L */ + +diff --git a/src/options.c b/src/options.c +index 00196fc..1946129 100644 +--- a/src/options.c ++++ b/src/options.c +@@ -3437,8 +3437,9 @@ NOEXPORT const char *parse_service_option(CMD cmd, SERVICE_OPTIONS **section_ptr + return "Invalid protocol version"; + return NULL; /* OK */ + case CMD_INITIALIZE: +- if(section->max_proto_version && section->min_proto_version && +- section->max_proto_versionmin_proto_version) ++ if(section->max_proto_version != USE_DEFAULT_TLS_VERSION ++ && section->min_proto_version != USE_DEFAULT_TLS_VERSION ++ && section->max_proto_versionmin_proto_version) + return "Invalid protocol version range"; + break; + case CMD_PRINT_DEFAULTS: +@@ -3456,7 +3457,10 @@ NOEXPORT const char *parse_service_option(CMD cmd, SERVICE_OPTIONS **section_ptr + /* sslVersionMax */ + switch(cmd) { + case CMD_SET_DEFAULTS: +- section->max_proto_version=0; /* highest supported */ ++ section->max_proto_version=USE_DEFAULT_TLS_VERSION; /* use defaults in ++ OpenSSL crypto ++ policies.Do not ++ override it */ + break; + case CMD_SET_COPY: + section->max_proto_version=new_service_options.max_proto_version; +@@ -3487,7 +3491,10 @@ NOEXPORT const char *parse_service_option(CMD cmd, SERVICE_OPTIONS **section_ptr + /* sslVersionMin */ + switch(cmd) { + case CMD_SET_DEFAULTS: +- section->min_proto_version=0; /* lowest supported */ ++ section->min_proto_version=USE_DEFAULT_TLS_VERSION; /* use defaults in ++ OpenSSL crypto ++ policies. Do not ++ override it */ + break; + case CMD_SET_COPY: + section->min_proto_version=new_service_options.min_proto_version; +diff --git a/src/prototypes.h b/src/prototypes.h +index 83496bd..d443e18 100644 +--- a/src/prototypes.h ++++ b/src/prototypes.h +@@ -960,6 +960,9 @@ ICON_IMAGE load_icon_default(ICON_TYPE); + ICON_IMAGE load_icon_file(const char *); + #endif + ++#define USE_DEFAULT_TLS_VERSION ((int)-2) /* Use defaults in OpenSSL ++ crypto policies */ ++ + #endif /* defined PROTOTYPES_H */ + + /* end of prototypes.h */ +-- +2.45.3 + diff --git a/SPECS/stunnel/stunnel-5.69-system-ciphers.patch b/SPECS/stunnel/stunnel-5.69-system-ciphers.patch new file mode 100644 index 0000000000..c7be57d764 --- /dev/null +++ b/SPECS/stunnel/stunnel-5.69-system-ciphers.patch @@ -0,0 +1,37 @@ +From 6c8c4c8c85204943223b251d09ca1e93571a437a Mon Sep 17 00:00:00 2001 +From: Sahana Prasad +Date: Mon, 12 Sep 2022 11:07:38 +0200 +Subject: [PATCH 3/7] Use cipher configuration from crypto-policies + +On Fedora, CentOS and RHEL, the system's crypto policies are the best +source to determine which cipher suites to accept in TLS. On these +platforms, OpenSSL supports the PROFILE=SYSTEM setting to use those +policies. Change stunnel to default to this setting. + +Co-Authored-by: Sahana Prasad +Patch-name: stunnel-5.69-system-ciphers.patch +Patch-id: 3 +From-dist-git-commit: 70b3076eb09912b3a11f371b8c523303114fffa3 +--- + src/options.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/options.c b/src/options.c +index 6e4a18b..4d31815 100644 +--- a/src/options.c ++++ b/src/options.c +@@ -321,9 +321,9 @@ static const char *option_not_found= + "Specified option name is not valid here"; + + static const char *stunnel_cipher_list= +- "HIGH:!aNULL:!SSLv2:!DH:!kDHEPSK"; ++ "PROFILE=SYSTEM"; + static const char *fips_cipher_list= +- "FIPS:!DH:!kDHEPSK"; ++ "PROFILE=SYSTEM"; + + #ifndef OPENSSL_NO_TLS1_3 + static const char *stunnel_ciphersuites= +-- +2.39.2 + diff --git a/SPECS/stunnel/stunnel-pop3s-client.conf b/SPECS/stunnel/stunnel-pop3s-client.conf new file mode 100644 index 0000000000..eb7fda9a03 --- /dev/null +++ b/SPECS/stunnel/stunnel-pop3s-client.conf @@ -0,0 +1,8 @@ +# Sample configuration for stunnel, tunnelling cleartext connections on the +# default port (without an "accept" setting, stunnel uses stdio) over an +# encrypted channel to pop3s-server.example.com:pop3s. See stunnel(8) for +# more information. +client = yes +connect = pop3s-server.example.com:pop3s +CAfile = /usr/share/ssl/certs/ca-bundle.crt +verify = 2 diff --git a/SPECS/stunnel/stunnel-sfinger.conf b/SPECS/stunnel/stunnel-sfinger.conf new file mode 100644 index 0000000000..912888a403 --- /dev/null +++ b/SPECS/stunnel/stunnel-sfinger.conf @@ -0,0 +1,8 @@ +# Sample configuration for stunnel, forwarding data from encrypted connections +# on the default port (without an "accept" setting, stunnel uses stdio) over +# an unencrypted set of pipes which are used for stdio by in.fingerd. See +# stunnel(8) for more information. +exec = /usr/sbin/in.fingerd +execargs = in.fingerd +key = /etc/stunnel/stunnel.pem +cert = /etc/stunnel/stunnel.pem diff --git a/SPECS/stunnel/stunnel.signatures.json b/SPECS/stunnel/stunnel.signatures.json new file mode 100644 index 0000000000..ac9f8cc0a2 --- /dev/null +++ b/SPECS/stunnel/stunnel.signatures.json @@ -0,0 +1,11 @@ +{ + "Signatures": { + "Certificate-Creation": "d00fa133b7e7b241c6d973a70a2ae24d38afed6dfc06014aeff117f4cf8e0163", + "pop3-redirect.xinetd": "d4953253db8cfd8ea1449911ad32723bf7230a8c8edfb394c83b02feeb25f84b", + "sfinger.xinetd": "e9bb26d7e8fbe978d34168ecbb22205179345cfc1874b00c87de17bcb287d9a9", + "stunnel-5.74.tar.gz": "9bef235ab5d24a2a8dff6485dfd782ed235f4407e9bc8716deb383fc80cd6230", + "stunnel-pop3s-client.conf": "95379ab5046177833b717c4c832748d31ec314f469c67e9fe4b160876ca93066", + "stunnel-sfinger.conf": "4d06bccd910b1c8d89ed560fb8375e5e0b220e368a51ce6714e0bc2cd67dc6e4", + "stunnel@.service": "8e86d44d83d1722371393ff3943e1779111b033da5e89ad1e564d2e5e3be0d89" + } +} \ No newline at end of file diff --git a/SPECS/stunnel/stunnel.spec b/SPECS/stunnel/stunnel.spec new file mode 100644 index 0000000000..4c7fa278f2 --- /dev/null +++ b/SPECS/stunnel/stunnel.spec @@ -0,0 +1,752 @@ +%bcond_with libwrap +# Do not generate provides for private libraries +%global __provides_exclude_from ^%{_libdir}/stunnel/.*$ + +Summary: A TLS-encrypting socket wrapper +Name: stunnel +Version: 5.74 +Release: 2%{?dist} +License: GPLv2 +Vendor: Microsoft Corporation +Distribution: Azure Linux +URL: http://www.stunnel.org/ +Source0: https://www.stunnel.org/downloads/stunnel-%{version}.tar.gz +Source2: Certificate-Creation +Source3: sfinger.xinetd +Source4: stunnel-sfinger.conf +Source5: pop3-redirect.xinetd +Source6: stunnel-pop3s-client.conf +Source7: stunnel@.service +Patch0: stunnel-5.50-authpriv.patch +Patch1: stunnel-5.61-systemd-service.patch +# Use cipher configuration from crypto-policies +# +# On Fedora, CentOS and RHEL, the system's crypto policies are the best +# source to determine which cipher suites to accept in TLS. On these +# platforms, OpenSSL supports the PROFILE=SYSTEM setting to use those +# policies. Change stunnel to default to this setting. +Patch3: stunnel-5.69-system-ciphers.patch +Patch5: stunnel-5.69-default-tls-version.patch +Patch6: stunnel-5.56-curves-doc-update.patch +# build test requirements +BuildRequires: %{_bindir}/nc +BuildRequires: %{_bindir}/pod2html +BuildRequires: %{_bindir}/pod2man +BuildRequires: %{_sbindir}/lsof +BuildRequires: /bin/ps +BuildRequires: autoconf +BuildRequires: automake +# util-linux is needed for rename +BuildRequires: gcc +BuildRequires: libtool +BuildRequires: openssl-devel +BuildRequires: pkgconfig +BuildRequires: systemd +BuildRequires: util-linux +BuildRequires: python3-cryptography +%{?systemd_requires} +%if %{with libwrap} +BuildRequires: tcp_wrappers-devel +%endif + +%description +Stunnel is a socket wrapper which can provide TLS/SSL +(Transport Layer Security/Secure Sockets Layer) support +to ordinary applications. For example, it can be used in +conjunction with imapd to create a TLS secure IMAP server. + +%prep +%autosetup -S gendiff -p1 + +# Fix the configure script output for FIPS mode and stack protector flag +# sed -i '/yes).*result: no/,+1{s/result: no/result: yes/;s/as_echo "no"/as_echo "yes"/};s/-fstack-protector/-fstack-protector-strong/' configure + +# Fix a testcase with system-ciphers support +# sed -i '/client = yes/a \\ ciphers = PSK' tests/recipes/014_PSK_secrets + +%build +#autoreconf -v +CFLAGS="%{optflags} -fPIC"; export CFLAGS +if pkg-config openssl ; then + CFLAGS="$CFLAGS `pkg-config --cflags openssl`"; + LDFLAGS="`pkg-config --libs-only-L openssl`"; export LDFLAGS +fi +%configure --enable-fips --enable-ipv6 --with-ssl=%{_prefix} \ +%if %{with libwrap} +--enable-libwrap \ +%else +--disable-libwrap \ +%endif + CPPFLAGS="-UPIDFILE -DPIDFILE='\"%{_localstatedir}/run/stunnel.pid\"'" +make V=1 LDADD="-pie -Wl,-z,defs,-z,relro,-z,now" + +%install +make install DESTDIR=%{buildroot} +# Move the translated man pages to the right subdirectories, and strip off the +# language suffixes. +#for lang in fr pl ; do +for lang in pl ; do + mkdir -p %{buildroot}/%{_mandir}/${lang}/man8 + mv %{buildroot}/%{_mandir}/man8/*.${lang}.8* %{buildroot}/%{_mandir}/${lang}/man8/ + rename ".${lang}" "" %{buildroot}/%{_mandir}/${lang}/man8/* +done +mkdir srpm-docs +cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} srpm-docs + +mkdir -p %{buildroot}%{_unitdir} +cp %{buildroot}%{_docdir}/stunnel/examples/%{name}.service %{buildroot}%{_unitdir}/%{name}.service +cp %{SOURCE7} %{buildroot}%{_unitdir}/%{name}@.service + + +%check +# For unknown reason the 042_inetd test fails in Koji. The failure is not reproducible +# in local build. +rm tests/recipes/042_inetd +# We override the security policy as it is too strict for the tests. +OPENSSL_SYSTEM_CIPHERS_OVERRIDE=xyz_nonexistent_file +export OPENSSL_SYSTEM_CIPHERS_OVERRIDE +OPENSSL_CONF= +export OPENSSL_CONF +make test || (for i in tests/logs/*.log ; do echo "$i": ; cat "$i" ; done) + +%files +%{!?_licensedir:%global license %%doc} +%doc AUTHORS.md BUGS.md CREDITS.md PORTS.md README.md TODO.md +%doc tools/stunnel.conf-sample +%doc srpm-docs/* +%license COPY* +%lang(en) %doc doc/en/* +%lang(pl) %doc doc/pl/* +%{_bindir}/stunnel +%exclude %{_bindir}/stunnel3 +%exclude %{_docdir}/stunnel +%{_libdir}/stunnel +%exclude %{_libdir}/stunnel/libstunnel.la +%{_mandir}/man8/stunnel.8* +%lang(pl) %{_mandir}/pl/man8/stunnel.8* +%dir %{_sysconfdir}/%{name} +%exclude %{_sysconfdir}/stunnel/* + +%{_unitdir}/%{name}*.service + +%post +/sbin/ldconfig +%systemd_post %{name}.service + +%preun +%systemd_preun %{name}.service + +%postun +/sbin/ldconfig +%systemd_postun_with_restart %{name}.service + +%changelog +* Thu Jan 8 2025 Lee Chee Yang - 5.74-2 +- python-cryptography to python3-cryptography. +- Initial Edge Microvisor Toolkit import from Azure Linux (license: MIT). + +* Mon Apr 21 2025 Sandeep Karambelkar - 5.74-1 +- Upgrade to 5.74 and remove unwanted patches +- Verified License + +* Mon Sep 04 2023 Muhammad Falak R Wani - 5.70-1 +- Upgrade version to address CVE-2021-20230 +- Lint spec +- Verified License + +* Fri Mar 26 2021 Henry Li - 5.56-8 +- Initial CBL-Mariner import from Fedora 32 (license: MIT). +- Change /usr/bin/lsof to /usr/sbin/lsof +- Change /usr/bin/ps to /bin/ps + +* Thu Apr 16 2020 Sahana Prasad - 5.56-7 +- Updates documentation to specify that the option "curves" can be used in server mode only. + +* Wed Apr 08 2020 Sahana Prasad - 5.56-6 +- Fixes default tls version patch to handle default values from OpenSSL crypto policies + +* Mon Apr 06 2020 Sahana Prasad - 5.56-5 +- Removes warnings caused by the patch + +* Mon Apr 06 2020 Sahana Prasad - 5.56-4 +- Adds default tls version patch to comply with OpenSSL crypto policies + +* Tue Mar 31 2020 Sahana Prasad - 5.56-3 +- Adds coverity patch + +* Fri Jan 31 2020 Fedora Release Engineering - 5.56-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jan 08 2020 Sahana Prasad - 5.56-1 +- New upstream release 5.56 + +* Thu Sep 19 2019 Sahana Prasad - 5.55-1 +- New upstream release 5.55 + +* Sat Jul 27 2019 Fedora Release Engineering - 5.50-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Feb 03 2019 Fedora Release Engineering - 5.50-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 14 2019 Tomáš Mráz - 5.50-1 +- New upstream release 5.50 + +* Tue Jul 24 2018 Tomáš Mráz - 5.48-1 +- New upstream release 5.48 + +* Sat Jul 14 2018 Fedora Release Engineering - 5.46-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 31 2018 Tomáš Mráz - 5.46-1 +- New upstream release 5.46 + +* Fri Mar 2 2018 Tomáš Mráz - 5.44-5 +- Fix bind to localhost (patch backport by Christian Kujau) (#1542361) + +* Fri Feb 09 2018 Fedora Release Engineering - 5.44-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Jan 25 2018 Igor Gnatenko - 5.44-3 +- Fix systemd executions/requirements + +* Mon Jan 15 2018 Tomáš Mráz - 5.44-2 +- Make the disablement of libwrap conditional + +* Thu Jan 11 2018 Tomáš Mráz - 5.44-1 +- New upstream release 5.44 +- Disable libwrap support (#1518789) + +* Tue Aug 22 2017 Tomáš Mráz - 5.42-1 +- New upstream release 5.42 +- Use the system cipher list by default (#1483967) + +* Thu Aug 03 2017 Fedora Release Engineering - 5.41-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 5.41-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Apr 17 2017 Neal Gompa - 5.41-1 +- New upstream release 5.41 + +* Mon Mar 20 2017 Neal Gompa - 5.40-1 +- New upstream release 5.40 +- Properly mark license files +- Rebase patches +- Eliminate unnecessary Provides +- Small spec cleanups and fixes + +* Sat Feb 11 2017 Fedora Release Engineering - 5.35-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jul 21 2016 Tomáš Mráz - 5.35-1 +- New upstream release 5.35 with fix for bug #1358810 + +* Wed Jul 13 2016 Tomáš Mráz - 5.34-1 +- New upstream release 5.34 + +* Wed Feb 3 2016 Tomáš Mráz - 5.30-1 +- New upstream release 5.30 +- Add generic stunnel@.service provided by Štefan Gurský (#1195742) + +* Mon Jun 22 2015 Avesh Agarwal - 5.18-1 +- New upstream release 5.18. +- Finally deleted the patch stunnel-5-sample.patch as upstream + has merged those changes. +- Fixes patches as per new code changes. +- Fixed systemd service file related changes. + +* Fri Jun 19 2015 Fedora Release Engineering - 5.17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon Jun 8 2015 Avesh Agarwal - 5.17-1 +- New upstream release 5.17. + +* Fri May 22 2015 Avesh Agarwal - 5.16-1 +- New upstream release 5.16. + +* Mon Apr 27 2015 Avesh Agarwal - 5.15-1 +- New upstream release 5.15. +- 1155977: Fixed upstream too so removed the associated patch +- Updates other patches too. + +* Mon Mar 30 2015 Avesh Agarwal - 5.14-1 +- New upstream release 5.14. + +* Sun Mar 29 2015 Avesh Agarwal - 5.13-1 +- New upstream release 5.13. + +* Sat Mar 28 2015 Avesh Agarwal - 5.12-1 +- New upstream release 5.12. + +* Fri Mar 27 2015 Avesh Agarwal - 5.11-1 +- New upstream release 5.11. + +* Wed Jan 28 2015 Avesh Agarwal - 5.10-1 +- New upstream release 5.10. + +* Thu Jan 8 2015 Avesh Agarwal - 5.09-1 +- 1163349: New upstream release 5.09. + +* Thu Dec 11 2014 Avesh Agarwal - 5.08-1 +- 1163349: New upstream release 5.08 + +* Sun Nov 23 2014 Avesh Agarwal - 5.08b6-1 +- 1163349: New upstream beta release 5.08b6 +- Fixed incorrect reporting of fips status in configure.ac + at compile time, requires autoconf automake at buildtime +- Fixed default OpenSSL directory issue by using with-ssl +- Updates local patches +- 1155977: Fixes man page issues + +* Tue Nov 04 2014 Avesh Agarwal - 5.07-1 +- New upstream release 5.07 + +* Fri Oct 17 2014 Avesh Agarwal - 5.06-1 +- New upstream release 5.06 +- Addresses Poodle security issue + +* Wed Oct 8 2014 Avesh Agarwal - 5.05b5-1 +- rhbz #1144393: New upstream beta release +- systemd socket activation support + +* Fri Sep 26 2014 Avesh Agarwal - 5.04-2 +- Fixes packaging issues mentioned in rhbz#226439 + +* Mon Sep 22 2014 Avesh Agarwal - 5.04-1 +- New upstream realease 5.04 +- Updates local patches so that they apply cleanly to + avoud hunk errors + +* Thu Aug 28 2014 Avesh Agarwal - 5.03-1 +- New upstream realease 5.03 + +* Mon Aug 18 2014 Fedora Release Engineering - 5.02-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Jul 14 2014 Avesh Agarwal - 5.02-1 +- rhbz#1108818: New upstream realease 5.02 +- Updated local patches +- The rhbz#530950 is tested and seems to work. STRLEN has + been no longer allocated statically since 4.36 version. + So it is possible that this bz might have got fixed + around 4.36 release. +- Fixes rpmlint errors + +* Sun Jun 08 2014 Fedora Release Engineering - 5.01-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 28 2014 Avesh Agarwal - 5.01-2 +- Integration with systemd. +- Spec file clean up +- Patched stunnel systemd unit file to have dependency on + network.target. +- rhbz#455815: Packaged systemd service file +- rhbz#782535: Fixed private tmp issue. +- rhbz#995831: Fixed wrong encoding of french man page. + +* Thu Apr 17 2014 Avesh Agarwal - 5.01-1 +- New upstream realease 5.01 +- Supports OpenSSL DLLs 1.0.1g. +- Fixes to take care of OpenSSL,s TLS heartbeat + read overrun (CVE-2014-0160). + +* Fri Mar 7 2014 Avesh Agarwal - 5.00-1 +- New upstream realease 5.00 +- Updated local patches. +- Fix for CVE-2014-0016 +- Fixed changelog date errors +- Fixes rhbz #1006819 + +* Mon Aug 5 2013 Avesh Agarwal - 4.56-3 +- Ftp mirrors for NA does not work, so changing source code + URLs to the correct ones. + +* Sun Aug 04 2013 Fedora Release Engineering - 4.56-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Apr 1 2013 Avesh Agarwal - 4.56-1 +- New upstream realease 4.56. +- Updated local patches. +- Fixed upstream URL in spec file. +- Sourced URL of sha256 hash file in spec file. + +* Tue Mar 26 2013 Avesh Agarwal - 4.55-2 +- Resolves: 927841 + +* Mon Mar 4 2013 Avesh Agarwal - 4.55-1 +- New upstream realease 4.55 +- Updated local patches +- enabled fips mode +- Fixed for pod2man as it build-requires perl-podlators + +* Fri Feb 15 2013 Fedora Release Engineering - 4.54-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Dec 10 2012 Avesh Agarwal - 4.54-2 +- 884183: support for full relro. + +* Tue Oct 16 2012 Avesh Agarwal - 4.54-1 +- New upstream realease 4.54 +- Updated local patches + +* Sat Jul 21 2012 Fedora Release Engineering - 4.53-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon May 14 2012 Avesh Agarwal - 4.53-1 +- New upstream realease 4.53 +- Updated local patches + +* Tue Mar 6 2012 Avesh Agarwal - 4.52-1 +- New upstream realease 4.52 +- Updated local patches + +* Sat Jan 14 2012 Fedora Release Engineering - 4.50-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Jan 3 2012 Avesh Agarwal - 4.50-1 +- New upstream realease 4.50 +- Updated local patches + +* Tue Sep 20 2011 Avesh Agarwal - 4.44-1 +- New upstream realease 4.44 +- Updated local patches + +* Fri Aug 19 2011 Avesh Agarwal - 4.42-1 +- New upstream realease 4.42 +- Updated local patches +- Fixes #732069 + +* Mon Aug 1 2011 Avesh Agarwal - 4.41-1 +- New upstream realease 4.41 +- Updated local patches to match the new release + +* Tue Jun 28 2011 Avesh Agarwal - 4.37-1 +- New upstream realease 4.37 +- Updated local patches to match the new release + +* Mon Apr 4 2011 Avesh Agarwal - 4.35-1 +- New upstream realease 4.35 +- Updated authpriv and sample patches to match the new release + +* Wed Feb 09 2011 Fedora Release Engineering - 4.34-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Oct 4 2010 Avesh Agarwal - 4.34-1 +- New upstream realease 4.34 +- Updated authpriv and sample patches to match the new release + +* Wed Apr 7 2010 Avesh Agarwal - 4.33-1 +- New upstream realease 4.33 +- Updated authpriv and sample patches to match the new release +- Addresses bz 580117 (inted mode support issue) + +* Mon Mar 29 2010 Avesh Agarwal - 4.32-1 +- New upstream realease 4.32 +- Updated authpriv and sample patches to match the new release + +* Tue Feb 16 2010 Avesh Agarwal - 4.31-1 +- New upstream realease 4.31 +- Updated authpriv and sample patches to match the new release + +* Tue Jan 26 2010 Avesh Agarwal - 4.30-1 +- New upstream realease 4.30 +- Updated authpriv and sample patches for the new release + +* Wed Dec 09 2009 Avesh Agarwal - 4.29-1 +- New upstream realease 4.29 +- Updated authpriv and sample patches for the new release +- Modified spec file to include dist tag + +* Fri Aug 21 2009 Tomas Mraz - 4.27-5 +- rebuilt with new openssl + +* Sun Jul 26 2009 Fedora Release Engineering - 4.27-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Sun May 3 2009 Miloslav Trmač - 4.27-3 +- Fix the previous patch. + +* Wed Apr 29 2009 Miloslav Trmač - 4.27-2 +- Avoid aliasing undefined by ISO C + +* Thu Apr 16 2009 Miloslav Trmač - 4.27-1 +- Update to stunnel-4.27. + +* Wed Feb 25 2009 Fedora Release Engineering - 4.26-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sun Jan 18 2009 Tomas Mraz - 4.26-2 +- disable openssl upstream fips mode + +* Mon Sep 22 2008 Miloslav Trmač - 4.26-1 +- Update to stunnel-4.26. + +* Sun Jun 8 2008 Miloslav Trmač - 4.25-2 +- Use a clearer error message if the service name is unknown in "accept" + Resolves: #450344 + +* Mon Jun 2 2008 Miloslav Trmač - 4.25-1 +- Update to stunnel-4.25 + +* Tue May 20 2008 Miloslav Trmač - 4.24-2 +- Drop stunnel3 + Resolves: #442842 + +* Mon May 19 2008 Miloslav Trmač - 4.24-1 +- Update to stunnel-4.24 + +* Fri Mar 28 2008 Miloslav Trmač - 4.22-1 +- Update to stunnel-4.22 + +* Tue Feb 19 2008 Fedora Release Engineering - 4.20-6 +- Autorebuild for GCC 4.3 + +* Tue Dec 4 2007 Miloslav Trmač - 4.20-5 +- Rebuild with openssl-0.9.8g + +* Tue Oct 16 2007 Miloslav Trmač - 4.20-4 +- Revert the port to NSS, wait for NSS-based stunnel 5.x instead + Resolves: #301971 +- Mark localized man pages with %%lang (patch by Ville Skyttä) + Resolves: #322281 + +* Tue Aug 28 2007 Miloslav Trmač - 4.20-3.nss +- Port to NSS + +* Mon Dec 4 2006 Miloslav Trmac - 4.20-2 +- Update BuildRequires for the separate tcp_wrappers-devel package + +* Thu Nov 30 2006 Miloslav Trmac - 4.20-1 +- Update to stunnel-4.20 + +* Sat Nov 11 2006 Miloslav Trmac - 4.19-1 +- Update to stunnel-4.19 + +* Wed Oct 25 2006 Miloslav Trmac - 4.18-1 +- Update to stunnel-4.18 +- Remove unused stunnel.cnf from the src.rpm +- Fix some rpmlint warnings + +* Fri Aug 18 2006 Jesse Keating - 4.15-2 +- rebuilt with latest binutils to pick up 64K -z commonpagesize on ppc* + (#203001) + +* Wed Jul 12 2006 Jesse Keating - 4.15-1.1 +- rebuild + +* Sat Mar 18 2006 Miloslav Trmac - 4.15-1 +- Update to stunnel-4.15 + +* Fri Feb 10 2006 Jesse Keating - 4.14-3.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 4.14-3.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 31 2006 Miloslav Trmac - 4.14-3 +- Use pthread threading to fix crash on x86_64 (#179236) + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Nov 9 2005 Miloslav Trmac - 4.14-2 +- Rebuild with newer openssl + +* Thu Nov 3 2005 Miloslav Trmac - 4.14-1 +- Update to stunnel-4.14 +- Override changed default pid file location, keep it in %%{_localstatedir}/run + +* Sat Oct 22 2005 Miloslav Trmac - 4.13-1 +- Update to stunnel-4.13 + +* Fri Sep 30 2005 Miloslav Trmac - 4.12-1 +- Update to stunnel-4.12 + +* Thu Sep 22 2005 Miloslav Trmac - 4.11-2 +- Enable IPv6 (#169050, patch by Peter Bieringer) +- Don't ship another copy of man pages in HTML + +* Tue Jul 12 2005 Miloslav Trmac - 4.11-1 +- Update to stunnel-4.11 +- Fix int/size_t mismatches in stack_info () +- Update Certificate-Creation for /etc/pki + +* Wed Jun 1 2005 Miloslav Trmac - 4.10-2 +- Fix inetd mode +- Remove unnecessary Requires: and BuildRequires: +- Clean up the spec file + +* Tue Apr 26 2005 Nalin Dahyabhai 4.10-1 +- update to 4.10 + +* Tue Apr 26 2005 Nalin Dahyabhai 4.08-2 +- add buildprereqs on libtool, util-linux; change textutils/fileutils dep to + coreutils (#133961) + +* Wed Mar 16 2005 Nalin Dahyabhai 4.08-1 +- update to 4.08 +- build stunnel as a PIE binary + +* Mon Nov 22 2004 Miloslav Trmac - 4.05-4 +- Convert man pages to UTF-8 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Thu May 27 2004 Nalin Dahyabhai 4.05-2 +- move the sample configuration to %%doc, it shouldn't be used as-is (#124373) + +* Thu Mar 11 2004 Nalin Dahyabhai 4.05-1 +- update to 4.05 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Thu Aug 7 2003 Elliot Lee 4.04-6 +- Fix libtool + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Fri Mar 21 2003 Nalin Dahyabhai 4.04-4 +- fix xinetd configuration samples + +* Mon Feb 10 2003 Nalin Dahyabhai 4.04-3 +- rebuild + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Wed Jan 15 2003 Nalin Dahyabhai 4.04-1 +- update to 4.04 + +* Tue Jan 7 2003 Nalin Dahyabhai 4.03-1 +- use pkgconfig for information about openssl, if available + +* Fri Jan 3 2003 Nalin Dahyabhai +- update to 4.03 + +* Mon Oct 21 2002 Nalin Dahyabhai 4.02-1 +- update to 4.02 + +* Fri Oct 4 2002 Nalin Dahyabhai 4.00-1 +- don't create a dummy cert + +* Wed Sep 25 2002 Nalin Dahyabhai +- update to 4.00 +- remove textutils and fileutils as buildreqs, add automake/autoconf + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Sun May 26 2002 Tim Powers +- automated rebuild + +* Fri May 17 2002 Nalin Dahyabhai 3.22-2 +- rebuild in new environment + +* Wed Jan 2 2002 Nalin Dahyabhai 3.22-1 +- update to 3.22, correcting a format-string vulnerability + +* Wed Oct 31 2001 Nalin Dahyabhai 3.21a-1 +- update to 3.21a + +* Tue Aug 28 2001 Nalin Dahyabhai 3.20-1 +- log using LOG_AUTHPRIV facility by default (#47289) +- make permissions on stunnel binary 0755 +- implicitly trust certificates in %%{_datadir}/ssl/trusted (#24034) + +* Fri Aug 10 2001 Nalin Dahyabhai 3.19-1 +- update to 3.19 to avoid problems with stunnel being multithreaded, but + tcp wrappers not being thrad-safe + +* Mon Jul 30 2001 Nalin Dahyabhai +- update to 3.17 + +* Mon Jul 23 2001 Nalin Dahyabhai +- update to 3.16 + +* Mon Jul 16 2001 Nalin Dahyabhai +- update to 3.15 +- enable tcp-wrappers support + +* Tue May 29 2001 Nalin Dahyabhai +- remove explicit requirement on openssl (specific version isn't enough, + we have to depend on shared library version anyway) + +* Fri Apr 27 2001 Nalin Dahyabhai +- update to 3.14 + +* Mon Mar 26 2001 Preston Brown +- depend on make (#33148) + +* Fri Mar 2 2001 Nalin Dahyabhai +- rebuild in new environment + +* Tue Feb 6 2001 Nalin Dahyabhai +- update to 3.13 to get pthread, OOB, 64-bit fixes +- don't need sdf any more + +* Thu Dec 28 2000 Nalin Dahyabhai +- pull in sdf to build the man page (#22892) + +* Fri Dec 22 2000 Nalin Dahyabhai +- update to 3.11 +- chuck the SIGHUP patch (went upstream) +- chuck parts of the 64-bit clean patch (went upstream) + +* Thu Dec 21 2000 Nalin Dahyabhai +- update to 3.10 +- more 64-bit clean changes, hopefully the last bunch + +* Wed Dec 20 2000 Nalin Dahyabhai +- change piddir from the default /var/stunnel to /var/run +- clean out pid file on SIGHUP + +* Fri Dec 15 2000 Nalin Dahyabhai +- update to 3.9 to get a security fix + +* Wed Oct 25 2000 Matt Wilson +- change all unsigned longs to u_int32_t when dealing with network + addresses + +* Fri Aug 18 2000 Nalin Dahyabhai +- make stunnel.pem also be (missingok) + +* Thu Jun 29 2000 Nalin Dahyabhai +- move to Applications/Internet group +- clean up %%post script +- make stunnel.pem %%ghost %%config(noreplace) +- provide a sample file for use with xinetd + +* Thu Jun 8 2000 Nalin Dahyabhai +- FHS compliance fixes +- modify defaults + +* Tue Mar 14 2000 Florian La Roche +- update to 3.8 +- do not create certificate if one already exists + +* Mon Feb 21 2000 Florian La Roche +- update to 3.7 +- add patch to find /usr/share/ssl +- change some perms + +* Sat Oct 30 1999 Bernhard Rosenkraenzer +- Modify spec file to match Red Hat standards + +* Thu Aug 12 1999 Damien Miller +- Updated to 3.4a +- Patched for OpenSSL 0.9.4 +- Cleaned up files section + +* Sun Jul 11 1999 Damien Miller +- Updated to 3.3 + +* Sat Nov 28 1998 Damien Miller +- Initial RPMification diff --git a/SPECS/stunnel/stunnel@.service b/SPECS/stunnel/stunnel@.service new file mode 100644 index 0000000000..d31ac9c906 --- /dev/null +++ b/SPECS/stunnel/stunnel@.service @@ -0,0 +1,11 @@ +[Unit] +Description=TLS tunnel for %I +After=syslog.target network.target + +[Service] +ExecStart=/usr/bin/stunnel /etc/stunnel/%i.conf +Type=forking +PrivateTmp=true + +[Install] +WantedBy=multi-user.target diff --git a/SPECS/supermin/supermin.spec b/SPECS/supermin/supermin.spec index 35eac3a9bb..022b7cc490 100644 --- a/SPECS/supermin/supermin.spec +++ b/SPECS/supermin/supermin.spec @@ -21,7 +21,7 @@ Summary: Tool for creating supermin appliances Name: supermin Version: 5.3.4 -Release: 7%{?dist} +Release: 13%{?dist} License: GPLv2+ Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -54,7 +54,7 @@ BuildRequires: systemd-udev %if %{with dietlibc} BuildRequires: dietlibc-devel %else -BuildRequires: glibc-static >= 2.38-12%{?dist} +BuildRequires: glibc-static >= 2.38-18%{?dist} %endif %if 0%{?with_check} @@ -129,6 +129,10 @@ make check || { %{_rpmconfigdir}/supermin-find-requires %changelog +* Thu Mar 12 2026 Lee Chee Yang - 5.3.4-13 +- merge from Azure Linux 3.0.20260204-3.0 +- Bump to rebuild with updated glibc + * Fri Oct 3 2025 Lee Chee Yang - 5.3.4-7 - merge from Azure Linux 3.0.20250910-3.0 - Bump to rebuild with updated glibc diff --git a/SPECS/systemd/CVE-2025-4598.patch b/SPECS/systemd/CVE-2025-4598.patch new file mode 100644 index 0000000000..71bde3afbd --- /dev/null +++ b/SPECS/systemd/CVE-2025-4598.patch @@ -0,0 +1,175 @@ +From 254ab8d2a7866679cee006d844d078774cbac3c9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 29 Apr 2025 14:47:59 +0200 +Subject: [PATCH] coredump: use %d in kernel core pattern +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The kernel provides %d which is documented as +"dump mode—same as value returned by prctl(2) PR_GET_DUMPABLE". + +We already query /proc/pid/auxv for this information, but unfortunately this +check is subject to a race, because the crashed process may be replaced by an +attacker before we read this data, for example replacing a SUID process that +was killed by a signal with another process that is not SUID, tricking us into +making the coredump of the original process readable by the attacker. + +With this patch, we effectively add one more check to the list of conditions +that need be satisfied if we are to make the coredump accessible to the user. + +Reportedy-by: Qualys Security Advisory + +(cherry-picked from commit 0c49e0049b7665bb7769a13ef346fef92e1ad4d6) +(cherry-picked from commit c58a8a6ec9817275bb4babaa2c08e0e35090d4e3) +(cherry picked from commit 19d439189ab85dd7222bdd59fd442bbcc8ea99a7) + +Modified to apply to Azure Linux +Modified by: akhila-guruju +Date: Fri, 13 Jun 2025 06:54:43 +0000 + +Upstream Patch Reference: https://github.com/systemd/systemd-stable/commit/254ab8d2a7866679cee006d844d078774cbac3c9.patch + +--- + man/systemd-coredump.xml | 12 ++++++++++++ + man/version-info.xml | 2 ++ + src/coredump/coredump.c | 21 ++++++++++++++++++--- + sysctl.d/50-coredump.conf.in | 2 +- + test/units/testsuite-74.coredump.sh | 5 +++++ + 5 files changed, 38 insertions(+), 4 deletions(-) + +diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml +index 762873a..70bfb86 100644 +--- a/man/systemd-coredump.xml ++++ b/man/systemd-coredump.xml +@@ -292,6 +292,18 @@ COREDUMP_FILENAME=/var/lib/systemd/coredump/core.Web….552351.….zst +
+ + ++ ++ COREDUMP_DUMPABLE= ++ ++ The PR_GET_DUMPABLE field as reported by the kernel, see ++ prctl2. ++ ++ ++ ++ ++ ++ + + COREDUMP_OPEN_FDS= + +diff --git a/man/version-info.xml b/man/version-info.xml +index 5dabf9d..9311c0c 100644 +--- a/man/version-info.xml ++++ b/man/version-info.xml +@@ -78,4 +78,6 @@ + Added in version 254. + Added in version 255. + Added in version 256. ++ Added in version 257. ++ Added in version 258. + +diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c +index 32c1766..64d68ab 100644 +--- a/src/coredump/coredump.c ++++ b/src/coredump/coredump.c +@@ -96,6 +96,7 @@ enum { + META_ARGV_TIMESTAMP, /* %t: time of dump, expressed as seconds since the Epoch (we expand this to μs granularity) */ + META_ARGV_RLIMIT, /* %c: core file size soft resource limit */ + META_ARGV_HOSTNAME, /* %h: hostname */ ++ META_ARGV_DUMPABLE, /* %d: as set by the kernel */ + _META_ARGV_MAX, + + /* The following indexes are cached for a couple of special fields we use (and +@@ -123,6 +124,7 @@ static const char * const meta_field_names[_META_MAX] = { + [META_ARGV_TIMESTAMP] = "COREDUMP_TIMESTAMP=", + [META_ARGV_RLIMIT] = "COREDUMP_RLIMIT=", + [META_ARGV_HOSTNAME] = "COREDUMP_HOSTNAME=", ++ [META_ARGV_DUMPABLE] = "COREDUMP_DUMPABLE=", + [META_COMM] = "COREDUMP_COMM=", + [META_EXE] = "COREDUMP_EXE=", + [META_UNIT] = "COREDUMP_UNIT=", +@@ -135,6 +137,7 @@ typedef struct Context { + pid_t pid; + uid_t uid; + gid_t gid; ++ unsigned dumpable; + bool is_pid1; + bool is_journald; + } Context; +@@ -393,14 +396,16 @@ static int grant_user_access(int core_fd, const Context *context) { + if (r < 0) + return r; + +- /* We allow access if we got all the data and at_secure is not set and +- * the uid/gid matches euid/egid. */ ++ /* We allow access if dumpable on the command line was exactly 1, we got all the data, ++ * at_secure is not set, and the uid/gid match euid/egid. */ + bool ret = ++ context->dumpable == 1 && + at_secure == 0 && + uid != UID_INVALID && euid != UID_INVALID && uid == euid && + gid != GID_INVALID && egid != GID_INVALID && gid == egid; +- log_debug("Will %s access (uid="UID_FMT " euid="UID_FMT " gid="GID_FMT " egid="GID_FMT " at_secure=%s)", ++ log_debug("Will %s access (dumpable=%u uid="UID_FMT " euid="UID_FMT " gid="GID_FMT " egid="GID_FMT " at_secure=%s)", + ret ? "permit" : "restrict", ++ context->dumpable, + uid, euid, gid, egid, yes_no(at_secure)); + return ret; + } +@@ -987,6 +992,16 @@ static int save_context(Context *context, const struct iovec_wrapper *iovw) { + if (r < 0) + return log_error_errno(r, "Failed to parse GID \"%s\": %m", context->meta[META_ARGV_GID]); + ++ /* The value is set to contents of /proc/sys/fs/suid_dumpable, which we set to 2, ++ * if the process is marked as not dumpable, see PR_SET_DUMPABLE(2const). */ ++ if (context->meta[META_ARGV_DUMPABLE]) { ++ r = safe_atou(context->meta[META_ARGV_DUMPABLE], &context->dumpable); ++ if (r < 0) ++ return log_error_errno(r, "Failed to parse dumpable field \"%s\": %m", context->meta[META_ARGV_DUMPABLE]); ++ if (context->dumpable > 2) ++ log_notice("Got unexpected %%d/dumpable value %u.", context->dumpable); ++ } ++ + unit = context->meta[META_UNIT]; + context->is_pid1 = streq(context->meta[META_ARGV_PID], "1") || streq_ptr(unit, SPECIAL_INIT_SCOPE); + context->is_journald = streq_ptr(unit, SPECIAL_JOURNALD_SERVICE); +diff --git a/sysctl.d/50-coredump.conf.in b/sysctl.d/50-coredump.conf.in +index 90c080b..a550c87 100644 +--- a/sysctl.d/50-coredump.conf.in ++++ b/sysctl.d/50-coredump.conf.in +@@ -13,7 +13,7 @@ + # the core dump. + # + # See systemd-coredump(8) and core(5). +-kernel.core_pattern=|{{LIBEXECDIR}}/systemd-coredump %P %u %g %s %t %c %h ++kernel.core_pattern=|{{LIBEXECDIR}}/systemd-coredump %P %u %g %s %t %c %h %d + + # Allow 16 coredumps to be dispatched in parallel by the kernel. + # We collect metadata from /proc/%P/, and thus need to make sure the crashed +diff --git a/test/units/testsuite-74.coredump.sh b/test/units/testsuite-74.coredump.sh +index 6552643..f9b56ac 100755 +--- a/test/units/testsuite-74.coredump.sh ++++ b/test/units/testsuite-74.coredump.sh +@@ -191,10 +191,15 @@ rm -f /tmp/core.{output,redirected} + # systemd-coredump args: PID UID GID SIGNUM TIMESTAMP CORE_SOFT_RLIMIT HOSTNAME + journalctl -b -n 1 --output=export --output-fields=MESSAGE,COREDUMP COREDUMP_EXE="/usr/bin/test-dump" | + /usr/lib/systemd/systemd-coredump --backtrace $$ 0 0 6 1679509994 12345 mymachine ++journalctl -b -n 1 --output=export --output-fields=MESSAGE,COREDUMP COREDUMP_EXE="/usr/bin/test-dump" | ++ /usr/lib/systemd/systemd-coredump --backtrace $$ 0 0 6 1679509902 12345 youmachine 1 + # Wait a bit for the coredump to get processed + timeout 30 bash -c "while [[ \$(coredumpctl list -q --no-legend $$ | wc -l) -eq 0 ]]; do sleep 1; done" + coredumpctl info "$$" + coredumpctl info COREDUMP_HOSTNAME="mymachine" ++coredumpctl info COREDUMP_TIMESTAMP=1679509902000000 ++coredumpctl info COREDUMP_HOSTNAME="youmachine" ++coredumpctl info COREDUMP_DUMPABLE="1" + + # This used to cause a stack overflow + systemd-run -t --property CoredumpFilter=all ls /tmp +-- +2.45.2 + diff --git a/SPECS/systemd/fix-stackoverflow-when-dropping-tclass-or-qdisc.patch b/SPECS/systemd/fix-stackoverflow-when-dropping-tclass-or-qdisc.patch new file mode 100644 index 0000000000..e9c237d3eb --- /dev/null +++ b/SPECS/systemd/fix-stackoverflow-when-dropping-tclass-or-qdisc.patch @@ -0,0 +1,201 @@ +From a5afac6ee6535b2bcb5214beb648c16b3fd3e99b Mon Sep 17 00:00:00 2001 +From: Rohit Rawat +Date: Tue, 25 Nov 2025 12:22:08 +0000 +Subject: [PATCH] network/tc: fix stack overflow when dropping tclass or qdisc + +This patch is combination of two patches that fixed the issue in v255-stable: +1. network/tc: fix stack overflow when dropping tclass or qdisc by Yu Watanabe at + https://github.com/systemd/systemd-stable/commit/af95833d49ee4a77511d5ce9a507f9c74352347c +2. network/tc: Avoid concurrent set modification in tclass_drop()/qdisc_drop() by Daan De Meyer at + https://github.com/systemd/systemd-stable/commit/b3fd8fa1cae7837043bfb1096c413a086f720a4b + +Note: This patch is needed only in systemd v255 and is already present in + later releases(v256 and above) + +--- + src/network/tc/qdisc.c | 52 ++++++++++++++++++++++++++++++----------- + src/network/tc/qdisc.h | 2 ++ + src/network/tc/tclass.c | 51 +++++++++++++++++++++++++++++----------- + src/network/tc/tclass.h | 2 ++ + 4 files changed, 81 insertions(+), 26 deletions(-) + +diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c +index f20f410..43f5c73 100644 +--- a/src/network/tc/qdisc.c ++++ b/src/network/tc/qdisc.c +@@ -285,31 +285,57 @@ int link_find_qdisc(Link *link, uint32_t handle, const char *kind, QDisc **ret) + return -ENOENT; + } + +-QDisc* qdisc_drop(QDisc *qdisc) { ++void qdisc_mark_recursive(QDisc *qdisc) { + TClass *tclass; +- Link *link; + + assert(qdisc); ++ assert(qdisc->link); ++ ++ if (qdisc_is_marked(qdisc)) ++ return; + +- link = ASSERT_PTR(qdisc->link); ++ qdisc_mark(qdisc); + +- /* also drop all child classes assigned to the qdisc. */ +- SET_FOREACH(tclass, link->tclasses) { ++ /* also mark all child classes assigned to the qdisc. */ ++ SET_FOREACH(tclass, qdisc->link->tclasses) { + if (TC_H_MAJ(tclass->classid) != qdisc->handle) + continue; + +- tclass_drop(tclass); ++ tclass_mark_recursive(tclass); + } ++} + +- qdisc_enter_removed(qdisc); ++void link_qdisc_drop_marked(Link *link) { ++ QDisc *qdisc; + +- if (qdisc->state == 0) { +- log_qdisc_debug(qdisc, link, "Forgetting"); +- qdisc = qdisc_free(qdisc); +- } else +- log_qdisc_debug(qdisc, link, "Removed"); ++ assert(link); ++ ++ SET_FOREACH(qdisc, link->qdiscs) { ++ if (!qdisc_is_marked(qdisc)) ++ continue; ++ ++ qdisc_unmark(qdisc); ++ qdisc_enter_removed(qdisc); ++ ++ if (qdisc->state == 0) { ++ log_qdisc_debug(qdisc, link, "Forgetting"); ++ qdisc_free(qdisc); ++ } else ++ log_qdisc_debug(qdisc, link, "Removed"); ++ } ++} ++ ++QDisc* qdisc_drop(QDisc *qdisc) { ++ assert(qdisc); ++ assert(qdisc->link); ++ ++ qdisc_mark_recursive(qdisc); ++ ++ /* link_qdisc_drop_marked() may invalidate qdisc, so run link_tclass_drop_marked() first. */ ++ link_tclass_drop_marked(qdisc->link); ++ link_qdisc_drop_marked(qdisc->link); + +- return qdisc; ++ return NULL; + } + + static int qdisc_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, QDisc *qdisc) { +diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h +index a62b941..cbba1be 100644 +--- a/src/network/tc/qdisc.h ++++ b/src/network/tc/qdisc.h +@@ -77,7 +77,9 @@ DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(QDisc, qdisc); + QDisc* qdisc_free(QDisc *qdisc); + int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret); + ++void qdisc_mark_recursive(QDisc *qdisc); + QDisc* qdisc_drop(QDisc *qdisc); ++void link_qdisc_drop_marked(Link *link); + + int link_find_qdisc(Link *link, uint32_t handle, const char *kind, QDisc **qdisc); + +diff --git a/src/network/tc/tclass.c b/src/network/tc/tclass.c +index 0a5fec0..fc74c48 100644 +--- a/src/network/tc/tclass.c ++++ b/src/network/tc/tclass.c +@@ -252,31 +252,56 @@ static void log_tclass_debug(TClass *tclass, Link *link, const char *str) { + strna(tclass_get_tca_kind(tclass))); + } + +-TClass* tclass_drop(TClass *tclass) { ++void tclass_mark_recursive(TClass *tclass) { + QDisc *qdisc; +- Link *link; + + assert(tclass); ++ assert(tclass->link); ++ ++ if (tclass_is_marked(tclass)) ++ return; + +- link = ASSERT_PTR(tclass->link); ++ tclass_mark(tclass); + +- /* Also drop all child qdiscs assigned to the class. */ +- SET_FOREACH(qdisc, link->qdiscs) { ++ /* Also mark all child qdiscs assigned to the class. */ ++ SET_FOREACH(qdisc, tclass->link->qdiscs) { + if (qdisc->parent != tclass->classid) + continue; + +- qdisc_drop(qdisc); ++ qdisc_mark_recursive(qdisc); + } ++} + +- tclass_enter_removed(tclass); ++void link_tclass_drop_marked(Link *link) { ++ TClass *tclass; + +- if (tclass->state == 0) { +- log_tclass_debug(tclass, link, "Forgetting"); +- tclass = tclass_free(tclass); +- } else +- log_tclass_debug(tclass, link, "Removed"); ++ assert(link); ++ ++ SET_FOREACH(tclass, link->tclasses) { ++ if (!tclass_is_marked(tclass)) ++ continue; ++ ++ tclass_unmark(tclass); ++ tclass_enter_removed(tclass); ++ ++ if (tclass->state == 0) { ++ log_tclass_debug(tclass, link, "Forgetting"); ++ tclass_free(tclass); ++ } else ++ log_tclass_debug(tclass, link, "Removed"); ++ } ++} ++ ++TClass* tclass_drop(TClass *tclass) { ++ assert(tclass); ++ ++ tclass_mark_recursive(tclass); ++ ++ /* link_tclass_drop_marked() may invalidate tclass, so run link_qdisc_drop_marked() first. */ ++ link_qdisc_drop_marked(tclass->link); ++ link_tclass_drop_marked(tclass->link); + +- return tclass; ++ return NULL; + } + + static int tclass_handler(sd_netlink *rtnl, sd_netlink_message *m, Request *req, Link *link, TClass *tclass) { +diff --git a/src/network/tc/tclass.h b/src/network/tc/tclass.h +index e73e23c..85df57d 100644 +--- a/src/network/tc/tclass.h ++++ b/src/network/tc/tclass.h +@@ -58,7 +58,9 @@ DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(TClass, tclass); + TClass* tclass_free(TClass *tclass); + int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret); + ++void tclass_mark_recursive(TClass *tclass); + TClass* tclass_drop(TClass *tclass); ++void link_tclass_drop_marked(Link *link); + + int link_find_tclass(Link *link, uint32_t classid, TClass **ret); + +-- +2.45.4 + diff --git a/SPECS/systemd/ipc-call-0001-path-util-add-flavour-of-path_startswith-that-leaves.patch b/SPECS/systemd/ipc-call-0001-path-util-add-flavour-of-path_startswith-that-leaves.patch new file mode 100644 index 0000000000..02af3778ff --- /dev/null +++ b/SPECS/systemd/ipc-call-0001-path-util-add-flavour-of-path_startswith-that-leaves.patch @@ -0,0 +1,164 @@ +From 0247730a13284be4bb1ccd16181b34ba94b2da04 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 19 May 2025 12:58:52 +0200 +Subject: [PATCH 1/4] path-util: add flavour of path_startswith() that leaves a + leading slash in place + +(cherry picked from commit ee19edbb9f3455db3f750089082f3e5a925e3a0c) +(cherry picked from commit 20021e7686426052e3a7505425d7e12085feb2a6) +--- + src/basic/fs-util.c | 2 +- + src/basic/mkdir.c | 2 +- + src/basic/path-util.c | 39 ++++++++++++++++++++++++++++----------- + src/basic/path-util.h | 10 ++++++++-- + src/test/test-path-util.c | 16 ++++++++++++++++ + 5 files changed, 54 insertions(+), 15 deletions(-) + +diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c +index ee38e0266a..cc89f48fb7 100644 +--- a/src/basic/fs-util.c ++++ b/src/basic/fs-util.c +@@ -65,7 +65,7 @@ int rmdir_parents(const char *path, const char *stop) { + assert(*slash == '/'); + *slash = '\0'; + +- if (path_startswith_full(stop, p, /* accept_dot_dot= */ false)) ++ if (path_startswith_full(stop, p, /* flags= */ 0)) + return 0; + + if (rmdir(p) < 0 && errno != ENOENT) +diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c +index c770e5ed32..7bc73361a5 100644 +--- a/src/basic/mkdir.c ++++ b/src/basic/mkdir.c +@@ -155,7 +155,7 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, ui + assert(_mkdirat != mkdirat); + + if (prefix) { +- p = path_startswith_full(path, prefix, /* accept_dot_dot= */ false); ++ p = path_startswith_full(path, prefix, /* flags= */ 0); + if (!p) + return -ENOTDIR; + } else +diff --git a/src/basic/path-util.c b/src/basic/path-util.c +index 6810bf66aa..e73f5d708e 100644 +--- a/src/basic/path-util.c ++++ b/src/basic/path-util.c +@@ -403,8 +403,8 @@ char* path_simplify_full(char *path, PathSimplifyFlags flags) { + return path; + } + +-char* path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) { +- assert(path); ++char* path_startswith_full(const char *original_path, const char *prefix, PathStartWithFlags flags) { ++ assert(original_path); + assert(prefix); + + /* Returns a pointer to the start of the first component after the parts matched by +@@ -417,28 +417,45 @@ char* path_startswith_full(const char *path, const char *prefix, bool accept_dot + * Returns NULL otherwise. + */ + ++ const char *path = original_path; ++ + if ((path[0] == '/') != (prefix[0] == '/')) + return NULL; + + for (;;) { + const char *p, *q; +- int r, k; ++ int m, n; + +- r = path_find_first_component(&path, accept_dot_dot, &p); +- if (r < 0) ++ m = path_find_first_component(&path, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &p); ++ if (m < 0) + return NULL; + +- k = path_find_first_component(&prefix, accept_dot_dot, &q); +- if (k < 0) ++ n = path_find_first_component(&prefix, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &q); ++ if (n < 0) + return NULL; + +- if (k == 0) +- return (char*) (p ?: path); ++ if (n == 0) { ++ if (!p) ++ p = path; ++ ++ if (FLAGS_SET(flags, PATH_STARTSWITH_RETURN_LEADING_SLASH)) { ++ ++ if (p <= original_path) ++ return NULL; ++ ++ p--; ++ ++ if (*p != '/') ++ return NULL; ++ } ++ ++ return (char*) p; ++ } + +- if (r != k) ++ if (m != n) + return NULL; + +- if (!strneq(p, q, r)) ++ if (!strneq(p, q, m)) + return NULL; + } + } +diff --git a/src/basic/path-util.h b/src/basic/path-util.h +index 6d943e967f..e0ec05f4db 100644 +--- a/src/basic/path-util.h ++++ b/src/basic/path-util.h +@@ -53,9 +53,15 @@ int safe_getcwd(char **ret); + int path_make_absolute_cwd(const char *p, char **ret); + int path_make_relative(const char *from, const char *to, char **ret); + int path_make_relative_parent(const char *from_child, const char *to, char **ret); +-char* path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) _pure_; ++ ++typedef enum PathStartWithFlags { ++ PATH_STARTSWITH_ACCEPT_DOT_DOT = 1U << 0, ++ PATH_STARTSWITH_RETURN_LEADING_SLASH = 1U << 1, ++} PathStartWithFlags; ++ ++char* path_startswith_full(const char *path, const char *prefix, PathStartWithFlags flags) _pure_; + static inline char* path_startswith(const char *path, const char *prefix) { +- return path_startswith_full(path, prefix, true); ++ return path_startswith_full(path, prefix, PATH_STARTSWITH_ACCEPT_DOT_DOT); + } + + int path_compare(const char *a, const char *b) _pure_; +diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c +index f5a425689a..5b164facc0 100644 +--- a/src/test/test-path-util.c ++++ b/src/test/test-path-util.c +@@ -754,6 +754,22 @@ TEST(path_startswith) { + test_path_startswith_one("/foo/bar/barfoo/", "/fo", NULL, NULL); + } + ++static void test_path_startswith_return_leading_slash_one(const char *path, const char *prefix, const char *expected) { ++ const char *p; ++ ++ log_debug("/* %s(%s, %s) */", __func__, path, prefix); ++ ++ p = path_startswith_full(path, prefix, PATH_STARTSWITH_RETURN_LEADING_SLASH); ++ assert_se(streq(p, expected)); ++} ++ ++TEST(path_startswith_return_leading_slash) { ++ test_path_startswith_return_leading_slash_one("/foo/bar", "/", "/foo/bar"); ++ test_path_startswith_return_leading_slash_one("/foo/bar", "/foo", "/bar"); ++ test_path_startswith_return_leading_slash_one("/foo/bar", "/foo/bar", NULL); ++ test_path_startswith_return_leading_slash_one("/foo/bar/", "/foo/bar", "/"); ++} ++ + static void test_prefix_root_one(const char *r, const char *p, const char *expected) { + _cleanup_free_ char *s = NULL; + const char *t; +-- +2.51.0 + diff --git a/SPECS/systemd/ipc-call-0002-path-util-invert-PATH_STARTSWITH_ACCEPT_DOT_DOT-flag.patch b/SPECS/systemd/ipc-call-0002-path-util-invert-PATH_STARTSWITH_ACCEPT_DOT_DOT-flag.patch new file mode 100644 index 0000000000..58011269c2 --- /dev/null +++ b/SPECS/systemd/ipc-call-0002-path-util-invert-PATH_STARTSWITH_ACCEPT_DOT_DOT-flag.patch @@ -0,0 +1,83 @@ +From 647d009c240dbeadf586e69b3c9121b6b6cb12d7 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 23 May 2025 06:45:40 +0200 +Subject: [PATCH 2/4] path-util: invert PATH_STARTSWITH_ACCEPT_DOT_DOT flag + +As requested: https://github.com/systemd/systemd/pull/37572#pullrequestreview-2861928094 + +(cherry picked from commit ceed11e465f1c8efff1931412a85924d9de7c08d) +(cherry picked from commit 7ac3220213690e8a8d6d2a6e81e43bd1dce01d69) +--- + src/basic/fs-util.c | 2 +- + src/basic/mkdir.c | 2 +- + src/basic/path-util.c | 4 ++-- + src/basic/path-util.h | 4 ++-- + 4 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c +index cc89f48fb7..f7c91680d8 100644 +--- a/src/basic/fs-util.c ++++ b/src/basic/fs-util.c +@@ -65,7 +65,7 @@ int rmdir_parents(const char *path, const char *stop) { + assert(*slash == '/'); + *slash = '\0'; + +- if (path_startswith_full(stop, p, /* flags= */ 0)) ++ if (path_startswith_full(stop, p, PATH_STARTSWITH_REFUSE_DOT_DOT)) + return 0; + + if (rmdir(p) < 0 && errno != ENOENT) +diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c +index 7bc73361a5..8f14c47214 100644 +--- a/src/basic/mkdir.c ++++ b/src/basic/mkdir.c +@@ -155,7 +155,7 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, ui + assert(_mkdirat != mkdirat); + + if (prefix) { +- p = path_startswith_full(path, prefix, /* flags= */ 0); ++ p = path_startswith_full(path, prefix, PATH_STARTSWITH_REFUSE_DOT_DOT); + if (!p) + return -ENOTDIR; + } else +diff --git a/src/basic/path-util.c b/src/basic/path-util.c +index e73f5d708e..a65a5c32f6 100644 +--- a/src/basic/path-util.c ++++ b/src/basic/path-util.c +@@ -426,11 +426,11 @@ char* path_startswith_full(const char *original_path, const char *prefix, PathSt + const char *p, *q; + int m, n; + +- m = path_find_first_component(&path, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &p); ++ m = path_find_first_component(&path, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &p); + if (m < 0) + return NULL; + +- n = path_find_first_component(&prefix, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &q); ++ n = path_find_first_component(&prefix, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &q); + if (n < 0) + return NULL; + +diff --git a/src/basic/path-util.h b/src/basic/path-util.h +index e0ec05f4db..11a1078df9 100644 +--- a/src/basic/path-util.h ++++ b/src/basic/path-util.h +@@ -55,13 +55,13 @@ int path_make_relative(const char *from, const char *to, char **ret); + int path_make_relative_parent(const char *from_child, const char *to, char **ret); + + typedef enum PathStartWithFlags { +- PATH_STARTSWITH_ACCEPT_DOT_DOT = 1U << 0, ++ PATH_STARTSWITH_REFUSE_DOT_DOT = 1U << 0, + PATH_STARTSWITH_RETURN_LEADING_SLASH = 1U << 1, + } PathStartWithFlags; + + char* path_startswith_full(const char *path, const char *prefix, PathStartWithFlags flags) _pure_; + static inline char* path_startswith(const char *path, const char *prefix) { +- return path_startswith_full(path, prefix, PATH_STARTSWITH_ACCEPT_DOT_DOT); ++ return path_startswith_full(path, prefix, 0); + } + + int path_compare(const char *a, const char *b) _pure_; +-- +2.51.0 + diff --git a/SPECS/systemd/ipc-call-0003-core-cgroup-avoid-one-unnecessary-strjoina.patch b/SPECS/systemd/ipc-call-0003-core-cgroup-avoid-one-unnecessary-strjoina.patch new file mode 100644 index 0000000000..69e525234e --- /dev/null +++ b/SPECS/systemd/ipc-call-0003-core-cgroup-avoid-one-unnecessary-strjoina.patch @@ -0,0 +1,108 @@ +From 2e169664aff3236331d1cb7063d5241dc68b7461 Mon Sep 17 00:00:00 2001 +From: Mike Yuan +Date: Thu, 26 Feb 2026 11:06:00 +0100 +Subject: [PATCH 3/4] core/cgroup: avoid one unnecessary strjoina() + +(cherry picked from commit 42aee39107fbdd7db1ccd402a2151822b2805e9f) +(cherry picked from commit 80acea4ef80a4bb78560ed970c34952299b890d6) +(cherry picked from commit b5fd14693057e5f2c9b4a49603be64ec3608ff6c) +(cherry picked from commit 21167006574d6b83813c7596759b474f56562412) +--- + src/core/cgroup.c | 29 ++++++++++++++--------------- + 1 file changed, 14 insertions(+), 15 deletions(-) + +diff --git a/src/core/cgroup.c b/src/core/cgroup.c +index 61ac4df1a6..1fedc6e72f 100644 +--- a/src/core/cgroup.c ++++ b/src/core/cgroup.c +@@ -2565,12 +2565,13 @@ static int unit_update_cgroup( + return 0; + } + +-static int unit_attach_pid_to_cgroup_via_bus(Unit *u, pid_t pid, const char *suffix_path) { ++static int unit_attach_pid_to_cgroup_via_bus(Unit *u, const char *cgroup_path, pid_t pid) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- char *pp; + int r; + + assert(u); ++ assert(cgroup_path); ++ assert(pid_is_valid(pid)); + + if (MANAGER_IS_SYSTEM(u->manager)) + return -EINVAL; +@@ -2578,17 +2579,13 @@ static int unit_attach_pid_to_cgroup_via_bus(Unit *u, pid_t pid, const char *suf + if (!u->manager->system_bus) + return -EIO; + +- if (!u->cgroup_path) +- return -EINVAL; +- + /* Determine this unit's cgroup path relative to our cgroup root */ +- pp = path_startswith(u->cgroup_path, u->manager->cgroup_root); ++ const char *pp = path_startswith_full(cgroup_path, ++ u->manager->cgroup_root, ++ PATH_STARTSWITH_RETURN_LEADING_SLASH|PATH_STARTSWITH_REFUSE_DOT_DOT); + if (!pp) + return -EINVAL; + +- pp = strjoina("/", pp, suffix_path); +- path_simplify(pp); +- + r = bus_call_method(u->manager->system_bus, + bus_systemd_mgr, + "AttachProcessesToUnit", +@@ -2627,8 +2624,10 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) { + return r; + + if (isempty(suffix_path)) +- p = u->cgroup_path; ++ p = empty_to_root(u->cgroup_path); + else { ++ assert(path_is_absolute(suffix_path)); ++ + joined = path_join(u->cgroup_path, suffix_path); + if (!joined) + return -ENOMEM; +@@ -2646,7 +2645,7 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) { + * before we use it */ + r = pidref_verify(pid); + if (r < 0) { +- log_unit_info_errno(u, r, "PID " PID_FMT " vanished before we could move it to target cgroup '%s', skipping: %m", pid->pid, empty_to_root(p)); ++ log_unit_info_errno(u, r, "PID " PID_FMT " vanished before we could move it to target cgroup '%s', skipping: %m", pid->pid, p); + continue; + } + +@@ -2657,7 +2656,7 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) { + + log_unit_full_errno(u, again ? LOG_DEBUG : LOG_INFO, r, + "Couldn't move process "PID_FMT" to%s requested cgroup '%s': %m", +- pid->pid, again ? " directly" : "", empty_to_root(p)); ++ pid->pid, again ? " directly" : "", p); + + if (again) { + int z; +@@ -2667,9 +2666,9 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) { + * Since it's more privileged it might be able to move the process across the + * leaves of a subtree whose top node is not owned by us. */ + +- z = unit_attach_pid_to_cgroup_via_bus(u, pid->pid, suffix_path); ++ z = unit_attach_pid_to_cgroup_via_bus(u, p, pid->pid); + if (z < 0) +- log_unit_info_errno(u, z, "Couldn't move process "PID_FMT" to requested cgroup '%s' (directly or via the system bus): %m", pid->pid, empty_to_root(p)); ++ log_unit_info_errno(u, z, "Couldn't move process "PID_FMT" to requested cgroup '%s' (directly or via the system bus): %m", pid->pid, p); + else { + if (ret >= 0) + ret++; /* Count successful additions */ +@@ -2707,7 +2706,7 @@ int unit_attach_pids_to_cgroup(Unit *u, Set *pids, const char *suffix_path) { + continue; /* Success! */ + + log_unit_debug_errno(u, r, "Failed to attach PID " PID_FMT " to requested cgroup %s in controller %s, falling back to unit's cgroup: %m", +- pid->pid, empty_to_root(p), cgroup_controller_to_string(c)); ++ pid->pid, p, cgroup_controller_to_string(c)); + } + + /* So this controller is either not delegate or realized, or something else weird happened. In +-- +2.51.0 + diff --git a/SPECS/systemd/ipc-call-0004-core-validate-input-cgroup-path-more-prudently.patch b/SPECS/systemd/ipc-call-0004-core-validate-input-cgroup-path-more-prudently.patch new file mode 100644 index 0000000000..4e197aeff2 --- /dev/null +++ b/SPECS/systemd/ipc-call-0004-core-validate-input-cgroup-path-more-prudently.patch @@ -0,0 +1,33 @@ +From a0b95d16a9d6a382d05bc8507de400329f7a1c14 Mon Sep 17 00:00:00 2001 +From: Mike Yuan +Date: Thu, 26 Feb 2026 11:06:34 +0100 +Subject: [PATCH 4/4] core: validate input cgroup path more prudently + +(cherry picked from commit efa6ba2ab625aaa160ac435a09e6482fc63bdbe8) +(cherry picked from commit 3cee294fe8cf4fa0eff933ab21416d099942cabd) +(cherry picked from commit 1d22f706bd04f45f8422e17fbde3f56ece17758a) +(cherry picked from commit 54588d2dedff54bfb6036670820650e4ea74628f) +--- + src/core/dbus-manager.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 745f5cc17c..74a603da58 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -646,6 +646,12 @@ static int method_get_unit_by_control_group(sd_bus_message *message, void *userd + if (r < 0) + return r; + ++ if (!path_is_absolute(cgroup)) ++ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Control group path is not absolute: %s", cgroup); ++ ++ if (!path_is_normalized(cgroup)) ++ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Control group path is not normalized: %s", cgroup); ++ + u = manager_get_unit_by_cgroup(m, cgroup); + if (!u) + return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, +-- +2.51.0 + diff --git a/SPECS/systemd/systemd.spec b/SPECS/systemd/systemd.spec index 87b0c425a2..1aff8a0028 100644 --- a/SPECS/systemd/systemd.spec +++ b/SPECS/systemd/systemd.spec @@ -50,7 +50,7 @@ Version: 255 # determine the build information from local checkout Version: %(tools/meson-vcs-tag.sh . error | sed -r 's/-([0-9])/.^\1/; s/-g/_g/') %endif -Release: 31%{?dist} +Release: 33%{?dist} # FIXME - hardcode to 'stable' for now as that's what we have in our blobstore %global stable 1 @@ -156,6 +156,12 @@ Patch0491: azurelinux-use-system-auth-in-pam-systemd-user.patch Patch0900: do-not-test-openssl-sm3.patch Patch0901: networkd-default-use-domains.patch Patch0902: CVE-2023-7008.patch +Patch0903: CVE-2025-4598.patch +Patch0904: fix-stackoverflow-when-dropping-tclass-or-qdisc.patch +Patch0905: ipc-call-0001-path-util-add-flavour-of-path_startswith-that-leaves.patch +Patch0906: ipc-call-0003-core-cgroup-avoid-one-unnecessary-strjoina.patch +Patch0907: ipc-call-0002-path-util-invert-PATH_STARTSWITH_ACCEPT_DOT_DOT-flag.patch +Patch0908: ipc-call-0004-core-validate-input-cgroup-path-more-prudently.patch %ifarch %{ix86} x86_64 aarch64 %global want_bootloader 1 @@ -1252,6 +1258,15 @@ rm -f %{name}.lang # %autochangelog. So we need to continue manually maintaining the # changelog here. %changelog +* Tue Mar 17 2026 Lee Chee Yang - 255-33 +- merge from Azure Linux 3.0.20260304-3.0 +- Add fix-stackoverflow-when-dropping-tclass-or-qdisc.patch +- Apply patches for ipc issue. + +* Tue Jan 6 2025 Lee Chee Yang - 255-32 +- merge from Azure Linux 3.0.20251206-3.0 +- Patch CVE-2025-4598 + * Fri Oct 23 2025 Lee Chee Yang - 255-31 - merge from Azure Linux 3.0.20250910-3.0 - Bump release to match systemd-boot-signed spec diff --git a/SPECS/telegraf/CVE-2025-10543.patch b/SPECS/telegraf/CVE-2025-10543.patch new file mode 100644 index 0000000000..6afbba5e2c --- /dev/null +++ b/SPECS/telegraf/CVE-2025-10543.patch @@ -0,0 +1,33 @@ +From dc05ddc627c4d247ffa5e401b3763b6465a3446c Mon Sep 17 00:00:00 2001 +From: AllSpark +Date: Mon, 8 Dec 2025 13:24:03 +0000 +Subject: [PATCH] Fields over 65535 bytes noe encoded correctly + +When encoding strings (1.5.3 in spec), and some other variable length fields, if the user passed in more then 65535 bytes the ouput would not be as expected (due to 16 byte header there is a hard limit). This change truncates output to 65535 bytes. + +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: AI Backport of https://github.com/eclipse-paho/paho.mqtt.golang/commit/3162447fa892038e82256e918b681dc0c63a21ff.patch +--- + .../github.com/eclipse/paho.mqtt.golang/packets/packets.go | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/vendor/github.com/eclipse/paho.mqtt.golang/packets/packets.go b/vendor/github.com/eclipse/paho.mqtt.golang/packets/packets.go +index b2d7ed1b..0f876c79 100644 +--- a/vendor/github.com/eclipse/paho.mqtt.golang/packets/packets.go ++++ b/vendor/github.com/eclipse/paho.mqtt.golang/packets/packets.go +@@ -330,6 +330,12 @@ func decodeBytes(b io.Reader) ([]byte, error) { + } + + func encodeBytes(field []byte) []byte { ++ // Attempting to encode more than 65,535 bytes would lead to an unexpected 16-bit length and extra data written ++ // (which would be parsed as later parts of the message). The safest option is to truncate. ++ if len(field) > 65535 { ++ field = field[0:65535] ++ } ++ + fieldLength := make([]byte, 2) + binary.BigEndian.PutUint16(fieldLength, uint16(len(field))) + return append(fieldLength, field...) +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2025-11065.patch b/SPECS/telegraf/CVE-2025-11065.patch new file mode 100644 index 0000000000..b9ec72d7aa --- /dev/null +++ b/SPECS/telegraf/CVE-2025-11065.patch @@ -0,0 +1,283 @@ +From fc678501cbc2fba6edee65d3f1ef2295b185f1f5 Mon Sep 17 00:00:00 2001 +From: Mark Sagi-Kazar +Date: Sat, 12 Jul 2025 07:25:50 +0200 +Subject: [PATCH] fix: error message leaks + +Signed-off-by: Mark Sagi-Kazar + +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/go-viper/mapstructure/commit/742921c9ba2854d27baa64272487fc5075d2c39c.patch +--- + .../mitchellh/mapstructure/decode_hooks.go | 12 +- + .../mitchellh/mapstructure/error.go | 156 ++++++++++++++++++ + .../mitchellh/mapstructure/mapstructure.go | 10 +- + 3 files changed, 169 insertions(+), 9 deletions(-) + +diff --git a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +index 3a754ca7..4dfab7d3 100644 +--- a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go ++++ b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +@@ -134,7 +134,9 @@ func StringToTimeDurationHookFunc() DecodeHookFunc { + } + + // Convert it by parsing +- return time.ParseDuration(data.(string)) ++ d, err := time.ParseDuration(data.(string)) ++ ++ return d, wrapTimeParseDurationError(err) + } + } + +@@ -155,7 +157,7 @@ func StringToIPHookFunc() DecodeHookFunc { + // Convert it by parsing + ip := net.ParseIP(data.(string)) + if ip == nil { +- return net.IP{}, fmt.Errorf("failed parsing ip %v", data) ++ return net.IP{}, fmt.Errorf("failed parsing ip") + } + + return ip, nil +@@ -178,7 +180,7 @@ func StringToIPNetHookFunc() DecodeHookFunc { + + // Convert it by parsing + _, net, err := net.ParseCIDR(data.(string)) +- return net, err ++ return net, wrapNetParseError(err) + } + } + +@@ -197,7 +199,9 @@ func StringToTimeHookFunc(layout string) DecodeHookFunc { + } + + // Convert it by parsing +- return time.Parse(layout, data.(string)) ++ ti, err := time.Parse(layout, data.(string)) ++ ++ return ti, wrapTimeParseError(err) + } + } + +diff --git a/vendor/github.com/mitchellh/mapstructure/error.go b/vendor/github.com/mitchellh/mapstructure/error.go +index 47a99e5a..8c3b0786 100644 +--- a/vendor/github.com/mitchellh/mapstructure/error.go ++++ b/vendor/github.com/mitchellh/mapstructure/error.go +@@ -3,8 +3,12 @@ package mapstructure + import ( + "errors" + "fmt" ++ "net" ++ "net/url" + "sort" ++ "strconv" + "strings" ++ "time" + ) + + // Error implements the error interface and can represents multiple +@@ -48,3 +52,155 @@ func appendErrors(errors []string, err error) []string { + return append(errors, e.Error()) + } + } ++ ++func wrapStrconvNumError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*strconv.NumError); ok { ++ return &strconvNumError{Err: err} ++ } ++ ++ return err ++} ++ ++type strconvNumError struct { ++ Err *strconv.NumError ++} ++ ++func (e *strconvNumError) Error() string { ++ return "strconv." + e.Err.Func + ": " + e.Err.Err.Error() ++} ++ ++func (e *strconvNumError) Unwrap() error { return e.Err } ++ ++func wrapUrlError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*url.Error); ok { ++ return &urlError{Err: err} ++ } ++ ++ return err ++} ++ ++type urlError struct { ++ Err *url.Error ++} ++ ++func (e *urlError) Error() string { ++ return fmt.Sprintf("%s", e.Err.Err) ++} ++ ++func (e *urlError) Unwrap() error { return e.Err } ++ ++func wrapNetParseError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*net.ParseError); ok { ++ return &netParseError{Err: err} ++ } ++ ++ return err ++} ++ ++type netParseError struct { ++ Err *net.ParseError ++} ++ ++func (e *netParseError) Error() string { ++ return "invalid " + e.Err.Type ++} ++ ++func (e *netParseError) Unwrap() error { return e.Err } ++ ++func wrapTimeParseError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if err, ok := err.(*time.ParseError); ok { ++ return &timeParseError{Err: err} ++ } ++ ++ return err ++} ++ ++type timeParseError struct { ++ Err *time.ParseError ++} ++ ++func (e *timeParseError) Error() string { ++ if e.Err.Message == "" { ++ return fmt.Sprintf("parsing time as %q: cannot parse as %q", e.Err.Layout, e.Err.LayoutElem) ++ } ++ ++ return "parsing time " + e.Err.Message ++} ++ ++func (e *timeParseError) Unwrap() error { return e.Err } ++ ++func wrapNetIPParseAddrError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if errMsg := err.Error(); strings.HasPrefix(errMsg, "ParseAddr") { ++ errPieces := strings.Split(errMsg, ": ") ++ ++ return fmt.Errorf("ParseAddr: %s", errPieces[len(errPieces)-1]) ++ } ++ ++ return err ++} ++ ++func wrapNetIPParseAddrPortError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ errMsg := err.Error() ++ if strings.HasPrefix(errMsg, "invalid port ") { ++ return errors.New("invalid port") ++ } else if strings.HasPrefix(errMsg, "invalid ip:port ") { ++ return errors.New("invalid ip:port") ++ } ++ ++ return err ++} ++ ++func wrapNetIPParsePrefixError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ if errMsg := err.Error(); strings.HasPrefix(errMsg, "netip.ParsePrefix") { ++ errPieces := strings.Split(errMsg, ": ") ++ ++ return fmt.Errorf("netip.ParsePrefix: %s", errPieces[len(errPieces)-1]) ++ } ++ ++ return err ++} ++ ++func wrapTimeParseDurationError(err error) error { ++ if err == nil { ++ return nil ++ } ++ ++ errMsg := err.Error() ++ if strings.HasPrefix(errMsg, "time: unknown unit ") { ++ return errors.New("time: unknown unit") ++ } else if strings.HasPrefix(errMsg, "time: ") { ++ idx := strings.LastIndex(errMsg, " ") ++ ++ return errors.New(errMsg[:idx]) ++ } ++ ++ return err ++} +diff --git a/vendor/github.com/mitchellh/mapstructure/mapstructure.go b/vendor/github.com/mitchellh/mapstructure/mapstructure.go +index 7581806a..4845a28f 100644 +--- a/vendor/github.com/mitchellh/mapstructure/mapstructure.go ++++ b/vendor/github.com/mitchellh/mapstructure/mapstructure.go +@@ -642,7 +642,7 @@ func (d *Decoder) decodeInt(name string, data interface{}, val reflect.Value) er + if err == nil { + val.SetInt(i) + } else { +- return fmt.Errorf("cannot parse '%s' as int: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as int: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) +@@ -699,14 +699,14 @@ func (d *Decoder) decodeUint(name string, data interface{}, val reflect.Value) e + if err == nil { + val.SetUint(i) + } else { +- return fmt.Errorf("cannot parse '%s' as uint: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as uint: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) + i, err := strconv.ParseUint(string(jn), 0, 64) + if err != nil { + return fmt.Errorf( +- "error decoding json.Number into %s: %s", name, err) ++ "error decoding json.Number into %s: %s", name, wrapStrconvNumError(err)) + } + val.SetUint(i) + default: +@@ -738,7 +738,7 @@ func (d *Decoder) decodeBool(name string, data interface{}, val reflect.Value) e + } else if dataVal.String() == "" { + val.SetBool(false) + } else { +- return fmt.Errorf("cannot parse '%s' as bool: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as bool: %s", name, wrapStrconvNumError(err)) + } + default: + return fmt.Errorf( +@@ -777,7 +777,7 @@ func (d *Decoder) decodeFloat(name string, data interface{}, val reflect.Value) + if err == nil { + val.SetFloat(f) + } else { +- return fmt.Errorf("cannot parse '%s' as float: %s", name, err) ++ return fmt.Errorf("cannot parse '%s' as float: %s", name, wrapStrconvNumError(err)) + } + case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": + jn := data.(json.Number) +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2025-47911.patch b/SPECS/telegraf/CVE-2025-47911.patch new file mode 100644 index 0000000000..da79865718 --- /dev/null +++ b/SPECS/telegraf/CVE-2025-47911.patch @@ -0,0 +1,100 @@ +From ca2fcd298c93ce202150fafa6e48d22e41b328fd Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 16:33:18 -0700 +Subject: [PATCH] html: impose open element stack size limit + +The HTML specification contains a number of algorithms which are +quadratic in complexity by design. Instead of adding complicated +workarounds to prevent these cases from becoming extremely expensive in +pathological cases, we impose a limit of 512 to the size of the stack of +open elements. It is extremely unlikely that non-adversarial HTML +documents will ever hit this limit (but if we see cases of this, we may +want to make the limit configurable via a ParseOption). + +Thanks to Guido Vranken and Jakub Ciolek for both independently +reporting this issue. + +Fixes CVE-2025-47911 +Fixes golang/go#75682 + +Change-Id: I890517b189af4ffbf427d25d3fde7ad7ec3509ad +Reviewed-on: https://go-review.googlesource.com/c/net/+/709876 +Reviewed-by: Damien Neil +LUCI-TryBot-Result: Go LUCI +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/59706cdaa8f95502fdec64b67b4c61d6ca58727d.patch +--- + vendor/golang.org/x/net/html/escape.go | 2 +- + vendor/golang.org/x/net/html/parse.go | 21 +++++++++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go +index 04c6bec2..12f22737 100644 +--- a/vendor/golang.org/x/net/html/escape.go ++++ b/vendor/golang.org/x/net/html/escape.go +@@ -299,7 +299,7 @@ func escape(w writer, s string) error { + case '\r': + esc = " " + default: +- panic("unrecognized escape character") ++ panic("html: unrecognized escape character") + } + s = s[i+1:] + if _, err := w.WriteString(esc); err != nil { +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 979ef17e..4d12a1c1 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { + } + + if n.Type == ElementNode { +- p.oe = append(p.oe, n) ++ p.insertOpenElement(n) ++ } ++} ++ ++func (p *parser) insertOpenElement(n *Node) { ++ p.oe = append(p.oe, n) ++ if len(p.oe) > 512 { ++ panic("html: open stack of elements exceeds 512 nodes") + } + } + +@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { + p.im = inFramesetIM + return true + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: +- p.oe = append(p.oe, p.head) ++ p.insertOpenElement(p.head) + defer p.oe.remove(p.head) + return inHeadIM(p) + case a.Head: +@@ -2320,9 +2327,13 @@ func (p *parser) parseCurrentToken() { + } + } + +-func (p *parser) parse() error { ++func (p *parser) parse() (err error) { ++ defer func() { ++ if panicErr := recover(); panicErr != nil { ++ err = fmt.Errorf("%s", panicErr) ++ } ++ }() + // Iterate until EOF. Any other error will cause an early return. +- var err error + for err != io.EOF { + // CDATA sections are allowed only in foreign content. + n := p.oe.top() +@@ -2351,6 +2362,8 @@ func (p *parser) parse() error { + // s. Conversely, explicit s in r's data can be silently dropped, + // with no corresponding node in the resulting tree. + // ++// Parse will reject HTML that is nested deeper than 512 elements. ++// + // The input is assumed to be UTF-8 encoded. + func Parse(r io.Reader) (*Node, error) { + return ParseWithOptions(r) +-- +2.45.4 + diff --git a/SPECS/caddy/CVE-2025-47913.patch b/SPECS/telegraf/CVE-2025-47913.patch similarity index 68% rename from SPECS/caddy/CVE-2025-47913.patch rename to SPECS/telegraf/CVE-2025-47913.patch index c3c7a2760a..968cdb6cee 100644 --- a/SPECS/caddy/CVE-2025-47913.patch +++ b/SPECS/telegraf/CVE-2025-47913.patch @@ -1,6 +1,6 @@ -From 559e062ce8bfd6a39925294620b50906ca2a6f95 Mon Sep 17 00:00:00 2001 -From: Nicola Murino -Date: Sun, 31 Aug 2025 20:07:32 +0200 +From bfcec8590886ef05b312d567b7079be006ed23c2 Mon Sep 17 00:00:00 2001 +From: AllSpark +Date: Tue, 18 Nov 2025 16:24:10 +0000 Subject: [PATCH] ssh/agent: return an error for unexpected message types Previously, receiving an unexpected message type in response to a key @@ -13,18 +13,14 @@ descriptive error instead of crashing. Fixes golang/go#75178 -Change-Id: Icbc3432adc79fe3c56b1ff23c6724d7a6f710f3a -Reviewed-on: https://go-review.googlesource.com/c/crypto/+/700295 -Reviewed-by: Roland Shoemaker -LUCI-TryBot-Result: Go LUCI -Reviewed-by: Michael Pratt -Reviewed-by: Jakub Ciolek +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: AI Backport of https://github.com/golang/crypto/commit/559e062ce8bfd6a39925294620b50906ca2a6f95.patch --- - vendor/golang.org/x/crypto/ssh/agent/client.go | 6 +++-- - 1 file changed, 6 insertions(+), 2 deletions(-) + vendor/golang.org/x/crypto/ssh/agent/client.go | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vendor/golang.org/x/crypto/ssh/agent/client.go b/vendor/golang.org/x/crypto/ssh/agent/client.go -index 37525e1a18..b357e18b0a 100644 +index fecba8eb..6dc73e09 100644 --- a/vendor/golang.org/x/crypto/ssh/agent/client.go +++ b/vendor/golang.org/x/crypto/ssh/agent/client.go @@ -430,8 +430,9 @@ func (c *client) List() ([]*Key, error) { @@ -49,3 +45,6 @@ index 37525e1a18..b357e18b0a 100644 } // unmarshal parses an agent message in packet, returning the parsed +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2025-58190.patch b/SPECS/telegraf/CVE-2025-58190.patch new file mode 100644 index 0000000000..25b54a8f8f --- /dev/null +++ b/SPECS/telegraf/CVE-2025-58190.patch @@ -0,0 +1,126 @@ +From b55299b135a4734bfb23ba12e71b32e67aa1a79f Mon Sep 17 00:00:00 2001 +From: Roland Shoemaker +Date: Mon, 29 Sep 2025 19:38:24 -0700 +Subject: [PATCH] html: align in row insertion mode with spec + +Update inRowIM to match the HTML specification. This fixes an issue +where a specific HTML document could cause the parser to enter an +infinite loop when trying to parse a and implied next to +each other. + +Fixes CVE-2025-58190 +Fixes golang/go#70179 + +Change-Id: Idcb133c87c7d475cc8c7eb1f1550ea21d8bdddea +Reviewed-on: https://go-review.googlesource.com/c/net/+/709875 +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Damien Neil +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/golang/net/commit/6ec8895aa5f6594da7356da7d341b98133629009.patch +--- + vendor/golang.org/x/net/html/parse.go | 36 ++++++++++++++++++--------- + 1 file changed, 24 insertions(+), 12 deletions(-) + +diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go +index 5b8374bf..979ef17e 100644 +--- a/vendor/golang.org/x/net/html/parse.go ++++ b/vendor/golang.org/x/net/html/parse.go +@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { + return -1 + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) + } + } + switch s { +@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { + return + } + default: +- panic("unreachable") ++ panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) + } + } + } +@@ -1674,7 +1674,7 @@ func inTableBodyIM(p *parser) bool { + return inTableIM(p) + } + +-// Section 12.2.6.4.14. ++// Section 13.2.6.4.14. + func inRowIM(p *parser) bool { + switch p.tok.Type { + case StartTagToken: +@@ -1686,7 +1686,9 @@ func inRowIM(p *parser) bool { + p.im = inCellIM + return true + case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } +@@ -1696,22 +1698,28 @@ func inRowIM(p *parser) bool { + case EndTagToken: + switch p.tok.DataAtom { + case a.Tr: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return true + } + // Ignore the token. + return true + case a.Table: +- if p.popUntil(tableScope, a.Tr) { ++ if p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() + p.im = inTableBodyIM + return false + } + // Ignore the token. + return true + case a.Tbody, a.Tfoot, a.Thead: +- if p.elementInScope(tableScope, p.tok.DataAtom) { +- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) ++ if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { ++ p.clearStackToContext(tableRowScope) ++ p.oe.pop() ++ p.im = inTableBodyIM + return false + } + // Ignore the token. +@@ -2218,16 +2226,20 @@ func parseForeignContent(p *parser) bool { + p.acknowledgeSelfClosingTag() + } + case EndTagToken: ++ if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { ++ p.oe = p.oe[:len(p.oe)-1] ++ return true ++ } + for i := len(p.oe) - 1; i >= 0; i-- { +- if p.oe[i].Namespace == "" { +- return p.im(p) +- } + if strings.EqualFold(p.oe[i].Data, p.tok.Data) { + p.oe = p.oe[:i] ++ return true ++ } ++ if i > 0 && p.oe[i-1].Namespace == "" { + break + } + } +- return true ++ return p.im(p) + default: + // Ignore the token. + } +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2026-2303.patch b/SPECS/telegraf/CVE-2026-2303.patch new file mode 100644 index 0000000000..6992facd11 --- /dev/null +++ b/SPECS/telegraf/CVE-2026-2303.patch @@ -0,0 +1,44 @@ +From fb04605cdd425ccf4dff7f7e18a11a3ad6fecf5d Mon Sep 17 00:00:00 2001 +From: Preston Vasquez +Date: Mon, 26 Jan 2026 09:48:19 -0700 +Subject: [PATCH] =?UTF-8?q?GODRIVER-3770=20Fix=20buffer=20handling=20in=20?= + =?UTF-8?q?GSSAPI=20error=20description=20and=20use=E2=80=A6=20(#2304)?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/mongodb/mongo-go-driver/commit/76ec2daba15f743989040ce2fdaf83f4a3e69bcb.patch +--- + .../x/mongo/driver/auth/internal/gssapi/gss_wrapper.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c b/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c +index 68b72541..e426037e 100644 +--- a/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c ++++ b/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c +@@ -72,8 +72,8 @@ int gssapi_error_desc( + free(*desc); + } + +- *desc = malloc(desc_buffer.length+1); +- memcpy(*desc, desc_buffer.value, desc_buffer.length+1); ++ *desc = calloc(1, desc_buffer.length + 1); ++ memcpy(*desc, desc_buffer.value, desc_buffer.length); + + gss_release_buffer(&local_min_stat, &desc_buffer); + } +@@ -144,8 +144,8 @@ int gssapi_client_username( + return GSSAPI_ERROR; + } + +- *username = malloc(name_buffer.length+1); +- memcpy(*username, name_buffer.value, name_buffer.length+1); ++ *username = calloc(1, name_buffer.length + 1); ++ memcpy(*username, name_buffer.value, name_buffer.length); + + gss_release_buffer(&ignored, &name_buffer); + gss_release_name(&ignored, &name); +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2026-26014.patch b/SPECS/telegraf/CVE-2026-26014.patch new file mode 100644 index 0000000000..084f3cdbc9 --- /dev/null +++ b/SPECS/telegraf/CVE-2026-26014.patch @@ -0,0 +1,63 @@ +From d3834beb654c05530528ff450f2707818edc92fb Mon Sep 17 00:00:00 2001 +From: theodorsm +Date: Thu, 12 Feb 2026 21:13:38 +0100 +Subject: [PATCH] Backport security fix for CVE-2026-26014 + +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/pion/dtls/commit/90e241cfec2985715efdd3d005972847462a67d6.patch +--- + .../github.com/pion/dtls/v2/pkg/crypto/ciphersuite/ccm.go | 6 ++---- + .../github.com/pion/dtls/v2/pkg/crypto/ciphersuite/gcm.go | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/ccm.go b/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/ccm.go +index 24050dc9..1cf6aac0 100644 +--- a/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/ccm.go ++++ b/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/ccm.go +@@ -5,7 +5,6 @@ package ciphersuite + + import ( + "crypto/aes" +- "crypto/rand" + "encoding/binary" + "fmt" + +@@ -66,9 +65,8 @@ func (c *CCM) Encrypt(pkt *recordlayer.RecordLayer, raw []byte) ([]byte, error) + raw = raw[:recordlayer.HeaderSize] + + nonce := append(append([]byte{}, c.localWriteIV[:4]...), make([]byte, 8)...) +- if _, err := rand.Read(nonce[4:]); err != nil { +- return nil, err +- } ++ seq64 := (uint64(pkt.Header.Epoch) << 48) | (pkt.Header.SequenceNumber & 0x0000ffffffffffff) ++ binary.BigEndian.PutUint64(nonce[4:], seq64) + + additionalData := generateAEADAdditionalData(&pkt.Header, len(payload)) + encryptedPayload := c.localCCM.Seal(nil, nonce, payload, additionalData) +diff --git a/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/gcm.go b/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/gcm.go +index c0fd1f76..ce557737 100644 +--- a/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/gcm.go ++++ b/vendor/github.com/pion/dtls/v2/pkg/crypto/ciphersuite/gcm.go +@@ -6,7 +6,6 @@ package ciphersuite + import ( + "crypto/aes" + "crypto/cipher" +- "crypto/rand" + "encoding/binary" + "fmt" + +@@ -60,9 +59,8 @@ func (g *GCM) Encrypt(pkt *recordlayer.RecordLayer, raw []byte) ([]byte, error) + + nonce := make([]byte, gcmNonceLength) + copy(nonce, g.localWriteIV[:4]) +- if _, err := rand.Read(nonce[4:]); err != nil { +- return nil, err +- } ++ seq64 := (uint64(pkt.Header.Epoch) << 48) | (pkt.Header.SequenceNumber & 0x0000ffffffffffff) ++ binary.BigEndian.PutUint64(nonce[4:], seq64) + + additionalData := generateAEADAdditionalData(&pkt.Header, len(payload)) + encryptedPayload := g.localGCM.Seal(nil, nonce, payload, additionalData) +-- +2.45.4 + diff --git a/SPECS/telegraf/CVE-2026-27571.patch b/SPECS/telegraf/CVE-2026-27571.patch new file mode 100644 index 0000000000..4b17e594bd --- /dev/null +++ b/SPECS/telegraf/CVE-2026-27571.patch @@ -0,0 +1,97 @@ +From 5490a512d99134eb2c8cdf0b0735bd72a14e5945 Mon Sep 17 00:00:00 2001 +From: Ivan Kozlovic +Date: Mon, 8 Dec 2025 10:25:20 -0700 +Subject: [PATCH] Websocket: limit buffer size during decompression of a frame + +When the server would decompress a compressed websocket frame, it would +not limit the resulting size of the uncompressed buffer. Once uncompressed +the maximum payload size would still be used to reject messages that +are too big, but the server would have already uncompressed a possibly +very big buffer (if the frame contained highly compressed data). + +This PR limits the number of bytes that are being decompressed using +the maximum payload size as a limit. + +Credit goes to: +Pavel Kohout, Aisle Research (www.aisle.com) for reporting the issue +and providing a path. + +The propose patched as been updated a bit (need to use atomic to +use the connection's max payload value) and some tweaks around +the use of the `io.LimitedReader`. + +Signed-off-by: Ivan Kozlovic +Signed-off-by: Azure Linux Security Servicing Account +Upstream-reference: https://github.com/nats-io/nats-server/commit/f77fb7c4535e6727cc1a2899cd8e6bbdd8ba2017.patch +--- + .../nats-server/v2/server/websocket.go | 26 ++++++++++++++++--- + 1 file changed, 22 insertions(+), 4 deletions(-) + +diff --git a/vendor/github.com/nats-io/nats-server/v2/server/websocket.go b/vendor/github.com/nats-io/nats-server/v2/server/websocket.go +index e026674d..1804b4de 100644 +--- a/vendor/github.com/nats-io/nats-server/v2/server/websocket.go ++++ b/vendor/github.com/nats-io/nats-server/v2/server/websocket.go +@@ -31,6 +31,7 @@ import ( + "strconv" + "strings" + "sync" ++ "sync/atomic" + "time" + "unicode/utf8" + +@@ -203,6 +204,7 @@ func (c *client) wsRead(r *wsReadInfo, ior io.Reader, buf []byte) ([][]byte, err + err error + pos int + max = len(buf) ++ mpay = int(atomic.LoadInt32(&c.mpay)) + ) + for pos != max { + if r.fs { +@@ -316,7 +318,7 @@ func (c *client) wsRead(r *wsReadInfo, ior io.Reader, buf []byte) ([][]byte, err + // When we have the final frame and we have read the full payload, + // we can decompress it. + if r.ff && r.rem == 0 { +- b, err = r.decompress() ++ b, err = r.decompress(mpay) + if err != nil { + return bufs, err + } +@@ -390,7 +392,16 @@ func (r *wsReadInfo) ReadByte() (byte, error) { + return b, nil + } + +-func (r *wsReadInfo) decompress() ([]byte, error) { ++// decompress decompresses the collected buffers. ++// The size of the decompressed buffer will be limited to the `mpay` value. ++// If, while decompressing, the resulting uncompressed buffer exceeds this ++// limit, the decompression stops and an empty buffer and the ErrMaxPayload ++// error are returned. ++func (r *wsReadInfo) decompress(mpay int) ([]byte, error) { ++ // If not limit is specified, use the default maximum payload size. ++ if mpay <= 0 { ++ mpay = MAX_PAYLOAD_SIZE ++ } + r.coff = 0 + // As per https://tools.ietf.org/html/rfc7692#section-7.2.2 + // add 0x00, 0x00, 0xff, 0xff and then a final block so that flate reader +@@ -405,8 +416,15 @@ func (r *wsReadInfo) decompress() ([]byte, error) { + } else { + d.(flate.Resetter).Reset(r, nil) + } +- // This will do the decompression. +- b, err := io.ReadAll(d) ++ // Use a LimitedReader to limit the decompressed size. ++ // We use "limit+1" bytes for "N" so we can detect if the limit is exceeded. ++ lr := io.LimitedReader{R: d, N: int64(mpay + 1)} ++ b, err := io.ReadAll(&lr) ++ if err == nil && len(b) > mpay { ++ // Decompressed data exceeds the maximum payload size. ++ b, err = nil, ErrMaxPayload ++ } ++ lr.R = nil + decompressorPool.Put(d) + // Now reset the compressed buffers list. + r.cbufs = nil +-- +2.45.4 + diff --git a/SPECS/telegraf/telegraf.spec b/SPECS/telegraf/telegraf.spec index 300366a9d9..18867e954a 100644 --- a/SPECS/telegraf/telegraf.spec +++ b/SPECS/telegraf/telegraf.spec @@ -1,7 +1,7 @@ Summary: agent for collecting, processing, aggregating, and writing metrics. Name: telegraf Version: 1.31.0 -Release: 24%{?dist} +Release: 26%{?dist} License: MIT Vendor: Intel Corporation Distribution: Edge Microvisor Toolkit @@ -24,8 +24,17 @@ Patch8: CVE-2025-30204.patch Patch9: CVE-2025-27144.patch Patch10: CVE-2025-30215.patch Patch11: CVE-2025-22872.patch +Patch12: CVE-2025-47913.patch +Patch13: CVE-2025-10543.patch +Patch14: CVE-2026-27571.patch +Patch15: CVE-2025-11065.patch +Patch16: CVE-2025-47911.patch +Patch17: CVE-2025-58190.patch +Patch18: CVE-2026-2303.patch +Patch19: CVE-2026-26014.patch -BuildRequires: golang + +BuildRequires: golang < 1.26.0 BuildRequires: systemd-devel Requires: logrotate Requires: procps-ng @@ -128,6 +137,18 @@ fi %selinux_modules_uninstall -s %{selinuxtype} %{modulename} %changelog +* Mon Feb 23 2026 Lee Chee Yang - 1.31.0-26 +- limit to build with golang < 1.26.0 +- merge from Azure Linux 3.0.20260304-3.0 +- Patch for CVE-2025-10543 +- Patch for CVE-2026-26014, CVE-2026-2303, CVE-2025-58190, CVE-2025-47911 +- Patch for CVE-2025-11065 +- Patch for CVE-2026-27571 + +* Tue Jan 6 2026 Lee Chee Yang - 1.31.0-25 +- merge from Azure Linux 3.0.20251206-3.0 +- Patch for CVE-2025-47913 + * Thu Nov 05 2025 Kishan Mochi - 1.31.0-24 - remove inbm selinux diff --git a/SPECS/tink-worker/tink-worker.signatures.json b/SPECS/tink-worker/tink-worker.signatures.json index 7257417711..3cd2fd80f7 100644 --- a/SPECS/tink-worker/tink-worker.signatures.json +++ b/SPECS/tink-worker/tink-worker.signatures.json @@ -1,7 +1,7 @@ { "Signatures": { - "tink-worker-v1.2.0.tar.gz": "25ea4b5ea8199178c8ae7e5fb0bbe8dca37a4e990f8a56d2a978251921103036", + "tink-worker-v1.2.2.tar.gz": "8c7cf68d0217493acca7dcbde5fbf8205232607808bf3b878e2d6f2b5c0fe8df", "tink-worker.service": "0bd4bdf62618966a33567859e78fd7f88269275a1c730f8c472f4a266443e404", - "tink-worker-v1.2.0-vendor.tar.gz": "21354c817fe32d5cc85847d8c63bf677e0a5819b12a6867a47985f6ec03c004f" + "tink-worker-v1.2.2-vendor.tar.gz": "fe4aac5be48ff1a933e18d58d9cdd2af9fd6cb5365198f59a50bb0a9f8d71807" } } \ No newline at end of file diff --git a/SPECS/tink-worker/tink-worker.spec b/SPECS/tink-worker/tink-worker.spec index 0dde2d15a0..31e4d51add 100644 --- a/SPECS/tink-worker/tink-worker.spec +++ b/SPECS/tink-worker/tink-worker.spec @@ -2,8 +2,8 @@ Summary: In-memory Operating System Installation Environment for Executing Tinkerbell Workflows Name: tink-worker -Version: 1.2.0 -Release: 2%{?dist} +Version: 1.2.2 +Release: 1%{?dist} Distribution: Edge Microvisor Toolkit Vendor: Intel Corporation License: Apache-2.0 @@ -13,6 +13,7 @@ Source1: tink-worker.service Source2: tink-worker-v%{version}-vendor.tar.gz %{?systemd_requires} +BuildRequires: golang < 1.26.0 BuildRequires: golang >= 1.25.7 BuildRequires: systemd-rpm-macros @@ -46,6 +47,10 @@ install -Dp -m0644 %{SOURCE1} %{buildroot}%{_unitdir}/tink-worker.service %{_unitdir}/tink-worker.service %changelog +* Tue Mar 24 2026 Andy - 1.2.2-1 +- Upgrade tink-worker version to 1.2.2 for bug fix +- limit to build with golang version < 1.26.0 + * Tue Feb 24 2026 Andy - 1.2.0-2 - Upgrade golang version to use 1.25.7 diff --git a/azurelinux b/azurelinux index ef7f9eb220..25bde1f998 160000 --- a/azurelinux +++ b/azurelinux @@ -1 +1 @@ -Subproject commit ef7f9eb220f7fb5b05bc2f0c5cf94686f7742bb5 +Subproject commit 25bde1f99877f485a18f9edd996101c0fd393db6 diff --git a/cgmanifest.json b/cgmanifest.json index 42923929ca..98a50fcfb3 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -1247,8 +1247,8 @@ "type": "other", "other": { "name": "booth", - "version": "1.0", - "downloadUrl": "https://github.com/ClusterLabs/booth/archive/5d837d2b5bf1c240a5f1c5efe4e8d79f55727cca/booth-5d837d2.tar.gz" + "version": "1.2", + "downloadUrl": "https://github.com/ClusterLabs/booth/releases/download/v1.2/booth-1.2.tar.gz" } } }, @@ -1417,8 +1417,8 @@ "type": "other", "other": { "name": "caddy", - "version": "2.9.1", - "downloadUrl": "https://github.com/caddyserver/caddy/archive/v2.9.1/caddy-2.9.1.tar.gz" + "version": "2.11.2", + "downloadUrl": "https://github.com/caddyserver/caddy/archive/v2.11.2/caddy-2.11.2.tar.gz" } } }, @@ -1857,8 +1857,8 @@ "type": "other", "other": { "name": "cloud-hypervisor", - "version": "41.0.139", - "downloadUrl": "https://github.com/microsoft/cloud-hypervisor/archive/refs/tags/msft/v41.0.139.tar.gz" + "version": "48.0.246", + "downloadUrl": "https://github.com/microsoft/cloud-hypervisor/archive/refs/tags/msft/v48.0.246.tar.gz" } } }, @@ -2117,8 +2117,8 @@ "type": "other", "other": { "name": "containerized-data-importer", - "version": "1.57.0", - "downloadUrl": "https://github.com/kubevirt/containerized-data-importer/archive/refs/tags/v1.57.0.tar.gz" + "version": "1.62.0", + "downloadUrl": "https://github.com/kubevirt/containerized-data-importer/archive/refs/tags/v1.62.0.tar.gz" } } }, @@ -2297,8 +2297,8 @@ "type": "other", "other": { "name": "crash", - "version": "8.0.4", - "downloadUrl": "https://github.com/crash-utility/crash/archive/8.0.4.tar.gz" + "version": "9.0.0", + "downloadUrl": "https://github.com/crash-utility/crash/archive/9.0.0.tar.gz" } } }, @@ -2322,6 +2322,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "crun", + "version": "1.24", + "downloadUrl": "https://github.com/containers/crun/releases/download/1.24/crun-1.24.tar.gz" + } + } + }, { "component": { "type": "other", @@ -2357,8 +2367,8 @@ "type": "other", "other": { "name": "criu", - "version": "3.15", - "downloadUrl": "http://download.openvz.org/criu/criu-3.15.tar.bz2" + "version": "4.1.1", + "downloadUrl": "https://github.com/checkpoint-restore/criu/archive/v4.1.1/criu-4.1.1.tar.gz" } } }, @@ -3163,6 +3173,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "ed25519-java", + "version": "0.3.0", + "downloadUrl": "https://github.com/str4d/ed25519-java/archive/v0.3.0/ed25519-java-0.3.0.tar.gz" + } + } + }, { "component": { "type": "other", @@ -4580,8 +4600,8 @@ "type": "other", "other": { "name": "gnome-desktop-testing", - "version": "2018.1", - "downloadUrl": "https://gitlab.gnome.org/GNOME/gnome-desktop-testing/-/archive/v2018.1/gnome-desktop-testing-v2018.1.tar.gz" + "version": "2021.1", + "downloadUrl": "https://gitlab.gnome.org/GNOME/gnome-desktop-testing/-/archive/v2021.1/gnome-desktop-testing-v2021.1.tar.gz" } } }, @@ -4670,8 +4690,8 @@ "type": "other", "other": { "name": "gnupg2", - "version": "2.4.7", - "downloadUrl": "https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.4.7.tar.bz2" + "version": "2.4.9", + "downloadUrl": "https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.4.9.tar.bz2" } } }, @@ -5340,8 +5360,8 @@ "type": "other", "other": { "name": "hdf5", - "version": "1.14.4.3", - "downloadUrl": "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.4/src/hdf5-1.14.4-3.tar.gz" + "version": "1.14.6", + "downloadUrl": "https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_6/downloads/hdf5-1.14.6.tar.gz" } } }, @@ -5420,8 +5440,8 @@ "type": "other", "other": { "name": "highlight", - "version": "3.54", - "downloadUrl": "http://www.andre-simon.de/zip/highlight-3.54.tar.bz2" + "version": "4.18", + "downloadUrl": "https://gitlab.com/saalen/highlight/-/archive/v4.18/highlight-v4.18.tar.bz2" } } }, @@ -5510,8 +5530,8 @@ "type": "other", "other": { "name": "httpd", - "version": "2.4.65", - "downloadUrl": "https://archive.apache.org/dist/httpd/httpd-2.4.65.tar.bz2" + "version": "2.4.66", + "downloadUrl": "https://archive.apache.org/dist/httpd/httpd-2.4.66.tar.bz2" } } }, @@ -7140,8 +7160,8 @@ "type": "other", "other": { "name": "ibarr", - "version": "0.1.3", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/ibarr-0.1.3.tar.gz" + "version": "0.1.5", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/ibarr-0.1.5.tar.gz" } } }, @@ -7150,8 +7170,8 @@ "type": "other", "other": { "name": "ibsim", - "version": "0.12", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/ibsim-0.12.tar.gz" + "version": "0.12.1", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/ibsim-0.12.1.tar.gz" } } }, @@ -7200,8 +7220,8 @@ "type": "other", "other": { "name": "ibus-libzhuyin", - "version": "1.9.1", - "downloadUrl": "http://downloads.sourceforge.net/libzhuyin/ibus-libzhuyin/ibus-libzhuyin-1.9.1.tar.gz" + "version": "1.10.4", + "downloadUrl": "https://downloads.sourceforge.net/libzhuyin/ibus-libzhuyin/ibus-libzhuyin-1.10.4.tar.gz" } } }, @@ -7240,8 +7260,8 @@ "type": "other", "other": { "name": "ibus-table", - "version": "1.12.4", - "downloadUrl": "https://github.com/mike-fabian/ibus-table/archive/refs/tags/1.12.4.tar.gz" + "version": "1.17.16", + "downloadUrl": "https://github.com/mike-fabian/ibus-table/releases/download/1.17.16/ibus-table-1.17.16.tar.gz" } } }, @@ -7836,6 +7856,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "jbcrypt", + "version": "1.0.2", + "downloadUrl": "https://github.com/kruton/jbcrypt/archive/refs/tags/1.0.2.tar.gz" + } + } + }, { "component": { "type": "other", @@ -7851,8 +7881,8 @@ "type": "other", "other": { "name": "iser", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/iser-24.10.tgz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/iser-25.07.tgz" } } }, @@ -7861,8 +7891,8 @@ "type": "other", "other": { "name": "isert", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/isert-24.10.tgz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/isert-25.07.tgz" } } }, @@ -8331,8 +8361,8 @@ "type": "other", "other": { "name": "jtidy", - "version": "8.0", - "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/jtidy-r813.tar.bz2" + "version": "1.0.4", + "downloadUrl": "https://github.com/jtidy/jtidy/archive/refs/tags/jtidy-1.0.4.tar.gz" } } }, @@ -8831,8 +8861,8 @@ "type": "other", "other": { "name": "lasso", - "version": "2.8.0", - "downloadUrl": "http://dev.entrouvert.org/lasso/lasso-2.8.0.tar.gz" + "version": "2.9.0", + "downloadUrl": "https://git.entrouvert.org/entrouvert/lasso/archive/v2.9.0.tar.gz" } } }, @@ -10931,8 +10961,8 @@ "type": "other", "other": { "name": "libpcap", - "version": "1.10.5", - "downloadUrl": "https://github.com/the-tcpdump-group/libpcap/archive/libpcap-1.10.5.tar.gz" + "version": "1.10.6", + "downloadUrl": "https://github.com/the-tcpdump-group/libpcap/archive/libpcap-1.10.6.tar.gz" } } }, @@ -10971,8 +11001,8 @@ "type": "other", "other": { "name": "libpinyin", - "version": "2.9.92", - "downloadUrl": "https://downloads.sourceforge.net/libpinyin/libpinyin/libpinyin-2.9.92.tar.gz" + "version": "2.10.3", + "downloadUrl": "https://downloads.sourceforge.net/libpinyin/libpinyin/libpinyin-2.10.3.tar.gz" } } }, @@ -11181,8 +11211,8 @@ "type": "other", "other": { "name": "libreport", - "version": "2.13.1", - "downloadUrl": "https://github.com/abrt/libreport/archive/2.13.1/libreport-2.13.1.tar.gz" + "version": "2.17.15", + "downloadUrl": "https://github.com/abrt/libreport/archive/2.17.15/libreport-2.17.15.tar.gz" } } }, @@ -11412,7 +11442,7 @@ "other": { "name": "libsodium", "version": "1.0.19", - "downloadUrl": "https://download.libsodium.org/libsodium/releases/libsodium-1.0.19.tar.gz" + "downloadUrl": "https://github.com/jedisct1/libsodium/archive/refs/tags/1.0.19-FINAL.tar.gz" } } }, @@ -11716,6 +11746,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "libvma", + "version": "9.8.72", + "downloadUrl": "https://github.com/Mellanox/libvma/archive/9.8.72/libvma-9.8.72.tar.gz" + } + } + }, { "component": { "type": "other", @@ -11871,8 +11911,8 @@ "type": "other", "other": { "name": "libvirt", - "version": "10.0.0", - "downloadUrl": "https://download.libvirt.org/libvirt-10.0.0.tar.xz" + "version": "10.10.0", + "downloadUrl": "https://download.libvirt.org/libvirt-10.10.0.tar.xz" } } }, @@ -12326,6 +12366,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "llhttp", + "version": "9.3.0", + "downloadUrl": "https://github.com/nodejs/llhttp/archive/refs/tags/release/v9.3.0/llhttp-release-v9.3.0.tar.gz" + } + } + }, { "component": { "type": "other", @@ -13241,8 +13291,8 @@ "type": "other", "other": { "name": "mariadb", - "version": "10.11.11", - "downloadUrl": "https://downloads.mariadb.org/interstitial/mariadb-10.11.11/source/mariadb-10.11.11.tar.gz" + "version": "10.11.15", + "downloadUrl": "https://downloads.mariadb.org/interstitial/mariadb-10.11.15/source/mariadb-10.11.15.tar.gz" } } }, @@ -13561,8 +13611,8 @@ "type": "other", "other": { "name": "mft_kernel", - "version": "4.30.0", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/kernel-mft-4.30.0.tgz" + "version": "4.33.0", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/kernel-mft-4.33.0.tgz" } } }, @@ -13652,8 +13702,8 @@ "type": "other", "other": { "name": "mlnx-ethtool", - "version": "6.9", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/mlnx-ethtool-6.9.tar.gz" + "version": "6.14", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/mlnx-ethtool-6.14.tar.gz" } } }, @@ -13662,8 +13712,8 @@ "type": "other", "other": { "name": "mlnx-iproute2", - "version": "6.10.0", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/mlnx-iproute2-6.10.0.tar.gz" + "version": "6.15.0", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/mlnx-iproute2-6.15.0.tar.gz" } } }, @@ -13672,8 +13722,8 @@ "type": "other", "other": { "name": "mlnx-nfsrdma", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/mlnx-nfsrdma-24.10.tgz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/mlnx-nfsrdma-25.07.tgz" } } }, @@ -13682,8 +13732,8 @@ "type": "other", "other": { "name": "mlnx-ofa_kernel", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/mlnx-ofa_kernel-24.10.tgz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/mlnx-ofa_kernel-25.07.tgz" } } }, @@ -13692,8 +13742,8 @@ "type": "other", "other": { "name": "mlnx-tools", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/mlnx-tools-24.10.tar.gz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/mlnx-tools-25.07.tar.gz" } } }, @@ -14102,8 +14152,8 @@ "type": "other", "other": { "name": "munge", - "version": "0.5.15", - "downloadUrl": "https://github.com/dun/munge/releases/download/munge-0.5.15/munge-0.5.15.tar.xz" + "version": "0.5.18", + "downloadUrl": "https://github.com/dun/munge/releases/download/munge-0.5.18/munge-0.5.18.tar.xz" } } }, @@ -14417,6 +14467,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "nodejs24", + "version": "24.13.0", + "downloadUrl": "https://nodejs.org/download/release/v24.13.0/node-v24.13.0.tar.xz" + } + } + }, { "component": { "type": "other", @@ -14472,8 +14532,8 @@ "type": "other", "other": { "name": "net-snmp", - "version": "5.9.4", - "downloadUrl": "https://sourceforge.net/projects/net-snmp/files/net-snmp/5.9.4/net-snmp-5.9.4.tar.gz" + "version": "5.9.5.2", + "downloadUrl": "https://sourceforge.net/projects/net-snmp/files/net-snmp/5.9.5.2/net-snmp-5.9.5.2.tar.gz" } } }, @@ -14632,8 +14692,8 @@ "type": "other", "other": { "name": "nginx", - "version": "1.25.4", - "downloadUrl": "https://nginx.org/download/nginx-1.25.4.tar.gz" + "version": "1.28.2", + "downloadUrl": "https://nginx.org/download/nginx-1.28.2.tar.gz" } } }, @@ -15557,6 +15617,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "openssl-fips-provider", + "version": "3.1.2", + "downloadUrl": "https://github.com/openssl/openssl/releases/download/openssl-3.1.2/openssl-3.1.2.tar.gz" + } + } + }, { "component": { "type": "other", @@ -15603,8 +15673,8 @@ "type": "other", "other": { "name": "ofed-docs", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/ofed-docs-24.10.tar.gz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/ofed-docs-25.07.tar.gz" } } }, @@ -15613,8 +15683,8 @@ "type": "other", "other": { "name": "ofed-scripts", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/ofed-scripts-24.10.tar.gz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/ofed-scripts-25.07.tar.gz" } } }, @@ -16063,8 +16133,8 @@ "type": "other", "other": { "name": "osgi-core", - "version": "7.0.0", - "downloadUrl": "https://repo1.maven.org/maven2/org/osgi/osgi.core/7.0.0/osgi.core-7.0.0-sources.jar" + "version": "8.0.0", + "downloadUrl": "https://repo1.maven.org/maven2/org/osgi/osgi.core/8.0.0/osgi.core-8.0.0-sources.jar" } } }, @@ -16143,8 +16213,8 @@ "type": "other", "other": { "name": "pacemaker", - "version": "2.1.5", - "downloadUrl": "https://github.com/ClusterLabs/pacemaker/archive/refs/tags/Pacemaker-2.1.5.tar.gz" + "version": "3.0.1", + "downloadUrl": "https://github.com/ClusterLabs/pacemaker/archive/refs/tags/Pacemaker-3.0.1.tar.gz" } } }, @@ -16413,8 +16483,8 @@ "type": "other", "other": { "name": "perftest", - "version": "24.10.0", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/perftest-24.10.0-0.65.g9093bae.tar.gz" + "version": "25.07.0", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/perftest-25.07.0-0.104.g0c03534.tar.gz" } } }, @@ -16473,8 +16543,8 @@ "type": "other", "other": { "name": "perl-Alien-pkgconf", - "version": "0.20", - "downloadUrl": "https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-pkgconf-0.20.tar.gz" + "version": "0.21", + "downloadUrl": "https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-pkgconf-0.21.tar.gz" } } }, @@ -17943,8 +18013,8 @@ "type": "other", "other": { "name": "perl-FFI-CheckLib", - "version": "0.26", - "downloadUrl": "https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/FFI-CheckLib-0.26.tar.gz" + "version": "0.31", + "downloadUrl": "https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/FFI-CheckLib-0.31.tar.gz" } } }, @@ -19663,8 +19733,8 @@ "type": "other", "other": { "name": "perl-Params-ValidationCompiler", - "version": "0.30", - "downloadUrl": "https://cpan.metacpan.org/modules/by-module/Params/Params-ValidationCompiler-0.30.tar.gz" + "version": "0.31", + "downloadUrl": "https://cpan.metacpan.org/modules/by-module/Params/Params-ValidationCompiler-0.31.tar.gz" } } }, @@ -20033,8 +20103,8 @@ "type": "other", "other": { "name": "perl-Return-MultiLevel", - "version": "0.05", - "downloadUrl": "https://cpan.metacpan.org/authors/id/M/MA/MAUKE/Return-MultiLevel-0.05.tar.gz" + "version": "0.08", + "downloadUrl": "https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Return-MultiLevel-0.08.tar.gz" } } }, @@ -21513,8 +21583,8 @@ "type": "other", "other": { "name": "pgbouncer", - "version": "1.24.1", - "downloadUrl": "https://pgbouncer.github.io/downloads/files/1.24.1/pgbouncer-1.24.1.tar.gz" + "version": "1.25.1", + "downloadUrl": "https://pgbouncer.github.io/downloads/files/1.25.1/pgbouncer-1.25.1.tar.gz" } } }, @@ -21533,8 +21603,8 @@ "type": "other", "other": { "name": "php", - "version": "8.3.23", - "downloadUrl": "https://www.php.net/distributions/php-8.3.23.tar.xz" + "version": "8.3.29", + "downloadUrl": "https://www.php.net/distributions/php-8.3.29.tar.xz" } } }, @@ -23013,8 +23083,8 @@ "type": "other", "other": { "name": "python-debtcollector", - "version": "1.22.0", - "downloadUrl": "https://tarballs.openstack.org/debtcollector/debtcollector-1.22.0.tar.gz" + "version": "3.0.0", + "downloadUrl": "https://tarballs.openstack.org/debtcollector/debtcollector-3.0.0.tar.gz" } } }, @@ -23253,8 +23323,8 @@ "type": "other", "other": { "name": "python-filelock", - "version": "3.14.0", - "downloadUrl": "https://files.pythonhosted.org/packages/source/f/filelock/filelock-3.14.0.tar.gz" + "version": "3.20.3", + "downloadUrl": "https://files.pythonhosted.org/packages/source/f/filelock/filelock-3.20.3.tar.gz" } } }, @@ -23273,8 +23343,8 @@ "type": "other", "other": { "name": "python-flake8", - "version": "3.7.7", - "downloadUrl": "https://files.pythonhosted.org/packages/source/f/flake8/flake8-3.7.7.tar.gz" + "version": "7.3.0", + "downloadUrl": "https://github.com/PyCQA/flake8/archive/refs/tags/7.3.0.tar.gz" } } }, @@ -24343,8 +24413,8 @@ "type": "other", "other": { "name": "python-oslo-i18n", - "version": "5.1.0", - "downloadUrl": "https://tarballs.openstack.org/oslo.i18n/oslo.i18n-5.1.0.tar.gz" + "version": "6.7.1", + "downloadUrl": "https://files.pythonhosted.org/packages/source/o/oslo_i18n/oslo_i18n-6.7.1.tar.gz" } } }, @@ -24608,16 +24678,6 @@ } } }, - { - "component": { - "type": "other", - "other": { - "name": "python3-pycares", - "version": "4.5.0", - "downloadUrl": "https://github.com/saghul/pycares/archive/refs/tags/v4.5.0.tar.gz" - } - } - }, { "component": { "type": "other", @@ -24748,6 +24808,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "python-scikit-build-core", + "version": "0.11.5", + "downloadUrl": "https://files.pythonhosted.org/packages/source/s/scikit_build_core/scikit_build_core-0.11.5.tar.gz" + } + } + }, { "component": { "type": "other", @@ -24823,8 +24893,8 @@ "type": "other", "other": { "name": "python-pytest-flake8", - "version": "1.0.4", - "downloadUrl": "https://files.pythonhosted.org/packages/source/p/pytest-flake8/pytest-flake8-1.0.4.tar.gz" + "version": "1.3.0", + "downloadUrl": "https://github.com/coherent-oss/pytest-flake8/archive/refs/tags/v1.3.0.tar.gz" } } }, @@ -25208,6 +25278,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "python-toml", + "version": "0.10.2", + "downloadUrl": "https://files.pythonhosted.org/packages/source/t/toml/toml-0.10.2.tar.gz" + } + } + }, { "component": { "type": "other", @@ -25668,6 +25748,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "python3-pycares", + "version": "4.5.0", + "downloadUrl": "https://github.com/saghul/pycares/archive/refs/tags/v4.5.0.tar.gz" + } + } + }, { "component": { "type": "other", @@ -25943,8 +26033,8 @@ "type": "other", "other": { "name": "python-virtualenv", - "version": "20.25.0", - "downloadUrl": "https://files.pythonhosted.org/packages/94/d7/adb787076e65dc99ef057e0118e25becf80dd05233ef4c86f07aa35f6492/virtualenv-20.25.0.tar.gz" + "version": "20.36.1", + "downloadUrl": "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz" } } }, @@ -26143,8 +26233,8 @@ "type": "other", "other": { "name": "python-zmq", - "version": "18.1.0", - "downloadUrl": "https://github.com/zeromq/pyzmq/archive/v18.1.0.tar.gz" + "version": "27.1.0", + "downloadUrl": "https://github.com/zeromq/pyzmq/archive/refs/tags/v27.1.0.tar.gz" } } }, @@ -26352,9 +26442,9 @@ "component": { "type": "other", "other": { - "name": "qt5-qtconnectivity", - "version": "5.14.2", - "downloadUrl": "https://download.qt.io/official_releases/qt/5.14/5.14.2/submodules/qtconnectivity-everywhere-src-5.14.2.tar.xz" + "name": "qt6-qtconnectivity", + "version": "6.5.7", + "downloadUrl": "https://download.qt.io/official_releases/qt/6.5/6.5.7/src/submodules/qtconnectivity-everywhere-opensource-src-6.5.7.tar.xz" } } }, @@ -26362,9 +26452,9 @@ "component": { "type": "other", "other": { - "name": "qt5-qtsensors", - "version": "5.14.2", - "downloadUrl": "https://download.qt.io/official_releases/qt/5.14/5.14.2/submodules/qtsensors-everywhere-src-5.14.2.tar.xz" + "name": "qt6-qtsensors", + "version": "6.5.7", + "downloadUrl": "https://download.qt.io/official_releases/qt/6.5/6.5.7/src/submodules/qtsensors-everywhere-opensource-src-6.5.7.tar.xz" } } }, @@ -26372,9 +26462,9 @@ "component": { "type": "other", "other": { - "name": "qt5-qtserialport", - "version": "5.15.9", - "downloadUrl": "https://download.qt.io/official_releases/qt/5.15/5.15.9/submodules/qtserialport-everywhere-opensource-src-5.15.9.tar.xz" + "name": "qt6-qtserialport", + "version": "6.5.7", + "downloadUrl": "https://download.qt.io/official_releases/qt/6.5/6.5.7/src/submodules/qtserialport-everywhere-opensource-src-6.5.7.tar.xz" } } }, @@ -26424,7 +26514,7 @@ "other": { "name": "quagga", "version": "1.2.4", - "downloadUrl": "http://download.savannah.gnu.org/releases/quagga/quagga-1.2.4.tar.gz" + "downloadUrl": "https://github.com/quagga/quagga/releases/download/quagga-1.2.4/quagga-1.2.4.tar.gz" } } }, @@ -26563,8 +26653,8 @@ "type": "other", "other": { "name": "rdma-core", - "version": "55.0", - "downloadUrl": "https://github.com/linux-rdma/rdma-core/releases/download/v55.0/rdma-core-55.0.tar.gz" + "version": "59.0", + "downloadUrl": "https://github.com/linux-rdma/rdma-core/releases/download/v59.0/rdma-core-59.0.tar.gz" } } }, @@ -26724,8 +26814,8 @@ "type": "other", "other": { "name": "rhino", - "version": "1.7.7.1", - "downloadUrl": "https://github.com/mozilla/rhino/archive/Rhino1_7_7_1_RELEASE.tar.gz" + "version": "1.7.15.1", + "downloadUrl": "https://github.com/mozilla/rhino/archive/Rhino1_7_15_1_Release.tar.gz" } } }, @@ -26894,8 +26984,8 @@ "type": "other", "other": { "name": "rshim", - "version": "2.1.5", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/rshim-2.1.5.tar.gz" + "version": "2.4.4", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/rshim-2.4.4.tar.gz" } } }, @@ -28014,8 +28104,8 @@ "type": "other", "other": { "name": "rust", - "version": "1.86.0", - "downloadUrl": "https://static.rust-lang.org/dist/rustc-1.86.0-src.tar.xz" + "version": "1.90.0", + "downloadUrl": "https://static.rust-lang.org/dist/rustc-1.90.0-src.tar.xz" } } }, @@ -28084,8 +28174,8 @@ "type": "other", "other": { "name": "satyr", - "version": "0.30", - "downloadUrl": "https://github.com/abrt/satyr/archive/0.30/satyr-0.30.tar.gz" + "version": "0.43", + "downloadUrl": "https://github.com/abrt/satyr/releases/download/0.43/satyr-0.43.tar.gz" } } }, @@ -29036,8 +29126,8 @@ "type": "other", "other": { "name": "srp", - "version": "24.10", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/srp-24.10.tgz" + "version": "25.07", + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/srp-25.07.tgz" } } }, @@ -29176,8 +29266,8 @@ "type": "other", "other": { "name": "suitesparse", - "version": "5.4.0", - "downloadUrl": "https://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-5.4.0.tar.gz" + "version": "7.11.0", + "downloadUrl": "https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v7.11.0/suitesparse-7.11.0.tar.gz" } } }, @@ -29261,6 +29351,16 @@ } } }, + { + "component": { + "type": "other", + "other": { + "name": "trident", + "version": "0.21.0", + "downloadUrl": "https://github.com/microsoft/trident/archive/refs/tags/v0.21.0.tar.gz" + } + } + }, { "component": { "type": "other", @@ -29626,8 +29726,8 @@ "type": "other", "other": { "name": "tink-worker", - "version": "1.2.0", - "downloadUrl": "https://github.com/open-edge-platform/infra-onboarding/archive/refs/tags/tink-worker/v1.2.0.tar.gz" + "version": "1.2.2", + "downloadUrl": "https://github.com/open-edge-platform/infra-onboarding/archive/refs/tags/tink-worker/v1.2.2.tar.gz" } } }, @@ -29846,8 +29946,8 @@ "type": "other", "other": { "name": "trilead-ssh2", - "version": "217.8", - "downloadUrl": "https://github.com/jenkinsci/trilead-ssh2/archive/trilead-ssh2-build217-jenkins-8.tar.gz" + "version": "217.371.vc1d30dc5a_b_32", + "downloadUrl": "https://github.com/jenkinsci/trilead-ssh2/archive/refs/tags/build-217-jenkins-371.vc1d30dc5a_b_32.tar.gz" } } }, @@ -29976,8 +30076,8 @@ "type": "other", "other": { "name": "ucx", - "version": "1.18.0", - "downloadUrl": "https://github.com/openucx/ucx/releases/download/v1.18.0-rc3/ucx-1.18.0.tar.gz" + "version": "1.19.0", + "downloadUrl": "https://github.com/openucx/ucx/releases/download/v1.19.0/ucx-1.19.0.tar.gz" } } }, @@ -30406,8 +30506,8 @@ "type": "other", "other": { "name": "vim", - "version": "9.1.1616", - "downloadUrl": "https://github.com/vim/vim/archive/v9.1.1616.tar.gz" + "version": "9.2.0088", + "downloadUrl": "https://github.com/vim/vim/archive/v9.2.0088.tar.gz" } } }, @@ -30817,8 +30917,8 @@ "type": "other", "other": { "name": "xbean", - "version": "4.18", - "downloadUrl": "http://repo2.maven.org/maven2/org/apache/xbean/xbean/4.18/xbean-4.18-source-release.zip" + "version": "4.24", + "downloadUrl": "https://repo1.maven.org/maven2/org/apache/xbean/xbean/4.24/xbean-4.24-source-release.zip" } } }, @@ -31287,8 +31387,8 @@ "type": "other", "other": { "name": "xmldb-api", - "version": "0.1", - "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/xmldb-xapi-20041010-src.tar.bz2" + "version": "1.7.0", + "downloadUrl": "https://github.com/xmldb-org/xmldb-api/archive/xmldb-api-1.7.tar.gz" } } }, @@ -31489,7 +31589,7 @@ "other": { "name": "xpmem", "version": "2.7.4", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/xpmem-2.7.4.tar.gz" + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/xpmem-2.7.4.tar.gz" } } }, @@ -31499,7 +31599,7 @@ "other": { "name": "xpmem-lib", "version": "2.7", - "downloadUrl": "https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-0.7.0.0/SRPMS/xpmem-lib-2.7.tar.gz" + "downloadUrl": "https://azurelinuxsrcstorage.blob.core.windows.net/sources/core/xpmem-lib-2.7.tar.gz" } } }, @@ -31909,8 +32009,8 @@ "type": "other", "other": { "name": "zlib", - "version": "1.3.1", - "downloadUrl": "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.xz" + "version": "1.3.2", + "downloadUrl": "https://github.com/madler/zlib/releases/download/v1.3.2/zlib-1.3.2.tar.xz" } } }, @@ -31956,4 +32056,4 @@ } ], "Version": 1 -} +} \ No newline at end of file diff --git a/docs/developer-guide/assets/sol-bios-settings.png b/docs/developer-guide/assets/sol-bios-settings.png new file mode 100644 index 0000000000..2ac4c2eaf5 Binary files /dev/null and b/docs/developer-guide/assets/sol-bios-settings.png differ diff --git a/docs/developer-guide/assets/sol-ipmi-xeon-bmc.png b/docs/developer-guide/assets/sol-ipmi-xeon-bmc.png new file mode 100644 index 0000000000..b492371d9d Binary files /dev/null and b/docs/developer-guide/assets/sol-ipmi-xeon-bmc.png differ diff --git a/docs/developer-guide/assets/sol-system-status.png b/docs/developer-guide/assets/sol-system-status.png new file mode 100644 index 0000000000..6717b45ede Binary files /dev/null and b/docs/developer-guide/assets/sol-system-status.png differ diff --git a/docs/developer-guide/assets/sol-verify-configuration.png b/docs/developer-guide/assets/sol-verify-configuration.png new file mode 100644 index 0000000000..60da8fe9fd Binary files /dev/null and b/docs/developer-guide/assets/sol-verify-configuration.png differ diff --git a/docs/developer-guide/assets/sol-xeon-bmc.png b/docs/developer-guide/assets/sol-xeon-bmc.png new file mode 100644 index 0000000000..8cdc23d401 Binary files /dev/null and b/docs/developer-guide/assets/sol-xeon-bmc.png differ diff --git a/docs/developer-guide/get-started/deployment/emt-serial-over-lan.md b/docs/developer-guide/get-started/deployment/emt-serial-over-lan.md new file mode 100644 index 0000000000..9ac94dda57 --- /dev/null +++ b/docs/developer-guide/get-started/deployment/emt-serial-over-lan.md @@ -0,0 +1,183 @@ +# Deploy Edge Microvisor Toolkit via Serial over LAN (SOL) + +In this article, you will learn how to deploy Edge Microvisor Toolkit using the +Serial over LAN (SOL) method. + +Traditional methods such as KVM consoles, physical serial connections, or SSH +have been commonly used to access and manage servers. However, they have certain +limitations, especially during system boot or failure conditions. SSH depends +on the operating system and network services being fully operational, while KVM +requires graphical access, and physical serial connections often require direct +cabling to server. + +Serial Over LAN (SOL) addresses these limitations by redirecting the server’s +serial console input and output over a network connection through the management +controller, allowing administrators to remotely access the server’s text-based +console, including BIOS and boot messages, even when the operating system is not +running. + +This enables remote troubleshooting and management without requiring physical +access or additional serial cabling. + +Testing Serial over LAN (SOL) in a BMC (Baseboard Management Controller) +environment usually involves verifying that the host serial console is redirected +through the BMC network interface and accessible remotely via IPMI + +Below you will find the necessary configuration for SOL to work. + +## Prerequisites + +- The BMC IP address configured. +- A Management LAN cable connected to the BMC port. +- ipmitool installed on the client system. +- The host serial console redirection enabled. + +## Configure BIOS Settings on Server + +Configure BIOS for serial redirection. Navigate to +**System setup -> System BIOS -> Serial Communication** + +![BIOS Settings](../../assets/sol-bios-settings.png) + +## Configure SOL Settings on Xeon BMC + +Open WebUI of BMC through BMCIP. Navigate to +**iDRAC Settings -> Connectivity -> Serial Over LAN**. + +![Xeon BMC Settings](../../assets/sol-xeon-bmc.png) + +## Remote Client (ipmi) settings in XEON BMC + +Configure the IPMI settings. Navigate to +**iDRAC Settings -> Connectivity -> Network -> IPMI Settings**. + +![Xeon BMC Settings](../../assets/sol-ipmi-xeon-bmc.png) + +## Set up the remote client + +> **Note:** You should run all IPMI commands on the client machine. + +To set up the remote client machine, you need to install ipmi: + +```bash +sudo apt install ipmi +``` + +## Manage SOL (Serial Over LAN) session + +1. Start a SOL session. + + ```bash + ipmitool -I lanplus -H -U admin -P password sol activate + ``` + +2. Stop the SOL session. + + To stop the active SOL session, run the following command: + + ```bash + ~. + ``` + + You can also stop it from another shell on the client machine by running: + + ```bash + ipmitool -I lanplus -H -U admin -P password sol deactivate + ``` + +3. Check the SOL configuration. + + ```bash + ipmitool -I lanplus -H -U admin -P password sol info + ``` + + To learn more about ipmitool commands, refer to the guides at + [linux.die.net](https://linux.die.net/man/1/ipmitool) or + [ibm.com](https://www.ibm.com/docs/en/power9/0000-REF?topic=POWER9_REF/p9eih/p9eih_ipmi_commands.html). + +## Verify SOL configuration + +> **Note:** +> The settings have been configured and tested on the DELL R760 server. +> They have been executed from a remote client and verified with the +> latest EMT 3.0 ISO image. + +1. To verify the configuration, run the following command: + + ```bash + ipmitool -I lanplus -H -U admin -P password sol info + ``` + + ![Verify SOL Settings](../../assets/sol-verify-configuration.png) + +2. For system status information, run: + + ```bash + ipmitool -I lanplus -H 10.47.99.78 -U root -P Password chassis status + ``` + + ![System Status Information](../../assets/sol-system-status.png) + +3. Activate the SOL session on the client and reboot the server. + + ```bash + vm@edgebuildvm2:~$ ipmitool -I lanplus -H 10.47.99.78 -U root -P Password sol activate + ``` + + Output: + + ```text + [SOL Session operational. Use ~? for help] + KEY MAPPING FOR CONSOLE REDIRECTION: + + Use the <1> key sequence for + Use the <2> key sequence for + Use the <3> key sequence for + Use the <0> key sequence for + Use the key sequence for + Use the <@> key sequence for + + Use the key sequence for + Use the key sequence for + Use the key sequence for + Use the key sequence for + + Use the key sequence for , where x is any letter + key, and X is the upper case of that key + + Use the key sequence for + + Press the spacebar to pause... + Initializing PCIe, USB, and Video... Done + PowerEdge R760 + BIOS Version: 2.2.7 + Console Redirection Enabled Requested by iDRAC + + F2 = System Setup + F10 = Lifecycle Controller (Config + iDRAC, Update FW, Install OS) + F11 = Boot Manager + F12 = PXE Boot + iDRAC IPV4: 10.47.99.78 [Dedicated] + Initializing Firmware Interfaces... + + Enumerating Boot options... + Enumerating Boot options... Done + Loading Lifecycle Controller Drivers... + Loading Lifecycle Controller Drivers...Done + Lifecycle Controller: Collecting System Inventory... + + iDRAC IPV4: 10.47.99.78 [Dedicated] + Lifecycle Controller: Done + Booting... + Booting from PCIe SSD in Slot 23 in Bay 1: Edge Microvisor Toolkit + Welcome to GRUB! + Booting `EdgeMicrovisorToolkit GNU/Linux, with Linux 6.12.67-1.emt3' + Loading Linux 6.12.67-1.emt3 ... + Loading initial ramdisk ... + ``` + +4. Exit the SOL session. + + Use `~.` in the current session, or `ipmitool sol deactivate` + from another active session. diff --git a/docs/developer-guide/get-started/emt-installation-howto.md b/docs/developer-guide/get-started/emt-installation-howto.md index d72a237f5b..ed32c21de9 100644 --- a/docs/developer-guide/get-started/emt-installation-howto.md +++ b/docs/developer-guide/get-started/emt-installation-howto.md @@ -1,11 +1,13 @@ # Install Edge Microvisor Toolkit Edge Microvisor Toolkit is flexible in how it can be installed. It can be deployed -on bare metal, or on a virtual machine, as a guest or host for virtualization of other operating systems. +on bare metal, via serial over LAN, or on a virtual machine, as a guest or host +for virtualization of other operating systems. This section describes in detail how to try out Edge Microvisor Toolkit in different deployment environment. - [Deploying Edge Microvisor Toolkit on Bare Metal](./deployment/emt-bare-metal.md) +- [Deploying Edge Microvisor Toolkit via Serial over LAN](./deployment/emt-serial-over-lan.md) - [Deploying Edge Microvisor Toolkit on Virtual Machines](./deployment/emt-vm-guest.md) - [Deploying Edge Microvisor Toolkit using EMT VIRT](./deployment/emt-vm-host.md) @@ -19,6 +21,7 @@ deployment environment. :hidden: ./deployment/emt-bare-metal.md +./deployment/emt-serial-over-lan.md ./deployment/emt-vm-guest.md ./deployment/emt-vm-host.md diff --git a/toolkit/imageconfigs/edge-image-bootkit.json b/toolkit/imageconfigs/edge-image-bootkit.json index 1c5d8b4809..dcf4b4f883 100644 --- a/toolkit/imageconfigs/edge-image-bootkit.json +++ b/toolkit/imageconfigs/edge-image-bootkit.json @@ -26,9 +26,6 @@ "PostInstallScripts": [ { "Path": "additionalconfigs/configure-systemd-networkd-client-identifier.sh" - }, - { - "Path": "additionalconfigs/add-sudoer.sh" } ], "KernelOptions": { diff --git a/toolkit/imageconfigs/edge-image-desktop-virtualization.json b/toolkit/imageconfigs/edge-image-desktop-virtualization.json index a894a840ec..3f86bf93fe 100644 --- a/toolkit/imageconfigs/edge-image-desktop-virtualization.json +++ b/toolkit/imageconfigs/edge-image-desktop-virtualization.json @@ -95,9 +95,6 @@ "PostInstallScripts": [ { "Path": "additionalconfigs/configure-systemd-networkd-client-identifier.sh" - }, - { - "Path": "additionalconfigs/add-sudoer.sh" } ], "KernelOptions": { diff --git a/toolkit/imageconfigs/edge-image-minimal-os.json b/toolkit/imageconfigs/edge-image-minimal-os.json index 21b8c3f2b2..9296e1ea8a 100644 --- a/toolkit/imageconfigs/edge-image-minimal-os.json +++ b/toolkit/imageconfigs/edge-image-minimal-os.json @@ -61,9 +61,6 @@ "PostInstallScripts": [ { "Path": "additionalconfigs/configure-systemd-networkd-client-identifier.sh" - }, - { - "Path": "additionalconfigs/add-sudoer.sh" } ], "KernelOptions": { diff --git a/toolkit/imageconfigs/edge-image-rt.json b/toolkit/imageconfigs/edge-image-rt.json index 17b1d4404d..0b86515453 100644 --- a/toolkit/imageconfigs/edge-image-rt.json +++ b/toolkit/imageconfigs/edge-image-rt.json @@ -88,9 +88,6 @@ "PostInstallScripts": [ { "Path": "additionalconfigs/configure-systemd-networkd-client-identifier.sh" - }, - { - "Path": "additionalconfigs/add-sudoer.sh" } ], "KernelOptions": { diff --git a/toolkit/imageconfigs/edge-image.json b/toolkit/imageconfigs/edge-image.json index b4ec26b349..59dec006a4 100644 --- a/toolkit/imageconfigs/edge-image.json +++ b/toolkit/imageconfigs/edge-image.json @@ -88,9 +88,6 @@ "PostInstallScripts": [ { "Path": "additionalconfigs/configure-systemd-networkd-client-identifier.sh" - }, - { - "Path": "additionalconfigs/add-sudoer.sh" } ], "KernelOptions": { diff --git a/toolkit/resources/imageconfigs/packagelists/accessibility-packages.json b/toolkit/resources/imageconfigs/packagelists/accessibility-packages.json index fb96c1bf1a..b1bbe616c9 100644 --- a/toolkit/resources/imageconfigs/packagelists/accessibility-packages.json +++ b/toolkit/resources/imageconfigs/packagelists/accessibility-packages.json @@ -5,7 +5,6 @@ "espeak-ng", "espeakup", "kernel-drivers-accessibility", - "kernel-drivers-sound", "pcaudiolib" ] } diff --git a/toolkit/resources/manifests/package/license_file_exceptions.json b/toolkit/resources/manifests/package/license_file_exceptions.json index 579698214e..be32bc0e0f 100644 --- a/toolkit/resources/manifests/package/license_file_exceptions.json +++ b/toolkit/resources/manifests/package/license_file_exceptions.json @@ -31,6 +31,13 @@ "^/usr/share/doc/tar-[0-9\\.]+/tar\\.html/GNU-Free-Documentation-License\\.html$" ] }, + { + "PackageName": "apache-commons-net-javadoc", + "IgnoredFilesRegexList": [ + "^/usr/share/javadoc/apache-commons-net/org/apache/commons/net/bsd/.*", + "^/usr/share/javadoc/apache-commons-net/src-html/org/apache/commons/net/bsd/.*" + ] + }, { "_comment1": "OpenSSL has multiple structs, constants and procedures that have the word 'NOTICE' in them, like 'NOTICEREF_free'.", "_comment2": "These man pages are for those items, not actual license notices.", diff --git a/toolkit/resources/manifests/package/pkggen_core_x86_64.txt b/toolkit/resources/manifests/package/pkggen_core_x86_64.txt index c3ed0b94da..09168ec724 100644 --- a/toolkit/resources/manifests/package/pkggen_core_x86_64.txt +++ b/toolkit/resources/manifests/package/pkggen_core_x86_64.txt @@ -1,20 +1,20 @@ filesystem-1.1-21.emt3.x86_64.rpm kernel-headers-6.12.67-1.emt3.noarch.rpm -glibc-2.38-12.emt3.x86_64.rpm -glibc-devel-2.38-12.emt3.x86_64.rpm -glibc-i18n-2.38-12.emt3.x86_64.rpm -glibc-iconv-2.38-12.emt3.x86_64.rpm -glibc-lang-2.38-12.emt3.x86_64.rpm -glibc-locales-all-2.38-12.emt3.x86_64.rpm -glibc-nscd-2.38-12.emt3.x86_64.rpm -glibc-tools-2.38-12.emt3.x86_64.rpm -zlib-1.3.1-1.emt3.x86_64.rpm -zlib-devel-1.3.1-1.emt3.x86_64.rpm +glibc-2.38-18.emt3.x86_64.rpm +glibc-devel-2.38-18.emt3.x86_64.rpm +glibc-i18n-2.38-18.emt3.x86_64.rpm +glibc-iconv-2.38-18.emt3.x86_64.rpm +glibc-lang-2.38-18.emt3.x86_64.rpm +glibc-locales-all-2.38-18.emt3.x86_64.rpm +glibc-nscd-2.38-18.emt3.x86_64.rpm +glibc-tools-2.38-18.emt3.x86_64.rpm +zlib-1.3.2-1.emt3.x86_64.rpm +zlib-devel-1.3.2-1.emt3.x86_64.rpm file-5.45-1.emt3.x86_64.rpm file-devel-5.45-1.emt3.x86_64.rpm file-libs-5.45-1.emt3.x86_64.rpm -binutils-2.41-7.emt3.x86_64.rpm -binutils-devel-2.41-7.emt3.x86_64.rpm +binutils-2.41-10.emt3.x86_64.rpm +binutils-devel-2.41-10.emt3.x86_64.rpm gmp-6.3.0-1.emt3.x86_64.rpm gmp-devel-6.3.0-1.emt3.x86_64.rpm mpfr-4.2.1-1.emt3.x86_64.rpm @@ -70,9 +70,9 @@ make-4.4.1-2.emt3.x86_64.rpm patch-2.7.6-9.emt3.x86_64.rpm libcap-ng-0.8.4-1.emt3.x86_64.rpm libcap-ng-devel-0.8.4-1.emt3.x86_64.rpm -util-linux-2.40.2-1.emt3.x86_64.rpm -util-linux-devel-2.40.2-1.emt3.x86_64.rpm -util-linux-libs-2.40.2-1.emt3.x86_64.rpm +util-linux-2.40.2-3.emt3.x86_64.rpm +util-linux-devel-2.40.2-3.emt3.x86_64.rpm +util-linux-libs-2.40.2-3.emt3.x86_64.rpm tar-1.35-2.emt3.x86_64.rpm xz-5.4.4-2.emt3.x86_64.rpm xz-devel-5.4.4-2.emt3.x86_64.rpm @@ -91,17 +91,17 @@ popt-lang-1.19-1.emt3.x86_64.rpm sqlite-3.44.0-2.emt3.x86_64.rpm sqlite-devel-3.44.0-2.emt3.x86_64.rpm sqlite-libs-3.44.0-2.emt3.x86_64.rpm -elfutils-0.189-7.emt3.x86_64.rpm -elfutils-default-yama-scope-0.189-7.emt3.noarch.rpm -elfutils-devel-0.189-7.emt3.x86_64.rpm -elfutils-devel-static-0.189-7.emt3.x86_64.rpm -elfutils-libelf-0.189-7.emt3.x86_64.rpm -elfutils-libelf-devel-0.189-7.emt3.x86_64.rpm -elfutils-libelf-devel-static-0.189-7.emt3.x86_64.rpm -elfutils-libelf-lang-0.189-7.emt3.x86_64.rpm -expat-2.6.4-1.emt3.x86_64.rpm -expat-devel-2.6.4-1.emt3.x86_64.rpm -expat-libs-2.6.4-1.emt3.x86_64.rpm +elfutils-0.189-8.emt3.x86_64.rpm +elfutils-default-yama-scope-0.189-8.emt3.noarch.rpm +elfutils-devel-0.189-8.emt3.x86_64.rpm +elfutils-devel-static-0.189-8.emt3.x86_64.rpm +elfutils-libelf-0.189-8.emt3.x86_64.rpm +elfutils-libelf-devel-0.189-8.emt3.x86_64.rpm +elfutils-libelf-devel-static-0.189-8.emt3.x86_64.rpm +elfutils-libelf-lang-0.189-8.emt3.x86_64.rpm +expat-2.6.4-4.emt3.x86_64.rpm +expat-devel-2.6.4-4.emt3.x86_64.rpm +expat-libs-2.6.4-4.emt3.x86_64.rpm libpipeline-1.5.7-1.emt3.x86_64.rpm libpipeline-devel-1.5.7-1.emt3.x86_64.rpm gdbm-1.23-1.emt3.x86_64.rpm @@ -170,16 +170,16 @@ gtk-doc-1.33.2-1.emt3.noarch.rpm autoconf-2.72-2.emt3.noarch.rpm automake-1.16.5-2.emt3.noarch.rpm ocaml-srpm-macros-9-4.emt3.noarch.rpm -openssl-3.3.3-3.emt3.x86_64.rpm -openssl-devel-3.3.3-3.emt3.x86_64.rpm -openssl-libs-3.3.3-3.emt3.x86_64.rpm -openssl-perl-3.3.3-3.emt3.x86_64.rpm -openssl-static-3.3.3-3.emt3.x86_64.rpm -libcap-2.69-6.emt3.x86_64.rpm -libcap-devel-2.69-6.emt3.x86_64.rpm +openssl-3.3.5-4.emt3.x86_64.rpm +openssl-devel-3.3.5-4.emt3.x86_64.rpm +openssl-libs-3.3.5-4.emt3.x86_64.rpm +openssl-perl-3.3.5-4.emt3.x86_64.rpm +openssl-static-3.3.5-4.emt3.x86_64.rpm +libcap-2.69-12.emt3.x86_64.rpm +libcap-devel-2.69-12.emt3.x86_64.rpm debugedit-5.0-2.emt3.x86_64.rpm -libarchive-3.7.7-3.emt3.x86_64.rpm -libarchive-devel-3.7.7-3.emt3.x86_64.rpm +libarchive-3.7.7-4.emt3.x86_64.rpm +libarchive-devel-3.7.7-4.emt3.x86_64.rpm rpm-4.18.2-1.emt3.x86_64.rpm rpm-build-4.18.2-1.emt3.x86_64.rpm rpm-build-libs-4.18.2-1.emt3.x86_64.rpm @@ -195,20 +195,20 @@ libsolv-0.7.28-3.emt3.x86_64.rpm libsolv-devel-0.7.28-3.emt3.x86_64.rpm libssh2-1.11.1-1.emt3.x86_64.rpm libssh2-devel-1.11.1-1.emt3.x86_64.rpm -krb5-1.21.3-2.emt3.x86_64.rpm -krb5-devel-1.21.3-2.emt3.x86_64.rpm +krb5-1.21.3-3.emt3.x86_64.rpm +krb5-devel-1.21.3-3.emt3.x86_64.rpm nghttp2-1.61.0-2.emt3.x86_64.rpm nghttp2-devel-1.61.0-2.emt3.x86_64.rpm -curl-8.11.1-3.emt3.x86_64.rpm -curl-devel-8.11.1-3.emt3.x86_64.rpm -curl-libs-8.11.1-3.emt3.x86_64.rpm +curl-8.11.1-5.emt3.x86_64.rpm +curl-devel-8.11.1-5.emt3.x86_64.rpm +curl-libs-8.11.1-5.emt3.x86_64.rpm createrepo_c-1.0.3-1.emt3.x86_64.rpm -libxml2-2.11.5-6.emt3.x86_64.rpm -libxml2-devel-2.11.5-6.emt3.x86_64.rpm +libxml2-2.11.5-9.emt3.x86_64.rpm +libxml2-devel-2.11.5-9.emt3.x86_64.rpm docbook-dtd-xml-4.5-11.emt3.noarch.rpm docbook-style-xsl-1.79.1-14.emt3.noarch.rpm libsepol-3.6-2.emt3.x86_64.rpm -glib-2.78.6-3.emt3.x86_64.rpm +glib-2.78.6-8.emt3.x86_64.rpm libltdl-2.4.7-1.emt3.x86_64.rpm libltdl-devel-2.4.7-1.emt3.x86_64.rpm lua-5.4.6-1.emt3.x86_64.rpm @@ -225,32 +225,32 @@ libgpg-error-1.48-1.emt3.x86_64.rpm libgcrypt-1.10.3-1.emt3.x86_64.rpm libksba-1.6.4-1.emt3.x86_64.rpm libksba-devel-1.6.4-1.emt3.x86_64.rpm -libxslt-1.1.43-1.emt3.x86_64.rpm +libxslt-1.1.43-3.emt3.x86_64.rpm npth-1.6-4.emt3.x86_64.rpm pinentry-1.2.1-1.emt3.x86_64.rpm -gnupg2-2.4.7-1.emt3.x86_64.rpm -gnupg2-lang-2.4.7-1.emt3.x86_64.rpm +gnupg2-2.4.9-2.emt3.x86_64.rpm +gnupg2-lang-2.4.9-2.emt3.x86_64.rpm gpgme-1.23.2-2.emt3.x86_64.rpm edge-rpm-macros-3.0-2.emt3.noarch.rpm edge-check-macros-3.0-2.emt3.noarch.rpm libffi-3.4.4-1.emt3.x86_64.rpm libffi-devel-3.4.4-1.emt3.x86_64.rpm -libtasn1-4.19.0-2.emt3.x86_64.rpm +libtasn1-4.19.0-3.emt3.x86_64.rpm p11-kit-0.25.0-1.emt3.x86_64.rpm p11-kit-trust-0.25.0-1.emt3.x86_64.rpm -ca-certificates-shared-3.0.0-11.emt3.noarch.rpm -ca-certificates-tools-3.0.0-11.emt3.noarch.rpm -ca-certificates-base-3.0.0-11.emt3.noarch.rpm -ca-certificates-3.0.0-11.emt3.noarch.rpm +ca-certificates-shared-3.0.0-14.emt3.noarch.rpm +ca-certificates-tools-3.0.0-14.emt3.noarch.rpm +ca-certificates-base-3.0.0-14.emt3.noarch.rpm +ca-certificates-3.0.0-14.emt3.noarch.rpm dwz-0.14-2.emt3.x86_64.rpm unzip-6.0-22.emt3.x86_64.rpm -python3-3.12.9-4.emt3.x86_64.rpm -python3-devel-3.12.9-4.emt3.x86_64.rpm -python3-libs-3.12.9-4.emt3.x86_64.rpm +python3-3.12.9-9.emt3.x86_64.rpm +python3-devel-3.12.9-9.emt3.x86_64.rpm +python3-libs-3.12.9-9.emt3.x86_64.rpm python3-setuptools-69.0.3-5.emt3.noarch.rpm python3-pygments-2.7.4-2.emt3.noarch.rpm which-2.21-8.emt3.x86_64.rpm -libselinux-3.6-3.emt3.x86_64.rpm +libselinux-3.6-4.emt3.x86_64.rpm slang-2.3.3-1.emt3.x86_64.rpm newt-0.52.23-1.emt3.x86_64.rpm newt-lang-0.52.23-1.emt3.x86_64.rpm diff --git a/toolkit/resources/manifests/package/toolchain_x86_64.txt b/toolkit/resources/manifests/package/toolchain_x86_64.txt index e18b025fd5..2cdf4a57a2 100644 --- a/toolkit/resources/manifests/package/toolchain_x86_64.txt +++ b/toolkit/resources/manifests/package/toolchain_x86_64.txt @@ -13,21 +13,21 @@ bash-5.2.15-3.emt3.x86_64.rpm bash-debuginfo-5.2.15-3.emt3.x86_64.rpm bash-devel-5.2.15-3.emt3.x86_64.rpm bash-lang-5.2.15-3.emt3.x86_64.rpm -binutils-2.41-7.emt3.x86_64.rpm -binutils-aarch64-linux-gnu-2.41-7.emt3.x86_64.rpm -binutils-debuginfo-2.41-7.emt3.x86_64.rpm -binutils-devel-2.41-7.emt3.x86_64.rpm +binutils-2.41-10.emt3.x86_64.rpm +binutils-aarch64-linux-gnu-2.41-10.emt3.x86_64.rpm +binutils-debuginfo-2.41-10.emt3.x86_64.rpm +binutils-devel-2.41-10.emt3.x86_64.rpm bison-3.8.2-1.emt3.x86_64.rpm bison-debuginfo-3.8.2-1.emt3.x86_64.rpm bzip2-1.0.8-1.emt3.x86_64.rpm bzip2-debuginfo-1.0.8-1.emt3.x86_64.rpm bzip2-devel-1.0.8-1.emt3.x86_64.rpm bzip2-libs-1.0.8-1.emt3.x86_64.rpm -ca-certificates-3.0.0-11.emt3.noarch.rpm -ca-certificates-base-3.0.0-11.emt3.noarch.rpm -ca-certificates-legacy-3.0.0-11.emt3.noarch.rpm -ca-certificates-shared-3.0.0-11.emt3.noarch.rpm -ca-certificates-tools-3.0.0-11.emt3.noarch.rpm +ca-certificates-3.0.0-14.emt3.noarch.rpm +ca-certificates-base-3.0.0-14.emt3.noarch.rpm +ca-certificates-legacy-3.0.0-14.emt3.noarch.rpm +ca-certificates-shared-3.0.0-14.emt3.noarch.rpm +ca-certificates-tools-3.0.0-14.emt3.noarch.rpm ccache-4.8.3-3.emt3.x86_64.rpm ccache-debuginfo-4.8.3-3.emt3.x86_64.rpm check-0.15.2-1.emt3.x86_64.rpm @@ -35,8 +35,8 @@ check-debuginfo-0.15.2-1.emt3.x86_64.rpm chkconfig-1.25-1.emt3.x86_64.rpm chkconfig-debuginfo-1.25-1.emt3.x86_64.rpm chkconfig-lang-1.25-1.emt3.x86_64.rpm -cmake-3.30.3-9.emt3.x86_64.rpm -cmake-debuginfo-3.30.3-9.emt3.x86_64.rpm +cmake-3.30.3-12.emt3.x86_64.rpm +cmake-debuginfo-3.30.3-12.emt3.x86_64.rpm coreutils-9.4-6.emt3.x86_64.rpm coreutils-debuginfo-9.4-6.emt3.x86_64.rpm coreutils-lang-9.4-6.emt3.x86_64.rpm @@ -51,12 +51,12 @@ cracklib-lang-2.9.11-1.emt3.x86_64.rpm createrepo_c-1.0.3-1.emt3.x86_64.rpm createrepo_c-debuginfo-1.0.3-1.emt3.x86_64.rpm createrepo_c-devel-1.0.3-1.emt3.x86_64.rpm -cross-binutils-common-2.41-7.emt3.noarch.rpm +cross-binutils-common-2.41-10.emt3.noarch.rpm cross-gcc-common-13.2.0-7.emt3.noarch.rpm -curl-8.11.1-3.emt3.x86_64.rpm -curl-debuginfo-8.11.1-3.emt3.x86_64.rpm -curl-devel-8.11.1-3.emt3.x86_64.rpm -curl-libs-8.11.1-3.emt3.x86_64.rpm +curl-8.11.1-5.emt3.x86_64.rpm +curl-debuginfo-8.11.1-5.emt3.x86_64.rpm +curl-devel-8.11.1-5.emt3.x86_64.rpm +curl-libs-8.11.1-5.emt3.x86_64.rpm Cython-debuginfo-3.0.5-2.emt3.x86_64.rpm debugedit-5.0-2.emt3.x86_64.rpm debugedit-debuginfo-5.0-2.emt3.x86_64.rpm @@ -75,19 +75,19 @@ edge-check-macros-3.0-2.emt3.noarch.rpm edge-repos-3.0-5.emt3.noarch.rpm edge-repos-shared-3.0-5.emt3.noarch.rpm edge-rpm-macros-3.0-2.emt3.noarch.rpm -elfutils-0.189-7.emt3.x86_64.rpm -elfutils-debuginfo-0.189-7.emt3.x86_64.rpm -elfutils-default-yama-scope-0.189-7.emt3.noarch.rpm -elfutils-devel-0.189-7.emt3.x86_64.rpm -elfutils-devel-static-0.189-7.emt3.x86_64.rpm -elfutils-libelf-0.189-7.emt3.x86_64.rpm -elfutils-libelf-devel-0.189-7.emt3.x86_64.rpm -elfutils-libelf-devel-static-0.189-7.emt3.x86_64.rpm -elfutils-libelf-lang-0.189-7.emt3.x86_64.rpm -expat-2.6.4-1.emt3.x86_64.rpm -expat-debuginfo-2.6.4-1.emt3.x86_64.rpm -expat-devel-2.6.4-1.emt3.x86_64.rpm -expat-libs-2.6.4-1.emt3.x86_64.rpm +elfutils-0.189-8.emt3.x86_64.rpm +elfutils-debuginfo-0.189-8.emt3.x86_64.rpm +elfutils-default-yama-scope-0.189-8.emt3.noarch.rpm +elfutils-devel-0.189-8.emt3.x86_64.rpm +elfutils-devel-static-0.189-8.emt3.x86_64.rpm +elfutils-libelf-0.189-8.emt3.x86_64.rpm +elfutils-libelf-devel-0.189-8.emt3.x86_64.rpm +elfutils-libelf-devel-static-0.189-8.emt3.x86_64.rpm +elfutils-libelf-lang-0.189-8.emt3.x86_64.rpm +expat-2.6.4-4.emt3.x86_64.rpm +expat-debuginfo-2.6.4-4.emt3.x86_64.rpm +expat-devel-2.6.4-4.emt3.x86_64.rpm +expat-libs-2.6.4-4.emt3.x86_64.rpm file-5.45-1.emt3.x86_64.rpm file-debuginfo-5.45-1.emt3.x86_64.rpm file-devel-5.45-1.emt3.x86_64.rpm @@ -114,27 +114,27 @@ gdbm-lang-1.23-1.emt3.x86_64.rpm gettext-0.22-1.emt3.x86_64.rpm gettext-debuginfo-0.22-1.emt3.x86_64.rpm gfortran-13.2.0-7.emt3.x86_64.rpm -glib-2.78.6-3.emt3.x86_64.rpm -glibc-2.38-12.emt3.x86_64.rpm -glibc-debuginfo-2.38-12.emt3.x86_64.rpm -glibc-devel-2.38-12.emt3.x86_64.rpm -glibc-i18n-2.38-12.emt3.x86_64.rpm -glibc-iconv-2.38-12.emt3.x86_64.rpm -glibc-lang-2.38-12.emt3.x86_64.rpm -glibc-locales-all-2.38-12.emt3.x86_64.rpm -glibc-nscd-2.38-12.emt3.x86_64.rpm -glibc-static-2.38-12.emt3.x86_64.rpm -glibc-tools-2.38-12.emt3.x86_64.rpm -glib-debuginfo-2.78.6-3.emt3.x86_64.rpm -glib-devel-2.78.6-3.emt3.x86_64.rpm -glib-doc-2.78.6-3.emt3.noarch.rpm -glib-schemas-2.78.6-3.emt3.x86_64.rpm +glib-2.78.6-8.emt3.x86_64.rpm +glib-debuginfo-2.78.6-8.emt3.x86_64.rpm +glib-devel-2.78.6-8.emt3.x86_64.rpm +glib-doc-2.78.6-8.emt3.noarch.rpm +glib-schemas-2.78.6-8.emt3.x86_64.rpm +glibc-2.38-18.emt3.x86_64.rpm +glibc-debuginfo-2.38-18.emt3.x86_64.rpm +glibc-devel-2.38-18.emt3.x86_64.rpm +glibc-i18n-2.38-18.emt3.x86_64.rpm +glibc-iconv-2.38-18.emt3.x86_64.rpm +glibc-lang-2.38-18.emt3.x86_64.rpm +glibc-locales-all-2.38-18.emt3.x86_64.rpm +glibc-nscd-2.38-18.emt3.x86_64.rpm +glibc-static-2.38-18.emt3.x86_64.rpm +glibc-tools-2.38-18.emt3.x86_64.rpm gmp-6.3.0-1.emt3.x86_64.rpm gmp-debuginfo-6.3.0-1.emt3.x86_64.rpm gmp-devel-6.3.0-1.emt3.x86_64.rpm -gnupg2-2.4.7-1.emt3.x86_64.rpm -gnupg2-debuginfo-2.4.7-1.emt3.x86_64.rpm -gnupg2-lang-2.4.7-1.emt3.x86_64.rpm +gnupg2-2.4.9-2.emt3.x86_64.rpm +gnupg2-debuginfo-2.4.9-2.emt3.x86_64.rpm +gnupg2-lang-2.4.9-2.emt3.x86_64.rpm gperf-3.1-5.emt3.x86_64.rpm gperf-debuginfo-3.1-5.emt3.x86_64.rpm gpgme-1.23.2-2.emt3.x86_64.rpm @@ -155,24 +155,24 @@ kernel-headers-6.12.67-1.emt3.noarch.rpm kmod-30-1.emt3.x86_64.rpm kmod-debuginfo-30-1.emt3.x86_64.rpm kmod-devel-30-1.emt3.x86_64.rpm -krb5-1.21.3-2.emt3.x86_64.rpm -krb5-debuginfo-1.21.3-2.emt3.x86_64.rpm -krb5-devel-1.21.3-2.emt3.x86_64.rpm -krb5-lang-1.21.3-2.emt3.x86_64.rpm +krb5-1.21.3-3.emt3.x86_64.rpm +krb5-debuginfo-1.21.3-3.emt3.x86_64.rpm +krb5-devel-1.21.3-3.emt3.x86_64.rpm +krb5-lang-1.21.3-3.emt3.x86_64.rpm libacl-2.3.1-2.emt3.x86_64.rpm libacl-devel-2.3.1-2.emt3.x86_64.rpm -libarchive-3.7.7-3.emt3.x86_64.rpm -libarchive-debuginfo-3.7.7-3.emt3.x86_64.rpm -libarchive-devel-3.7.7-3.emt3.x86_64.rpm +libarchive-3.7.7-4.emt3.x86_64.rpm +libarchive-debuginfo-3.7.7-4.emt3.x86_64.rpm +libarchive-devel-3.7.7-4.emt3.x86_64.rpm libassuan-2.5.6-1.emt3.x86_64.rpm libassuan-debuginfo-2.5.6-1.emt3.x86_64.rpm libassuan-devel-2.5.6-1.emt3.x86_64.rpm libattr-2.5.2-1.emt3.x86_64.rpm libattr-devel-2.5.2-1.emt3.x86_64.rpm libbacktrace-static-13.2.0-7.emt3.x86_64.rpm -libcap-2.69-6.emt3.x86_64.rpm -libcap-debuginfo-2.69-6.emt3.x86_64.rpm -libcap-devel-2.69-6.emt3.x86_64.rpm +libcap-2.69-12.emt3.x86_64.rpm +libcap-debuginfo-2.69-12.emt3.x86_64.rpm +libcap-devel-2.69-12.emt3.x86_64.rpm libcap-ng-0.8.4-1.emt3.x86_64.rpm libcap-ng-debuginfo-0.8.4-1.emt3.x86_64.rpm libcap-ng-devel-0.8.4-1.emt3.x86_64.rpm @@ -210,11 +210,11 @@ libpipeline-debuginfo-1.5.7-1.emt3.x86_64.rpm libpipeline-devel-1.5.7-1.emt3.x86_64.rpm libpkgconf-2.0.2-1.emt3.x86_64.rpm libpkgconf-devel-2.0.2-1.emt3.x86_64.rpm -libselinux-3.6-3.emt3.x86_64.rpm -libselinux-debuginfo-3.6-3.emt3.x86_64.rpm -libselinux-devel-3.6-3.emt3.x86_64.rpm -libselinux-python3-3.6-3.emt3.x86_64.rpm -libselinux-utils-3.6-3.emt3.x86_64.rpm +libselinux-3.6-4.emt3.x86_64.rpm +libselinux-debuginfo-3.6-4.emt3.x86_64.rpm +libselinux-devel-3.6-4.emt3.x86_64.rpm +libselinux-python3-3.6-4.emt3.x86_64.rpm +libselinux-utils-3.6-4.emt3.x86_64.rpm libsepol-3.6-2.emt3.x86_64.rpm libsepol-debuginfo-3.6-2.emt3.x86_64.rpm libsepol-devel-3.6-2.emt3.x86_64.rpm @@ -227,20 +227,20 @@ libssh2-debuginfo-1.11.1-1.emt3.x86_64.rpm libssh2-devel-1.11.1-1.emt3.x86_64.rpm libstdc++-13.2.0-7.emt3.x86_64.rpm libstdc++-devel-13.2.0-7.emt3.x86_64.rpm -libtasn1-4.19.0-2.emt3.x86_64.rpm -libtasn1-debuginfo-4.19.0-2.emt3.x86_64.rpm -libtasn1-devel-4.19.0-2.emt3.x86_64.rpm +libtasn1-4.19.0-3.emt3.x86_64.rpm +libtasn1-debuginfo-4.19.0-3.emt3.x86_64.rpm +libtasn1-devel-4.19.0-3.emt3.x86_64.rpm libtool-2.4.7-1.emt3.x86_64.rpm libtool-debuginfo-2.4.7-1.emt3.x86_64.rpm libxcrypt-4.4.36-2.emt3.x86_64.rpm libxcrypt-debuginfo-4.4.36-2.emt3.x86_64.rpm libxcrypt-devel-4.4.36-2.emt3.x86_64.rpm -libxml2-2.11.5-6.emt3.x86_64.rpm -libxml2-debuginfo-2.11.5-6.emt3.x86_64.rpm -libxml2-devel-2.11.5-6.emt3.x86_64.rpm -libxslt-1.1.43-1.emt3.x86_64.rpm -libxslt-debuginfo-1.1.43-1.emt3.x86_64.rpm -libxslt-devel-1.1.43-1.emt3.x86_64.rpm +libxml2-2.11.5-9.emt3.x86_64.rpm +libxml2-debuginfo-2.11.5-9.emt3.x86_64.rpm +libxml2-devel-2.11.5-9.emt3.x86_64.rpm +libxslt-1.1.43-3.emt3.x86_64.rpm +libxslt-debuginfo-1.1.43-3.emt3.x86_64.rpm +libxslt-devel-1.1.43-3.emt3.x86_64.rpm lua-5.4.6-1.emt3.x86_64.rpm lua-debuginfo-5.4.6-1.emt3.x86_64.rpm lua-devel-5.4.6-1.emt3.x86_64.rpm @@ -248,9 +248,9 @@ lua-libs-5.4.6-1.emt3.x86_64.rpm lua-rpm-macros-1-6.emt3.noarch.rpm lua-srpm-macros-1-6.emt3.noarch.rpm lua-static-5.4.6-1.emt3.x86_64.rpm -lz4-1.9.4-1.emt3.x86_64.rpm -lz4-debuginfo-1.9.4-1.emt3.x86_64.rpm -lz4-devel-1.9.4-1.emt3.x86_64.rpm +lz4-1.9.4-2.emt3.x86_64.rpm +lz4-debuginfo-1.9.4-2.emt3.x86_64.rpm +lz4-devel-1.9.4-2.emt3.x86_64.rpm m4-1.4.19-2.emt3.x86_64.rpm m4-debuginfo-1.4.19-2.emt3.x86_64.rpm make-4.4.1-2.emt3.x86_64.rpm @@ -280,12 +280,12 @@ npth-debuginfo-1.6-4.emt3.x86_64.rpm npth-devel-1.6-4.emt3.x86_64.rpm ntsysv-1.25-1.emt3.x86_64.rpm ocaml-srpm-macros-9-4.emt3.noarch.rpm -openssl-3.3.3-3.emt3.x86_64.rpm -openssl-debuginfo-3.3.3-3.emt3.x86_64.rpm -openssl-devel-3.3.3-3.emt3.x86_64.rpm -openssl-libs-3.3.3-3.emt3.x86_64.rpm -openssl-perl-3.3.3-3.emt3.x86_64.rpm -openssl-static-3.3.3-3.emt3.x86_64.rpm +openssl-3.3.5-4.emt3.x86_64.rpm +openssl-debuginfo-3.3.5-4.emt3.x86_64.rpm +openssl-devel-3.3.5-4.emt3.x86_64.rpm +openssl-libs-3.3.5-4.emt3.x86_64.rpm +openssl-perl-3.3.5-4.emt3.x86_64.rpm +openssl-static-3.3.5-4.emt3.x86_64.rpm p11-kit-0.25.0-1.emt3.x86_64.rpm p11-kit-debuginfo-0.25.0-1.emt3.x86_64.rpm p11-kit-devel-0.25.0-1.emt3.x86_64.rpm @@ -370,16 +370,16 @@ perl-Fcntl-1.15-509.emt3.x86_64.rpm perl-Fedora-VSP-0.001-20.emt3.noarch.rpm perl-fields-2.27-509.emt3.noarch.rpm perl-File-Basename-2.86-509.emt3.noarch.rpm -perl-FileCache-1.10-509.emt3.noarch.rpm perl-File-Compare-1.100.700-509.emt3.noarch.rpm perl-File-Copy-2.41-509.emt3.noarch.rpm perl-File-DosGlob-1.12-509.emt3.x86_64.rpm perl-File-Fetch-1.04-509.emt3.noarch.rpm perl-File-Find-1.43-509.emt3.noarch.rpm -perl-FileHandle-2.05-509.emt3.noarch.rpm perl-File-Path-2.18-509.emt3.noarch.rpm perl-File-stat-1.13-509.emt3.noarch.rpm perl-File-Temp-0.231.100-509.emt3.noarch.rpm +perl-FileCache-1.10-509.emt3.noarch.rpm +perl-FileHandle-2.05-509.emt3.noarch.rpm perl-filetest-1.03-509.emt3.noarch.rpm perl-Filter-1.64-509.emt3.x86_64.rpm perl-Filter-Simple-0.96-509.emt3.noarch.rpm @@ -521,31 +521,32 @@ procps-ng-devel-4.0.4-1.emt3.x86_64.rpm procps-ng-lang-4.0.4-1.emt3.x86_64.rpm pyproject-rpm-macros-1.12.0-2.emt3.noarch.rpm pyproject-srpm-macros-1.12.0-2.emt3.noarch.rpm -python3-3.12.9-4.emt3.x86_64.rpm +python3-3.12.9-9.emt3.x86_64.rpm python3-audit-3.1.2-1.emt3.x86_64.rpm python3-cracklib-2.9.11-1.emt3.x86_64.rpm -python3-curses-3.12.9-4.emt3.x86_64.rpm +python3-curses-3.12.9-9.emt3.x86_64.rpm python3-Cython-3.0.5-2.emt3.x86_64.rpm -python3-debuginfo-3.12.9-4.emt3.x86_64.rpm -python3-devel-3.12.9-4.emt3.x86_64.rpm +python3-debuginfo-3.12.9-9.emt3.x86_64.rpm +python3-devel-3.12.9-9.emt3.x86_64.rpm python3-flit-core-3.9.0-1.emt3.noarch.rpm python3-gpg-1.23.2-2.emt3.x86_64.rpm python3-jinja2-3.1.2-3.emt3.noarch.rpm python3-libcap-ng-0.8.4-1.emt3.x86_64.rpm -python3-libs-3.12.9-4.emt3.x86_64.rpm -python3-libxml2-2.11.5-6.emt3.x86_64.rpm +python3-libmount-2.40.2-3.emt3.x86_64.rpm +python3-libs-3.12.9-9.emt3.x86_64.rpm +python3-libxml2-2.11.5-9.emt3.x86_64.rpm python3-lxml-4.9.3-1.emt3.x86_64.rpm python3-magic-5.45-1.emt3.noarch.rpm python3-markupsafe-2.1.3-1.emt3.x86_64.rpm python3-newt-0.52.23-1.emt3.x86_64.rpm python3-packaging-23.2-3.emt3.noarch.rpm -python3-pip-24.2-3.emt3.noarch.rpm +python3-pip-24.2-6.emt3.noarch.rpm python3-pygments-2.7.4-2.emt3.noarch.rpm python3-rpm-4.18.2-1.emt3.x86_64.rpm python3-rpm-generators-14-11.emt3.noarch.rpm python3-setuptools-69.0.3-5.emt3.noarch.rpm -python3-test-3.12.9-4.emt3.x86_64.rpm -python3-tools-3.12.9-4.emt3.x86_64.rpm +python3-test-3.12.9-9.emt3.x86_64.rpm +python3-tools-3.12.9-9.emt3.x86_64.rpm python3-wheel-0.43.0-1.emt3.noarch.rpm python-markupsafe-debuginfo-2.1.3-1.emt3.x86_64.rpm python-wheel-wheel-0.43.0-1.emt3.noarch.rpm @@ -590,11 +591,11 @@ texinfo-7.0.3-1.emt3.x86_64.rpm texinfo-debuginfo-7.0.3-1.emt3.x86_64.rpm unzip-6.0-22.emt3.x86_64.rpm unzip-debuginfo-6.0-22.emt3.x86_64.rpm -util-linux-2.40.2-1.emt3.x86_64.rpm -util-linux-debuginfo-2.40.2-1.emt3.x86_64.rpm -util-linux-devel-2.40.2-1.emt3.x86_64.rpm -util-linux-lang-2.40.2-1.emt3.x86_64.rpm -util-linux-libs-2.40.2-1.emt3.x86_64.rpm +util-linux-2.40.2-3.emt3.x86_64.rpm +util-linux-debuginfo-2.40.2-3.emt3.x86_64.rpm +util-linux-devel-2.40.2-3.emt3.x86_64.rpm +util-linux-lang-2.40.2-3.emt3.x86_64.rpm +util-linux-libs-2.40.2-3.emt3.x86_64.rpm which-2.21-8.emt3.x86_64.rpm which-debuginfo-2.21-8.emt3.x86_64.rpm xz-5.4.4-2.emt3.x86_64.rpm @@ -604,9 +605,9 @@ xz-lang-5.4.4-2.emt3.x86_64.rpm xz-libs-5.4.4-2.emt3.x86_64.rpm zip-3.0-6.emt3.x86_64.rpm zip-debuginfo-3.0-6.emt3.x86_64.rpm -zlib-1.3.1-1.emt3.x86_64.rpm -zlib-debuginfo-1.3.1-1.emt3.x86_64.rpm -zlib-devel-1.3.1-1.emt3.x86_64.rpm +zlib-1.3.2-1.emt3.x86_64.rpm +zlib-debuginfo-1.3.2-1.emt3.x86_64.rpm +zlib-devel-1.3.2-1.emt3.x86_64.rpm zstd-1.5.5-2.emt3.x86_64.rpm zstd-debuginfo-1.5.5-2.emt3.x86_64.rpm zstd-devel-1.5.5-2.emt3.x86_64.rpm diff --git a/toolkit/scripts/check_entangled_specs.py b/toolkit/scripts/check_entangled_specs.py index 797951936d..b3a85d5295 100755 --- a/toolkit/scripts/check_entangled_specs.py +++ b/toolkit/scripts/check_entangled_specs.py @@ -64,10 +64,6 @@ "SPECS/shim-unsigned-x64/shim-unsigned-x64.spec", "SPECS/shim-unsigned-aarch64/shim-unsigned-aarch64.spec" ]), - frozenset([ - "SPECS-SIGNED/fwctl-signed/fwctl-signed.spec", - "SPECS/fwctl/fwctl.spec" - ]), frozenset([ "SPECS-SIGNED/iser-signed/iser-signed.spec", "SPECS/iser/iser.spec" diff --git a/toolkit/scripts/get_config_deps.sh b/toolkit/scripts/get_config_deps.sh index 1e724d03d0..564f9ae46f 100755 --- a/toolkit/scripts/get_config_deps.sh +++ b/toolkit/scripts/get_config_deps.sh @@ -44,6 +44,8 @@ do then echo "$filename" else - echo $(realpath "$config_base_dir/$filename") + # Use -m to canonicalize paths even if they don't exist + # This allows the Makefile to detect missing files and provide a helpful error + echo $(realpath -m "$config_base_dir/$filename") fi done diff --git a/toolkit/scripts/imggen.mk b/toolkit/scripts/imggen.mk index eb76531b77..d991475474 100644 --- a/toolkit/scripts/imggen.mk +++ b/toolkit/scripts/imggen.mk @@ -94,6 +94,20 @@ fetch-external-image-packages: $(image_external_package_cache_summary) # Validate the selected config file if any changes occur in the image config base directory. # Changes to files located outside the base directory will not be detected. validate-image-config: $(validate-config) + +# Validate that all config dependencies exist before Make tries to process them as prerequisites +# If we don't do this, Make will error out with a less-than-helpful message about having no rule to make +# the validation flag (since its a pattern match and if a dependency is missing, it can't match the pattern) +# Skip this check for printvar targets so users can still debug with the suggested command +ifneq ($(CONFIG_FILE),) + ifeq ($(filter printvar-%,$(MAKECMDGOALS)),) + config_missing_files = $(filter-out $(wildcard $(config_other_files)),$(config_other_files)) + ifneq ($(config_missing_files),) + $(error $(newline)$(newline)ERROR: Image configuration '$(CONFIG_FILE)' missing files:$(newline)$(newline)$(foreach file,$(config_missing_files), - $(file)$(newline))$(newline)Run this command to see all expected files:$(newline) make printvar-config_other_files CONFIG_FILE=$(CONFIG_FILE) --quiet$(newline)) + endif + endif +endif + $(STATUS_FLAGS_DIR)/validate-image-config%.flag: $(go-imageconfigvalidator) $(depend_CONFIG_FILE) $(CONFIG_FILE) $(config_other_files) $(if $(CONFIG_FILE),,$(error Must set CONFIG_FILE=)) $(go-imageconfigvalidator) \ @@ -126,7 +140,12 @@ ifneq ($(REPO_SNAPSHOT_TIME),) imagepkgfetcher_extra_flags += --repo-snapshot-time=$(REPO_SNAPSHOT_TIME) endif -$(image_package_cache_summary): $(go-imagepkgfetcher) $(chroot_worker) $(toolchain_rpms) $(imggen_local_repo) $(depend_REPO_LIST) $(REPO_LIST) $(depend_CONFIG_FILE) $(CONFIG_FILE) $(validate-config) $(RPMS_DIR) $(imggen_rpms) $(depend_REPO_SNAPSHOT_TIME) $(STATUS_FLAGS_DIR)/imagegen_cleanup.flag +ifeq ($(VALIDATE_IMAGE_GPG),y) +imagepkgfetcher_extra_flags += --enable-gpg-check +imagepkgfetcher_extra_flags += $(foreach key,$(IMAGE_GPG_VALIDATION_KEYS),--gpg-key=$(key)) +endif + +$(image_package_cache_summary): $(go-imagepkgfetcher) $(chroot_worker) $(toolchain_rpms) $(imggen_local_repo) $(depend_REPO_LIST) $(REPO_LIST) $(depend_CONFIG_FILE) $(CONFIG_FILE) $(validate-config) $(RPMS_DIR) $(imggen_rpms) $(depend_REPO_SNAPSHOT_TIME) $(depend_VALIDATE_IMAGE_GPG) $(depend_IMAGE_GPG_VALIDATION_KEYS) $(IMAGE_GPG_VALIDATION_KEYS) $(STATUS_FLAGS_DIR)/imagegen_cleanup.flag $(if $(CONFIG_FILE),,$(error Must set CONFIG_FILE=)) $(go-imagepkgfetcher) \ --input=$(CONFIG_FILE) \ diff --git a/toolkit/scripts/toolchain.mk b/toolkit/scripts/toolchain.mk index f28f96ac1d..d19db70c2d 100644 --- a/toolkit/scripts/toolchain.mk +++ b/toolkit/scripts/toolchain.mk @@ -19,6 +19,8 @@ rpmcache_build_dir = $(BUILD_DIR)/rpm_cache/cache toolchain_logs_dir = $(LOGS_DIR)/toolchain toolchain_downloads_logs_dir = $(toolchain_logs_dir)/downloads toolchain_rehydrate_logs_dir = $(toolchain_logs_dir)/rehydrate +toolchain_raw_logs_dir = $(toolchain_logs_dir)/raw +toolchain_official_logs_dir = $(toolchain_logs_dir)/official toolchain_downloads_manifest = $(toolchain_downloads_logs_dir)/download_manifest.txt toolchain_log_tail_length = 20 populated_toolchain_chroot = $(toolchain_build_dir)/populated_toolchain @@ -159,13 +161,18 @@ hydrate-toolchain: # out/toolchain/toolchain_from_container.tar.gz $(raw_toolchain): $(toolchain_files) @echo "Building raw toolchain" + rm -rf $(toolchain_raw_logs_dir) && mkdir -p $(toolchain_raw_logs_dir) cd $(SCRIPTS_DIR)/toolchain && \ ./create_toolchain_in_container.sh \ $(BUILD_DIR) \ $(SPECS_DIR) \ $(SOURCE_URL) \ $(INCREMENTAL_TOOLCHAIN) \ - $(ARCHIVE_TOOL) + $(ARCHIVE_TOOL) \ + $(toolchain_raw_logs_dir) 2>&1 | tee $(toolchain_raw_logs_dir)/create_toolchain_in_container_full.log; \ + if [ $${PIPESTATUS[0]} -ne 0 ]; then \ + $(call print_error, create_toolchain_in_container.sh failed); \ + fi # This target establishes a cache of toolchain RPMs for partially rehydrating the toolchain from package repos. # $(toolchain_from_repos) is a staging folder for these RPMs. We use the toolchain manifest to get a list of @@ -213,6 +220,7 @@ $(final_toolchain): $(no_repo_acl) $(raw_toolchain) $(toolchain_rpms_rehydrated) # Clean the existing chroot if not doing an incremental build $(if $(filter y,$(INCREMENTAL_TOOLCHAIN)),,$(SCRIPTS_DIR)/safeunmount.sh "$(populated_toolchain_chroot)" || $(call print_error,failed to clean mounts for toolchain build)) $(if $(filter y,$(INCREMENTAL_TOOLCHAIN)),,rm -rf $(populated_toolchain_chroot)) + rm -rf $(toolchain_official_logs_dir) && mkdir -p $(toolchain_official_logs_dir) cd $(SCRIPTS_DIR)/toolchain && \ ./build_mariner_toolchain.sh \ "$(DIST_TAG)" \ @@ -230,7 +238,10 @@ $(final_toolchain): $(no_repo_acl) $(raw_toolchain) $(toolchain_rpms_rehydrated) "$(toolchain_from_repos)" \ "$(TOOLCHAIN_MANIFEST)" \ "$(go-bldtracker)" \ - "$(TIMESTAMP_DIR)/build_mariner_toolchain.jsonl" && \ + "$(TIMESTAMP_DIR)/build_mariner_toolchain.jsonl" 2>&1 | tee $(toolchain_official_logs_dir)/build_official_rpms.log; \ + if [ $${PIPESTATUS[0]} -ne 0 ]; then \ + $(call print_error, build_mariner_toolchain.sh failed); \ + fi && \ $(if $(filter y,$(UPDATE_TOOLCHAIN_LIST)), ls -1 $(toolchain_build_dir)/built_rpms_all > $(MANIFESTS_DIR)/package/toolchain_$(build_arch).txt && ) \ touch $@ @@ -304,7 +315,7 @@ prepare_rpmcache: @echo "Preparing rpmcache copy toolchain RPMs to rpmcache $(rpmcache_build_dir)" @cp $(toolchain_build_rpms)/noarch/* $(rpmcache_build_dir) || true @cp $(toolchain_build_rpms)/x86_64/* $(rpmcache_build_dir) || true -$(toolchain_rpms): prepare_rpmcache $(TOOLCHAIN_MANIFEST) $(STATUS_FLAGS_DIR)/toolchain_auto_cleanup.flag $(depend_REBUILD_TOOLCHAIN) $(go-downloader) $(SCRIPTS_DIR)/toolchain/download_toolchain_rpm.sh $(TOOLCHAIN_GPG_VALIDATION_KEYS) +$(toolchain_rpms): prepare_rpmcache $(TOOLCHAIN_MANIFEST) $(STATUS_FLAGS_DIR)/toolchain_auto_cleanup.flag $(depend_REBUILD_TOOLCHAIN) $(go-downloader) $(SCRIPTS_DIR)/toolchain/download_toolchain_rpm.sh $(depend_TOOLCHAIN_GPG_VALIDATION_KEYS) $(TOOLCHAIN_GPG_VALIDATION_KEYS) @log_file="$(toolchain_downloads_logs_dir)/$(notdir $@).log" && \ rm -f "$$log_file" && \ $(SCRIPTS_DIR)/toolchain/download_toolchain_rpm.sh \ diff --git a/toolkit/scripts/toolchain/container/Dockerfile b/toolkit/scripts/toolchain/container/Dockerfile index 87aaca7504..1918f7e7da 100644 --- a/toolkit/scripts/toolchain/container/Dockerfile +++ b/toolkit/scripts/toolchain/container/Dockerfile @@ -3,7 +3,7 @@ # # Dockerfile to build Azure Linux toolchain from scratch # -FROM mcr.microsoft.com/cbl-mariner/base/core:2.0.20240123 +FROM mcr.microsoft.com/azurelinux/base/core:3.0.20250910 # Tag the layers so we can clean up all the containers associated with a build directory ARG MARINER_BUILD_DIR diff --git a/toolkit/scripts/toolchain/toolchain_update_git_submodule.sh b/toolkit/scripts/toolchain/toolchain_update_git_submodule.sh index 2d0a486ac1..0c13a720cd 100755 --- a/toolkit/scripts/toolchain/toolchain_update_git_submodule.sh +++ b/toolkit/scripts/toolchain/toolchain_update_git_submodule.sh @@ -8,13 +8,53 @@ set -e REPO_ROOT="$(git rev-parse --show-toplevel)" +skip_list=( + "apparmor" + "azurelinux-release" + "azurelinux-repos" + "azurelinux-rpm-macros" + "cloud-provider-kubevirt" + "ceph" + "coredns" + "dcos-cli" + "fwctl" + "fwctl-hwe" + "iser" + "iser-hwe" + "isert" + "isert-hwe" + "kernel-hwe" + "kernel-hwe-headers" + "kernel-mshv" + "knem" + "knem-hwe" + "mft_kernel" + "mft_kernel-hwe" + "mlnx-ethtool" + "mlnx-iproute2" + "mlnx-nfsrdma" + "mlnx-nfsrdma-hwe" + "mlnx-ofa_kernel" + "mlnx-ofa_kernel-hwe" + "mlnx-tools" + "mlx-bootctl" + "mlx-steering-dump" + "nodejs24" + "patterns-ceph-containers" + "srp" + "srp-hwe" + "vitess" + "xpmem" + "xpmem-hwe" + "xpmem-lib" +) + if [ -d "${REPO_ROOT}/azurelinux" ]; then cd ${REPO_ROOT}/azurelinux git clean -xfd &> /dev/null git reset --hard &> /dev/null git submodule update --init &> /dev/null cd ${REPO_ROOT} - skip_list=("cloud-provider-kubevirt" "perl-DBIx-Simple" "dcos-cli" "vitess" "fwctl" "mlx-bootctl" "kernel-mshv" "srp" "mft_kernel" "knem" "xpmem" "xpmem-lib" "iser" "isert" "mlnx-ethtool" "mlnx-iproute2" "mlnx-nfsrdma" "mlnx-ofa_kernel" "mlnx-tools" "azurelinux-release" "azurelinux-repos" "azurelinux-rpm-macros") for folder in azurelinux/SPECS/*; do fbasename=$(basename "$folder") skip=false diff --git a/toolkit/scripts/utils.mk b/toolkit/scripts/utils.mk index e456511080..b00b75e129 100644 --- a/toolkit/scripts/utils.mk +++ b/toolkit/scripts/utils.mk @@ -15,6 +15,12 @@ build_arch := $(shell uname -m) no_repo_acl = $(STATUS_FLAGS_DIR)/no_repo_acl.flag +# Define newline for use in error messages and output formatting +define newline + + +endef + ######## MISC. MAKEFILE Functions ######## # Creates a folder if it doesn't exist. Also sets the timestamp to 0 if it is @@ -60,10 +66,11 @@ endef ######## VARIABLE DEPENDENCY TRACKING ######## # List of variables to watch for changes. -watch_vars=PACKAGE_BUILD_LIST PACKAGE_REBUILD_LIST PACKAGE_IGNORE_LIST REPO_LIST CONFIG_FILE STOP_ON_PKG_FAIL TOOLCHAIN_ARCHIVE REBUILD_TOOLCHAIN SRPM_PACK_LIST SPECS_DIR MAX_CASCADING_REBUILDS RUN_CHECK TEST_RUN_LIST TEST_RERUN_LIST TEST_IGNORE_LIST EXTRA_BUILD_LAYERS LICENSE_CHECK_MODE VALIDATE_TOOLCHAIN_GPG REPO_SNAPSHOT_TIME PACKAGE_CACHE_SUMMARY +watch_vars=PACKAGE_BUILD_LIST PACKAGE_REBUILD_LIST PACKAGE_IGNORE_LIST REPO_LIST CONFIG_FILE STOP_ON_PKG_FAIL TOOLCHAIN_ARCHIVE REBUILD_TOOLCHAIN SRPM_PACK_LIST SPECS_DIR MAX_CASCADING_REBUILDS RUN_CHECK TEST_RUN_LIST TEST_RERUN_LIST TEST_IGNORE_LIST EXTRA_BUILD_LAYERS LICENSE_CHECK_MODE VALIDATE_TOOLCHAIN_GPG TOOLCHAIN_GPG_VALIDATION_KEYS VALIDATE_IMAGE_GPG IMAGE_GPG_VALIDATION_KEYS REPO_SNAPSHOT_TIME PACKAGE_CACHE_SUMMARY # Current list: $(depend_PACKAGE_BUILD_LIST) $(depend_PACKAGE_REBUILD_LIST) $(depend_PACKAGE_IGNORE_LIST) $(depend_REPO_LIST) $(depend_CONFIG_FILE) $(depend_STOP_ON_PKG_FAIL) # $(depend_TOOLCHAIN_ARCHIVE) $(depend_REBUILD_TOOLCHAIN) $(depend_SRPM_PACK_LIST) $(depend_SPECS_DIR) $(depend_EXTRA_BUILD_LAYERS) $(depend_MAX_CASCADING_REBUILDS) $(depend_RUN_CHECK) $(depend_TEST_RUN_LIST) -# $(depend_TEST_RERUN_LIST) $(depend_TEST_IGNORE_LIST) $(depend_LICENSE_CHECK_MODE) $(depend_VALIDATE_TOOLCHAIN_GPG) $(depend_REPO_SNAPSHOT_TIME) $(depend_PACKAGE_CACHE_SUMMARY) +# $(depend_TEST_RERUN_LIST) $(depend_TEST_IGNORE_LIST) $(depend_LICENSE_CHECK_MODE) $(depend_VALIDATE_TOOLCHAIN_GPG) $(depend_TOOLCHAIN_GPG_VALIDATION_KEYS) $(depend_VALIDATE_IMAGE_GPG) +# $(depend_IMAGE_GPG_VALIDATION_KEYS) $(depend_REPO_SNAPSHOT_TIME) $(depend_PACKAGE_CACHE_SUMMARY) .PHONY: variable_depends_on_phony clean-variable_depends_on_phony setfacl_always_run_phony clean: clean-variable_depends_on_phony diff --git a/toolkit/tools/imagegen/installutils/installutils.go b/toolkit/tools/imagegen/installutils/installutils.go index db3a0cb8f2..79b83f68a6 100644 --- a/toolkit/tools/imagegen/installutils/installutils.go +++ b/toolkit/tools/imagegen/installutils/installutils.go @@ -774,7 +774,9 @@ func TdnfInstallWithProgress(packageName, installRoot string, currentPackagesIns return } - // TDNF 3.x uses repositories from installchroot instead of host. Passing setopt for repo files directory to use local repo for installroot installation + // TDNF 3.x uses repositories from installchroot instead of host. Passing setopt for repo files directory to use local repo for installroot installation. + // Note: --nogpgcheck is used here because GPG signature validation is performed earlier during package fetching (imagepkgfetcher) + // when VALIDATE_IMAGE_GPG=y is set. Packages in the local repo have already been verified. err = shell.NewExecBuilder("tdnf", "-v", "install", packageName, "--installroot", installRoot, "--nogpgcheck", "--assumeyes", "--setopt", "reposdir=/etc/yum.repos.d/", releaseverCliArg). StdoutCallback(onStdout). @@ -841,7 +843,9 @@ func calculateTotalPackages(packages []string, installRoot string, genEMTList bo stderr string ) - // Issue an install request but stop right before actually performing the install (assumeno) + // Issue an install request but stop right before actually performing the install (assumeno). + // Note: --nogpgcheck is safe here because this is a dry-run (--assumeno) and packages are validated + // during fetching when VALIDATE_IMAGE_GPG=y is set. stdout, stderr, err = shell.Execute("tdnf", "install", releaseverCliArg, "--assumeno", "--nogpgcheck", pkg, "--installroot", installRoot) if err != nil { // tdnf aborts the process when it detects an install with --assumeno. @@ -1963,11 +1967,8 @@ func ProvisionUserSSHCerts(installChroot safechroot.ChrootInterface, username st ) (err error) { var ( pubKeyData []string - exists bool ) const squashErrors = false - const authorizedKeysTempFilePerms = 0644 - const authorizedKeysTempFile = "/tmp/authorized_keys" const sshDirectoryPermission = "0700" // Skip user SSH directory generation when not provided with public keys @@ -1983,27 +1984,21 @@ func ProvisionUserSSHCerts(installChroot safechroot.ChrootInterface, username st authorizedKeysFile := filepath.Join(userSSHKeyDir, userutils.SSHAuthorizedKeysFileName) - exists, err = file.PathExists(authorizedKeysTempFile) + // Create a guaranteed unique temporary file for authorized_keys as a staging file which we will copy + // into the chroot. + tmpFile, err := os.CreateTemp("", "authorized_keys_*") if err != nil { - logger.Log.Warnf("Error accessing %s file : %v", authorizedKeysTempFile, err) + logger.Log.Warnf("Failed to create temporary authorized_keys file: %v", err) return } - if !exists { - logger.Log.Debugf("File %s does not exist. Creating file...", authorizedKeysTempFile) - err = file.Create(authorizedKeysTempFile, authorizedKeysTempFilePerms) - if err != nil { - logger.Log.Warnf("Failed to create %s file : %v", authorizedKeysTempFile, err) - return - } - } else { - err = os.Truncate(authorizedKeysTempFile, 0) - if err != nil { - logger.Log.Warnf("Failed to truncate %s file : %v", authorizedKeysTempFile, err) - return - } - } + authorizedKeysTempFile := tmpFile.Name() defer os.Remove(authorizedKeysTempFile) + if err = tmpFile.Close(); err != nil { + logger.Log.Warnf("Failed to close temporary authorized_keys file: %v", err) + return + } + allSSHKeys := []string(nil) if includeExistingKeys { diff --git a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go index 3b70a6c9db..8ca24933ba 100644 --- a/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go +++ b/toolkit/tools/imagepkgfetcher/imagepkgfetcher.go @@ -16,6 +16,7 @@ import ( "github.com/microsoft/azurelinux/toolkit/tools/internal/packagerepo/repoutils" "github.com/microsoft/azurelinux/toolkit/tools/internal/pkggraph" "github.com/microsoft/azurelinux/toolkit/tools/internal/pkgjson" + "github.com/microsoft/azurelinux/toolkit/tools/internal/rpm" "github.com/microsoft/azurelinux/toolkit/tools/internal/timestamp" "github.com/microsoft/azurelinux/toolkit/tools/pkg/profile" @@ -49,6 +50,9 @@ var ( inputSummaryFile = app.Flag("input-summary-file", "Path to a file with the summary of packages cloned to be restored").String() outputSummaryFile = app.Flag("output-summary-file", "Path to save the summary of packages cloned").String() + enableGpgCheck = app.Flag("enable-gpg-check", "Enable RPM GPG signature verification for all repositories during package fetching.").Bool() + gpgKeyPaths = app.Flag("gpg-key", "Path to a GPG key file for signature validation. May be specified multiple times. Required if enable-gpg-check is set.").ExistingFiles() + logFlags = exe.SetupLogFlags(app) profFlags = exe.SetupProfileFlags(app) timestampFile = app.Flag("timestamp-file", "File that stores timestamps for this program.").String() @@ -73,6 +77,10 @@ func main() { logger.Log.Fatal("input-graph must be provided if external-only is set.") } + if *enableGpgCheck && len(*gpgKeyPaths) == 0 { + logger.Log.Fatal("--enable-gpg-check requires at least one --gpg-key path") + } + timestamp.StartEvent("initialize and configure cloner", nil) cloner, err := rpmrepocloner.ConstructCloner(*outDir, *tmpDir, *workertar, *existingRpmDir, *existingToolchainRpmDir, *tlsClientCert, *tlsClientKey, *repoFiles, *repoSnapshotTime) @@ -110,6 +118,14 @@ func main() { logger.Log.Panicf("Failed to clone RPM repo. Error: %s", err) } + // Validate GPG signatures of downloaded packages if enabled + if *enableGpgCheck { + err = rpm.ValidateDirectoryRPMSignatures(cloner.CloneDirectory(), *gpgKeyPaths) + if err != nil { + logger.Log.Panicf("Failed to validate RPM signatures. Error: %s", err) + } + } + timestamp.StartEvent("finalize cloned packages", nil) err = cloner.ConvertDownloadedPackagesIntoRepo() diff --git a/toolkit/tools/internal/rpm/rpm.go b/toolkit/tools/internal/rpm/rpm.go index ebd3e8b56d..686cf13b73 100644 --- a/toolkit/tools/internal/rpm/rpm.go +++ b/toolkit/tools/internal/rpm/rpm.go @@ -7,6 +7,7 @@ import ( "bufio" "fmt" "os" + "os/exec" "path/filepath" "regexp" "runtime" @@ -503,6 +504,91 @@ func InstallRPM(rpmFile string) (err error) { return } +const rpmKeysProgram = "rpmkeys" + +// importGPGKeysToRPMDb imports GPG keys into an RPM database for signature verification. +// - rpmDbRoot: path to a directory to use as the RPM database root (will be created if it doesn't exist) +// - gpgKeyPaths: paths to GPG key files to import into the RPM database +// This should be called once before validating multiple RPMs with checkRPMSignature. +func importGPGKeysToRPMDb(rpmDbRoot string, gpgKeyPaths []string) (err error) { + if _, err := exec.LookPath(rpmKeysProgram); err != nil { + return fmt.Errorf("%s command not found - explicit GPG signature enforcement requires this tool:\n%w", rpmKeysProgram, err) + } + for _, keyPath := range gpgKeyPaths { + _, stderr, importErr := shell.Execute(rpmKeysProgram, "--root", rpmDbRoot, "--import", keyPath) + if importErr != nil { + return fmt.Errorf("failed to import GPG key (%s) into RPM database: %v:\n%w", keyPath, stderr, importErr) + } + } + return nil +} + +// checkRPMSignature validates the GPG signature of an RPM file. +// - rpmFile: path to the RPM file to validate +// - rpmDbRoot: path to a directory used as the RPM database root (must have GPG keys already imported via importGPGKeysToRpmDb) +// Returns an error if the RPM signature is missing or invalid. +func checkRPMSignature(rpmFile string, rpmDbRoot string) (err error) { + _, stderr, err := shell.Execute(rpmKeysProgram, "--root", rpmDbRoot, "--checksig", rpmFile, "-D", "%_pkgverify_level signature") + if err != nil { + return fmt.Errorf("RPM signature validation failed for (%s): %v\n%w", rpmFile, stderr, err) + } + return nil +} + +// ValidateDirectoryRPMSignatures validates the GPG signatures of all RPM files in a directory. +// It creates an isolated RPM database, imports the provided GPG keys, and validates each RPM. +// Returns an error if any RPM has a missing or invalid signature. +func ValidateDirectoryRPMSignatures(rpmDir string, gpgKeyPaths []string) (err error) { + logger.Log.Info("Validating GPG signatures of downloaded packages") + + // Create a temporary directory for the isolated RPM database + rpmDbRoot, err := os.MkdirTemp("", "rpm-gpg-check-*") + if err != nil { + return fmt.Errorf("failed to create temporary directory for RPM database:\n%w", err) + } + defer os.RemoveAll(rpmDbRoot) + + // Import GPG keys once before validating all RPMs + err = importGPGKeysToRPMDb(rpmDbRoot, gpgKeyPaths) + if err != nil { + return err + } + + // Find all RPM files in the directory (recursively) + var rpmFiles []string + err = filepath.WalkDir(rpmDir, func(path string, d os.DirEntry, walkErr error) error { + if walkErr != nil { + return walkErr + } + if !d.IsDir() && filepath.Ext(path) == ".rpm" { + rpmFiles = append(rpmFiles, path) + } + return nil + }) + if err != nil { + return fmt.Errorf("failed to find RPM files in (%s):\n%w", rpmDir, err) + } + + if len(rpmFiles) == 0 { + logger.Log.Debug("No RPM files found to validate") + return nil + } + + logger.Log.Infof("Validating %d RPM files", len(rpmFiles)) + + // Validate each RPM + for _, rpmFile := range rpmFiles { + logger.Log.Debugf("Validating signature of: %s", filepath.Base(rpmFile)) + err = checkRPMSignature(rpmFile, rpmDbRoot) + if err != nil { + return fmt.Errorf("GPG signature validation failed:\n%w", err) + } + } + + logger.Log.Info("All downloaded RPMs have valid GPG signatures") + return nil +} + // QueryRPMProvides returns what an RPM file provides. // This includes any provides made by a generator and files provided by the rpm. func QueryRPMProvides(rpmFile string) (provides []string, err error) { diff --git a/toolkit/tools/scheduler/schedulerutils/implicitprovides.go b/toolkit/tools/scheduler/schedulerutils/implicitprovides.go index 826c674615..87d7bee135 100644 --- a/toolkit/tools/scheduler/schedulerutils/implicitprovides.go +++ b/toolkit/tools/scheduler/schedulerutils/implicitprovides.go @@ -38,7 +38,7 @@ func InjectMissingImplicitProvides(res *BuildResult, pkgGraph *pkggraph.PkgGraph } for provide, nodes := range provideToNodes { - err = replaceNodesWithProvides(res, pkgGraph, provide, nodes, rpmFile) + err = replaceNodesWithProvides(pkgGraph, provide, nodes, rpmFile) if err != nil { return } @@ -47,13 +47,16 @@ func InjectMissingImplicitProvides(res *BuildResult, pkgGraph *pkggraph.PkgGraph } } - // Make sure the graph is still a directed acyclic graph (DAG) after manipulating it. - err = pkgGraph.MakeDAG() + if didInjectAny { + // Make sure the graph is still a directed acyclic graph (DAG) after manipulating it. + err = pkgGraph.MakeDAG() + } + return } // replaceNodesWithProvides will replace a slice of nodes with a new node with the given provides in the graph. -func replaceNodesWithProvides(res *BuildResult, pkgGraph *pkggraph.PkgGraph, provides *pkgjson.PackageVer, nodes []*pkggraph.PkgNode, rpmFileProviding string) (err error) { +func replaceNodesWithProvides(pkgGraph *pkggraph.PkgGraph, provides *pkgjson.PackageVer, nodes []*pkggraph.PkgNode, rpmFileProviding string) (err error) { var parentNode *pkggraph.PkgNode // Find a local run node that is backed by the same rpm as the one providing the implicit provide.