Articles / SuSE: New Linux kernel pack…

SuSE: New Linux kernel packages fix remote denial of service

The SUSE Linux Enterprise 11 Service Pack 1 kernel was updated to 2.6.32.43 and fixes various bugs and security issues. The normal mmap paths all avoid creating a mapping where the pgoff inside the mapping could wrap around due to overflow. However, an expanding mremap() can take such a non-wrapping mapping and make it bigger and cause a wrapping condition. A local unprivileged user able to access a NFS filesystem could use file locking to deadlock parts of an nfs server under some circumstance. Fixed a race between ksmd and other memory management code, which could result in a NULL ptr dereference and kernel crash.

In both trigger_scan and sched_scan operations, we were checking for the SSID length before assigning the value correctly. Since the memory was just kzalloced, the check was always failing and SSID with over 32 characters were allowed to go through. This required CAP_NET_ADMIN privileges to be exploited. A malicious user or buggy application could inject diagnosing byte code and trigger an infinite loop in inet_diag_bc_audit(). The code for evaluating LDM partitions contained bugs that could crash the kernel for certain corrupted LDM partitions.

Multiple integer overflows in the next_pidmap function allowed local users to cause a denial of service (system crash). The proc filesystem implementation in the Linux kernel did not restrict access to the /proc directory tree of a process after this process performs an exec of a setuid program, which allowed local users to obtain sensitive information or cause a denial of service via open, lseek, read, and write system calls. When using a setuid root mount.cifs, local users could hijack password protected mounted CIFS shares of other local users. Kernel information via the TPM devices could by used by local attackers to read kernel memory.

The Linux kernel automatically evaluated partition tables of storage devices. The code for evaluating EFI GUID partitions contained a bug that causes a kernel oops on certain corrupted GUID partition tables, which might be used by local attackers to crash the kernel or potentially execute code. In a bluetooth ioctl, struct sco_conninfo has one padding byte in the end. Local variable cinfo of type sco_conninfo was copied to userspace with this uninitialized one byte, leading to an old stack contents leak. In a bluetooth ioctl, struct ca is copied from userspace. It was not checked whether the “device” field was NULL terminated. This potentially leads to BUG() inside of alloc_netdev_mqs() and/or information leak by creating a device with a name made of contents of kernel stack.

In ebtables rule loading, struct tmp is copied from userspace. It was not checked whether the “name” field is NULL terminated. This may have lead to buffer overflow and passing contents of kernel stack as a module name to try_then_request_module() and, consequently, to modprobe commandline. The econet_sendmsg function allowed remote attackers to obtain potentially sensitive information from kernel stack memory by reading uninitialized data in the ah field of an Acorn Universal Networking (AUN) packet. The IPv4 and IPv6 implementations did not place the expected ‘0’ character at the end of string data in the values of certain structure members, which allowed local users to obtain potentially sensitive information from kernel memory by leveraging the CAP_NET_ADMIN capability to issue a crafted request, and then reading the argument to the resulting modprobe process.

Multiple integer overflows allowed local users to trigger buffer overflows, and consequently cause a denial of service (system crash) or possibly have unspecified other impact, via vectors related to calls that specify a large number of memory pages. An integer overflow allowed local users to gain privileges or cause a denial of service (system crash) via a crafted AGPIOC_BIND agp_ioctl ioctl call. The bcm_release function did not properly validate a socket data structure, which allowed local users to cause a denial of service (NULL pointer dereference) or possibly have unspecified other impact via a crafted release operation.

The raw_release function did not properly validate a socket data structure, which allows local users to cause a denial of service (NULL pointer dereference) or possibly have unspecified other impact via a crafted release operation. Updated packages are available from download.opensuse.org.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

______________________________________________________________________________

                       SUSE Security Announcement

       Package:                kernel
       Announcement ID:        SUSE-SA:2011:031
       Date:                   Mon, 25 Jul 2011 12:00:00 +0000
       Affected Products:      SUSE Linux Enterprise High Availability Extension 11 SP1
                               SUSE Linux Enterprise Desktop 11 SP1
                               SUSE Linux Enterprise Server 11 SP1
       Vulnerability Type:     remote denial of service, potential local privilege escalation
       CVSS v2 Base Score:     7.2 (AV:L/AC:L/Au:N/C:C/I:C/A:C)
       SUSE Default Package:   yes
       Cross-References:       CVE-2011-1012, CVE-2011-1017, CVE-2011-1020
                               CVE-2011-1078, CVE-2011-1079, CVE-2011-1080
                               CVE-2011-1160, CVE-2011-1170, CVE-2011-1171
                               CVE-2011-1172, CVE-2011-1173, CVE-2011-1577
                               CVE-2011-1585, CVE-2011-1593, CVE-2011-1598
                               CVE-2011-1745, CVE-2011-1746, CVE-2011-1748
                               CVE-2011-2182, CVE-2011-2183, CVE-2011-2213
                               CVE-2011-2491, CVE-2011-2496, CVE-2011-2517

   Content of This Advisory:
       1) Security Vulnerability Resolved:
            Linux kernel security update
          Problem Description
       2) Solution or Work-Around
       3) Special Instructions and Notes
       4) Package Location and Checksums
       5) Pending Vulnerabilities, Solutions, and Work-Arounds:
           none
       6) Authenticity Verification and Additional Information

______________________________________________________________________________

1) Problem Description and Brief Discussion

  The SUSE Linux Enterprise 11 Service Pack 1 kernel was updated to
  2.6.32.43 and fixes various bugs and security issues.

  Following security issues were fixed:
  CVE-2011-2496: The normal mmap paths all avoid creating a mapping
  where the pgoff inside the mapping could wrap around due to
  overflow. However, an expanding mremap() can take such a non-wrapping
  mapping and make it bigger and cause a wrapping condition.

  CVE-2011-2491: A local unprivileged user able to access a NFS
  filesystem could use file locking to deadlock parts of an nfs server
  under some circumstance.

  CVE-2011-2183: Fixed a race between ksmd and other memory management
  code, which could result in a NULL ptr dereference and kernel crash.

  CVE-2011-2517: In both trigger_scan and sched_scan operations, we were
  checking for the SSID length before assigning the value correctly.
  Since the memory was just kzalloced, the check was always failing
  and SSID with over 32 characters were allowed to go through. This
  required CAP_NET_ADMIN privileges to be exploited.

  CVE-2011-2213: A malicious user or buggy application could
  inject diagnosing byte code and trigger an infinite loop in
  inet_diag_bc_audit().

  CVE-2011-1017,CVE-2011-1012,CVE-2011-2182: The code for evaluating
  LDM partitions (in fs/partitions/ldm.c) contained bugs that could
  crash the kernel for certain corrupted LDM partitions.

  CVE-2011-1593: Multiple integer overflows in the next_pidmap function
  in kernel/pid.c in the Linux kernel allowed local users to cause a
  denial of service (system crash) via a crafted (1) getdents or (2)
  readdir system call.

  CVE-2011-1020: The proc filesystem implementation in the Linux
  kernel did not restrict access to the /proc directory tree of a
  process after this process performs an exec of a setuid program,
  which allowed local users to obtain sensitive information or cause
  a denial of service via open, lseek, read, and write system calls.

  CVE-2011-1585: When using a setuid root mount.cifs, local users could
  hijack password protected mounted CIFS shares of other local users.

  CVE-2011-1160: Kernel information via the TPM devices could by used
  by local attackers to read kernel memory.

  CVE-2011-1577: The Linux kernel automatically evaluated partition
  tables of storage devices. The code for evaluating EFI GUID partitions
  (in fs/partitions/efi.c) contained a bug that causes a kernel oops
  on certain corrupted GUID partition tables, which might be used by
  local attackers to crash the kernel or potentially execute code.

  CVE-2011-1078: In a bluetooth ioctl, struct sco_conninfo has one
  padding byte in the end. Local variable cinfo of type sco_conninfo
  was copied to userspace with this uninitialized one byte, leading to
  an old stack contents leak.

  CVE-2011-1079: In a bluetooth ioctl, struct ca is copied
  from userspace.  It was not checked whether the "device" field
  was NULL terminated.  This potentially leads to BUG() inside of
  alloc_netdev_mqs() and/or information leak by creating a device with
  a name made of contents of kernel stack.

  CVE-2011-1080: In ebtables rule loading, struct tmp is copied
  from userspace.  It was not checked whether the "name" field is
  NULL terminated. This may have lead to buffer overflow and passing
  contents of kernel stack as a module name to try_then_request_module()
  and, consequently, to modprobe commandline.  It would be seen by all
  userspace processes.

  CVE-2011-1173: The econet_sendmsg function in net/econet/af_econet.c
  in the Linux kernel on the x86_64 platform allowed remote attackers
  to obtain potentially sensitive information from kernel stack memory
  by reading uninitialized data in the ah field of an Acorn Universal
  Networking (AUN) packet.

  CVE-2011-1170: net/ipv4/netfilter/arp_tables.c in the IPv4
  implementation in the Linux kernel did not place the expected '0'
  character at the end of string data in the values of certain structure
  members, which allowed local users to obtain potentially sensitive
  information from kernel memory by leveraging the CAP_NET_ADMIN
  capability to issue a crafted request, and then reading the argument
  to the resulting modprobe process.

  CVE-2011-1171: net/ipv4/netfilter/ip_tables.c in the IPv4
  implementation in the Linux kernel did not place the expected '0'
  character at the end of string data in the values of certain structure
  members, which allowed local users to obtain potentially sensitive
  information from kernel memory by leveraging the CAP_NET_ADMIN
  capability to issue a crafted request, and then reading the argument
  to the resulting modprobe process.

  CVE-2011-1172: net/ipv6/netfilter/ip6_tables.c in the IPv6
  implementation in the Linux kernel did not place the expected '0'
  character at the end of string data in the values of certain structure
  members, which allowed local users to obtain potentially sensitive
  information from kernel memory by leveraging the CAP_NET_ADMIN
  capability to issue a crafted request, and then reading the argument
  to the resulting modprobe process.

  CVE-2011-1746: Multiple integer overflows in the (1)
  agp_allocate_memory and (2) agp_create_user_memory functions in
  drivers/char/agp/generic.c in the Linux kernel before allowed local
  users to trigger buffer overflows, and consequently cause a denial of
  service (system crash) or possibly have unspecified other impact, via
  vectors related to calls that specify a large number of memory pages.

  CVE-2011-1745: Integer overflow in the agp_generic_insert_memory
  function in drivers/char/agp/generic.c in the Linux kernel allowed
  local users to gain privileges or cause a denial of service (system
  crash) via a crafted AGPIOC_BIND agp_ioctl ioctl call.

  CVE-2011-1598: The bcm_release function in net/can/bcm.c in the Linux
  kernel did not properly validate a socket data structure, which allowed
  local users to cause a denial of service (NULL pointer dereference) or
  possibly have unspecified other impact via a crafted release operation.

  CVE-2011-1748: The raw_release function in net/can/raw.c in the Linux
  kernel did not properly validate a socket data structure, which allows
  local users to cause a denial of service (NULL pointer dereference) or
  possibly have unspecified other impact via a crafted release operation.

2) Solution or Work-Around

  There is no known workaround, please install the update packages.

3) Special Instructions and Notes

  Please reboot the machine after installing the update.

4) Package Location and Checksums

  The preferred method for installing security updates is to use the YaST
  "Online Update" module or the "zypper" commandline tool. The package and
  patch management stack will detect which updates are required and
  automatically perform the necessary steps to verify and install them.

  Alternatively, download the update packages for your distribution manually
  and verify their integrity by the methods listed in Section 6 of this
  announcement. Then install the packages using the command

    rpm -Fhv <file.rpm>

  to apply the update, replacing <file.rpm> with the filename of the
  downloaded RPM package.

  Our maintenance customers are notified individually. The packages are
  offered for installation from the maintenance web:

  SUSE Linux Enterprise High Availability Extension 11 SP1
    http://download.novell.com/patch/finder/?keywords=318b8dd82438317a3b490cab811b1fe6
    http://download.novell.com/patch/finder/?keywords=ab6bc73efff4bb12a70b6df584f7073f
    http://download.novell.com/patch/finder/?keywords=a6c7e8b67f942c75a3f7e6e76641ff63
    http://download.novell.com/patch/finder/?keywords=fa5f3b489f8749e53517f2679345ee47
    http://download.novell.com/patch/finder/?keywords=5d69352e58309ed0c7848b758f17d637

  SUSE Linux Enterprise Desktop 11 SP1
    http://download.novell.com/patch/finder/?keywords=318b8dd82438317a3b490cab811b1fe6
    http://download.novell.com/patch/finder/?keywords=5d69352e58309ed0c7848b758f17d637

  SUSE Linux Enterprise Server 11 SP1
    http://download.novell.com/patch/finder/?keywords=318b8dd82438317a3b490cab811b1fe6
    http://download.novell.com/patch/finder/?keywords=ab6bc73efff4bb12a70b6df584f7073f
    http://download.novell.com/patch/finder/?keywords=a6c7e8b67f942c75a3f7e6e76641ff63
    http://download.novell.com/patch/finder/?keywords=fa5f3b489f8749e53517f2679345ee47
    http://download.novell.com/patch/finder/?keywords=5d69352e58309ed0c7848b758f17d637

______________________________________________________________________________

5) Pending Vulnerabilities, Solutions, and Work-Arounds:

  none
______________________________________________________________________________

6) Authenticity Verification and Additional Information

 - Announcement authenticity verification:

   SUSE security announcements are published via mailing lists and on Web
   sites. The authenticity and integrity of a SUSE security announcement is
   guaranteed by a cryptographic signature in each announcement. All SUSE
   security announcements are published with a valid signature.

   To verify the signature of the announcement, save it as text into a file
   and run the command

     gpg --verify <file>

   replacing <file> with the name of the file where you saved the
   announcement. The output for a valid signature looks like:

     gpg: Signature made <DATE> using RSA key ID 3D25D3D9
     gpg: Good signature from "SuSE Security Team <security@suse.de>"

   where <DATE> is replaced by the date the document was signed.

   If the security team's key is not contained in your key ring, you can
   import it from the first installation CD. To import the key, use the
   command

     gpg --import gpg-pubkey-3d25d3d9-36e12d04.asc

 - Package authenticity verification:

   SUSE update packages are available on many mirror FTP servers all over the
   world. While this service is considered valuable and important to the free
   and open source software community, the authenticity and the integrity of
   a package needs to be verified to ensure that it has not been tampered
   with.

   The internal rpm package signatures provide an easy way to verify the
   authenticity of an RPM package. Use the command

    rpm -v --checksig <file.rpm>

   to verify the signature of the package, replacing <file.rpm> with the
   filename of the RPM package downloaded. The package is unmodified if it
   contains a valid signature from build@suse.de with the key ID 9C800ACA.

   This key is automatically imported into the RPM database (on
   RPMv4-based distributions) and the gpg key ring of 'root' during
   installation. You can also find it on the first installation CD and at
   the end of this announcement.

 - SUSE runs two security mailing lists to which any interested party may
   subscribe:

   opensuse-security@opensuse.org
       -   General Linux and SUSE security discussion.
           All SUSE security announcements are sent to this list.
           To subscribe, send an e-mail to
               <opensuse-security+subscribe@opensuse.org>.

   opensuse-security-announce@opensuse.org
       -   SUSE's announce-only mailing list.
           Only SUSE's security announcements are sent to this list.
           To subscribe, send an e-mail to
               <opensuse-security-announce+subscribe@opensuse.org>.

   =====================================================================
   SUSE's security contact is <security@suse.com> or <security@suse.de>.
   The <security@suse.de> public key is listed below.
   =====================================================================
______________________________________________________________________________

   The information in this advisory may be distributed or reproduced,
   provided that the advisory is not modified in any way. In particular, the
   clear text signature should show proof of the authenticity of the text.

   SUSE Linux Products GmbH provides no warranties of any kind whatsoever
   with respect to the information contained in this security advisory.

Type Bits/KeyID     Date       User ID
pub  2048R/3D25D3D9 1999-03-06 SuSE Security Team <security@suse.de>
pub  1024D/9C800ACA 2000-10-19 SuSE Package Signing Key <build@suse.de>

- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2 (GNU/Linux)

mQENAzbhLQQAAAEIAKAkXHe0lWRBXLpn38hMHy03F0I4Sszmoc8aaKJrhfhyMlOA
BqvklPLE2f9UrI4Xc860gH79ZREwAgPt0pi6+SleNFLNcNFAuuHMLQOOsaMFatbz
JR9i4m/lf6q929YROu5zB48rBAlcfTm+IBbijaEdnqpwGib45wE/Cfy6FAttBHQh
1Kp+r/jPbf1mYAvljUfHKuvbg8t2EIQz/5yGp+n5trn9pElfQO2cRBq8LFpf1l+U
P7EKjFmlOq+Gs/fF98/dP3DfniSd78LQPq5vp8RL8nr/o2i7jkAQ33m4f1wOBWd+
cZovrKXYlXiR+Bf7m2hpZo+/sAzhd7LmAD0l09kABRG0JVN1U0UgU2VjdXJpdHkg
VGVhbSA8c2VjdXJpdHlAc3VzZS5kZT6JARUDBRA24S1H5Fiyh7HKPEUBAVcOB/9b
yHYji1/+4Xc2GhvXK0FSJN0MGgeXgW47yxDL7gmR4mNgjlIOUHZj0PEpVjWepOJ7
tQS3L9oP6cpj1Fj/XxuLbkp5VCQ61hpt54coQAvYrnT9rtWEGN+xmwejT1WmYmDJ
xG+EGBXKr+XP69oIUl1E2JO3rXeklulgjqRKos4cdXKgyjWZ7CP9V9daRXDtje63
Om8gwSdU/nCvhdRIWp/Vwbf7Ia8iZr9OJ5YuQl0DBG4qmGDDrvImgPAFkYFzwlqo
choXFQ9y0YVCV41DnR+GYhwl2qBd81T8aXhihEGPIgaw3g8gd8B5o6mPVgl+nJqI
BkEYGBusiag2pS6qwznZiQEVAwUQNuEtBHey5gA9JdPZAQFtOAf+KVh939b0J94u
v/kpg4xs1LthlhquhbHcKNoVTNspugiC3qMPyvSX4XcBr2PC0cVkS4Z9PY9iCfT+
x9WM96g39dAF+le2CCx7XISk9XXJ4ApEy5g4AuK7NYgAJd39PPbERgWnxjxir9g0
Ix30dS30bW39D+3NPU5Ho9TD/B7UDFvYT5AWHl3MGwo3a1RhTs6sfgL7yQ3U+mvq
MkTExZb5mfN1FeaYKMopoI4VpzNVeGxQWIz67VjJHVyUlF20ekOz4kWVgsxkc8G2
saqZd6yv2EwqYTi8BDAduweP33KrQc4KDDommQNDOXxaKOeCoESIdM4p7Esdjq1o
L0oixF12CohGBBARAgAGBQI7HmHDAAoJEJ5A4xAACqukTlQAoI4QzP9yjPohY7OU
F7J3eKBTzp25AJ42BmtSd3pvm5ldmognWF3Trhp+GYkAlQMFEDe3O8IWkDf+zvyS
FQEBAfkD/3GG5UgJj18UhYmh1gfjIlDcPAeqMwSytEHDENmHC+vlZQ/p0mT9tPiW
tp34io54mwr+bLPN8l6B5GJNkbGvH6M+mO7R8Lj4nHL6pyAv3PQr83WyLHcaX7It
Klj371/4yzKV6qpz43SGRK4MacLo2rNZ/dNej7lwPCtzCcFYwqkiiEYEEBECAAYF
AjoaQqQACgkQx1KqMrDf94ArewCfWnTUDG5gNYkmHG4bYL8fQcizyA4An2eVo/n+
3J2KRWSOhpAMsnMxtPbBmQGiBDnu9IERBACT8Y35+2vv4MGVKiLEMOl9GdST6MCk
YS3yEKeueNWc+z/0Kvff4JctBsgs47tjmiI9sl0eHjm3gTR8rItXMN6sJEUHWzDP
+Y0PFPboMvKx0FXl/A0dM+HFrruCgBlWt6FA+okRySQiliuI5phwqkXefl9AhkwR
8xocQSVCFxcwvwCglVcOQliHu8jwRQHxlRE0tkwQQI0D+wfQwKdvhDplxHJ5nf7U
8c/yE/vdvpN6lF0tmFrKXBUX+K7u4ifrZlQvj/81M4INjtXreqDiJtr99Rs6xa0S
cZqITuZC4CWxJa9GynBED3+D2t1V/f8l0smsuYoFOF7Ib49IkTdbtwAThlZp8bEh
ELBeGaPdNCcmfZ66rKUdG5sRA/9ovnc1krSQF2+sqB9/o7w5/q2qiyzwOSTnkjtB
UVKn4zLUOf6aeBAoV6NMCC3Kj9aZHfA+ND0ehPaVGJgjaVNFhPi4x0e7BULdvgOo
AqajLfvkURHAeSsxXIoEmyW/xC1sBbDkDUIBSx5oej73XCZgnj/inphRqGpsb+1n
KFvF+rQoU3VTRSBQYWNrYWdlIFNpZ25pbmcgS2V5IDxidWlsZEBzdXNlLmRlPohi
BBMRAgAiBQJA2AY+AhsDBQkObd+9BAsHAwIDFQIDAxYCAQIeAQIXgAAKCRCoTtro
nIAKypCfAJ9RuZ6ZSV7QW4pTgTIxQ+ABPp0sIwCffG9bCNnrETPlgOn+dGEkAWeg
KL+IRgQQEQIABgUCOnBeUgAKCRCeQOMQAAqrpNzOAKCL512FZvv4VZx94TpbA9lx
yoAejACeOO1HIbActAevk5MUBhNeLZa/qM2JARUDBRA6cGBvd7LmAD0l09kBATWn
B/9An5vfiUUE1VQnt+T/EYklES3tXXaJJp9pHMa4fzFa8jPVtv5UBHGee3XoUNDV
wM2OgSEISZxbzdXGnqIlcT08TzBUD9i579uifklLsnr35SJDZ6ram51/CWOnnaVh
UzneOA9gTPSr+/fT3WeVnwJiQCQ30kNLWVXWATMnsnT486eAOlT6UNBPYQLpUprF
5Yryk23pQUPAgJENDEqeU6iIO9Ot1ZPtB0lniw+/xCi13D360o1tZDYOp0hHHJN3
D3EN8C1yPqZd5CvvznYvB6bWBIpWcRgdn2DUVMmpU661jwqGlRz1F84JG/xe4jGu
zgpJt9IXSzyohEJB6XG5+D0BuQINBDnu9JIQCACEkdBN6Mxf5WvqDWkcMRy6wnrd
9DYJ8UUTmIT2iQf07tRUKJJ9v0JXfx2Z4d08IQSMNRaq4VgSe+PdYgIy0fbj23Vi
a5/gO7fJEpD2hd2f+pMnOWvH2rOOIbeYfuhzAc6BQjAKtmgR0ERUTafTM9Wb6F13
CNZZNZfDqnFDP6L12w3z3F7FFXkz07Rs3AIto1ZfYZd4sCSpMr/0S5nLrHbIvGLp
271hhQBeRmmoGEKO2JRelGgUJ2CUzOdtwDIKT0LbCpvaP8PVnYF5IFoYJIWRHqlE
t5ucTXstZy7vYjL6vTP4l5xs+LIOkNmPhqmfsgLzVo0UaLt80hOwc4NvDCOLAAMG
B/9g+9V3ORzw4LvO1pwRYJqfDKUq/EJ0rNMMD4N8RLpZRhKHKJUm9nNHLbksnlZw
rbSTM5LpC/U6sheLP+l0bLVoq0lmsCcUSyh+mY6PxWirLIWCn/IAZAGnXb6Zd6Tt
IJlGG6pqUN8QxGJYQnonl0uTJKHJENbI9sWHQdcTtBMc34gorHFCo1Bcvpnc1LFL
rWn7mfoGx6INQjf3HGQpMXAWuSBQhzkazY6vaWFpa8bBJ+gKbBuySWzNm3rFtT5H
RKMWpO+M9bHp4d+puY0L1YwN1OMatcMMpcWnZpiWiR83oi32+xtWUY2U7Ae38mMa
g8zFbpeqPQUsDv9V7CAJ1dbriEwEGBECAAwFAkDYBnoFCQ5t3+gACgkQqE7a6JyA
CspnpgCfRbYwxT3iq+9l/PgNTUNTZOlof2oAn25y0eGi0371jap9kOV6uq71sUuO
=ypVs
- -----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)

iQEVAwUBTi1tUney5gA9JdPZAQKsWQf/X+8u9Cc7K9XEpaNXdPlhPka91IyfMWW5
9Qm7MbSmVWi8efmRKqTdMEee/2YTVyzJj472x7fAD06uBcMK2CF8GesZ+zs70Fle
lRdljpI+BC0PK1Dswpp6TS4rjrjX3T7baFE1PSKXSo5d1H2MJHoc20ik+cNbEtAt
ObaXJrPnSKRh82e3anq+pyGgdcl4ykfOS550dsAzkyM9Nt+MzenI3/cLYjLqfUPa
kPYs9nWTcghATusqMY9KlQlHHHFpEDzv8gQMx+d1iOjQ9F3nhKnQrIGSr+UFXGNH
+xQ2dCt/SKVOK285DkZqYzPN64GkpturPkrJVaFWKiAaU9o1Xfzhpw==
=VjG8
-----END PGP SIGNATURE-----
Screenshot

Project Spotlight

Kigo Video Converter Ultimate for Mac

A tool for converting and editing videos.

Screenshot

Project Spotlight

Kid3

An efficient tagger for MP3, Ogg/Vorbis, and FLAC files.