summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbsiegert <bsiegert@pkgsrc.org>2020-08-28 19:05:42 +0000
committerbsiegert <bsiegert@pkgsrc.org>2020-08-28 19:05:42 +0000
commited3920f9046ae46acc0c97fb7b1e017a21f6521c (patch)
tree3bf7d1e8b57ff2ffdc7789a101a5cd1f946b0d96
parent3d74571df0ecbafef9f8cbde30bbecdde273eaf3 (diff)
downloadpkgsrc-ed3920f9046ae46acc0c97fb7b1e017a21f6521c.tar.gz
Pullup ticket #6313 - requested by wiz
security/tor-browser: security fix Revisions pulled up: - security/tor-browser/Makefile 1.71,1.74 - security/tor-browser/distinfo 1.26,1.28 - security/tor-browser/options.mk 1.7 - security/tor-browser/patches/patch-config_makefiles_rust.mk 1.2 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_lib.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs 1.1 - security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs 1.1 --- Module Name: pkgsrc Committed By: riastradh Date: Mon Aug 17 06:58:02 UTC 2020 Modified Files: pkgsrc/security/tor-browser: Makefile options.mk Log Message: security/tor-browser: Make dbus an option. --- Module Name: pkgsrc Committed By: riastradh Date: Mon Aug 17 06:58:32 UTC 2020 Modified Files: pkgsrc/security/tor-browser: distinfo Added Files: pkgsrc/security/tor-browser/patches: patch-dom_webauthn_u2f-hid-rs_src_lib.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs Log Message: security/tor-browser: Add U2F support to NetBSD. The webauthn API is disabled by default in the Tor Browser: https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/26614 In order to use it, risking the consequences since the Tor Project has not audited its anonymity properties, you have to explicitly enable security.webauthn.webauthn=true in about:config. So if you definitely want to log into a web site using U2F in spite of that, with location privacy but not anonymity, then these patches now enable it to work on NetBSD (with the caveat that enabling security.webauthn.webauthn=true applies also to any web site that tries to use the webauthn API, not just the ones you want to log into). --- Module Name: pkgsrc Committed By: wiz Date: Wed Aug 26 20:55:20 UTC 2020 Modified Files: pkgsrc/security/tor-browser: Makefile distinfo pkgsrc/security/tor-browser/patches: patch-config_makefiles_rust.mk Log Message: tor-browser: update to 9.5.4. This release updates Firefox to 68.12.0esr. Also, this release features important security updates to Firefox.
-rw-r--r--security/tor-browser/Makefile7
-rw-r--r--security/tor-browser/distinfo26
-rw-r--r--security/tor-browser/options.mk13
-rw-r--r--security/tor-browser/patches/patch-config_makefiles_rust.mk17
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_lib.rs34
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs141
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs54
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs17
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs96
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs57
-rw-r--r--security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs86
11 files changed, 532 insertions, 16 deletions
diff --git a/security/tor-browser/Makefile b/security/tor-browser/Makefile
index 0f981359e55..0aa679db3d5 100644
--- a/security/tor-browser/Makefile
+++ b/security/tor-browser/Makefile
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.68.2.2 2020/07/30 16:10:24 bsiegert Exp $
+# $NetBSD: Makefile,v 1.68.2.3 2020/08/28 19:05:42 bsiegert Exp $
-DISTNAME= src-firefox-tor-browser-68.11.0esr-9.5-1-build1
-PKGNAME= tor-browser-9.5.3
+DISTNAME= src-firefox-tor-browser-68.12.0esr-9.5-1-build1
+PKGNAME= tor-browser-9.5.4
CATEGORIES= security www
MASTER_SITES= https://dist.torproject.org/torbrowser/${PKGVERSION_NOREV}/
EXTRACT_SUFX= .tar.xz
@@ -128,5 +128,4 @@ post-install:
${DESTDIR}${PREFIX}/lib/tor-browser/browser/fonts
.include "../../sysutils/desktop-file-utils/desktopdb.mk"
-.include "../../sysutils/dbus-glib/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/security/tor-browser/distinfo b/security/tor-browser/distinfo
index 22da56bc5e9..212fe63fb55 100644
--- a/security/tor-browser/distinfo
+++ b/security/tor-browser/distinfo
@@ -1,21 +1,29 @@
-$NetBSD: distinfo,v 1.23.2.2 2020/07/30 16:10:24 bsiegert Exp $
+$NetBSD: distinfo,v 1.23.2.3 2020/08/28 19:05:42 bsiegert Exp $
-SHA1 (src-firefox-tor-browser-68.11.0esr-9.5-1-build1.tar.xz) = be69e804180d7cc1fb500b1a497f79ab41c4f0db
-RMD160 (src-firefox-tor-browser-68.11.0esr-9.5-1-build1.tar.xz) = 625ab420108a64c3f50f2c482190ece3afcbd974
-SHA512 (src-firefox-tor-browser-68.11.0esr-9.5-1-build1.tar.xz) = 8feb9e165f5b7ef80d944b950ec499c15414fd00b4684bca6d5f5019727d21eba46072d5ee416ab0f86b3cae24aa4ba894933a3efbf7b8818cbd956284c1e9ba
-Size (src-firefox-tor-browser-68.11.0esr-9.5-1-build1.tar.xz) = 348642008 bytes
-SHA1 (tor-browser-linux64-9.5.3_en-US.tar.xz) = 5f32789cb9c648cfdfeba93810d45b11c6f5402e
-RMD160 (tor-browser-linux64-9.5.3_en-US.tar.xz) = 27f63a7d8672db669d58ce66b80116903a0c482c
-SHA512 (tor-browser-linux64-9.5.3_en-US.tar.xz) = 760673a0b40c905ec2866a030f4de9c33240cb9138e8af38a28d8527899d9477a8afbe436eda0ff72cc125cd8a5db75cb88efdc8027a0db4ee91f3be363eed90
-Size (tor-browser-linux64-9.5.3_en-US.tar.xz) = 79021184 bytes
+SHA1 (src-firefox-tor-browser-68.12.0esr-9.5-1-build1.tar.xz) = 2d6081a8ad82e3095970f1d1a41f130024454e3d
+RMD160 (src-firefox-tor-browser-68.12.0esr-9.5-1-build1.tar.xz) = 7c262331bfc168604d03f8f59ef7f349055f4f5b
+SHA512 (src-firefox-tor-browser-68.12.0esr-9.5-1-build1.tar.xz) = 4674308ff40a65859c892a9a4e01e1506daded409e761c4ddb24d4f98ec73b63c86d2d051b05b1b8655dd5df894a59117752ee2e9a0c3e643577a3576c62aab3
+Size (src-firefox-tor-browser-68.12.0esr-9.5-1-build1.tar.xz) = 348639116 bytes
+SHA1 (tor-browser-linux64-9.5.4_en-US.tar.xz) = 8f4665912642c86e1161b788a7398478952107d8
+RMD160 (tor-browser-linux64-9.5.4_en-US.tar.xz) = 53025eff780989ece3f7089d272c1b6623519e6b
+SHA512 (tor-browser-linux64-9.5.4_en-US.tar.xz) = 2b69874c476e78c88eeae795cf530ed67b4319535dfbe092bb1e5cb83b9f1a021ea568ed1efeb61b0b5475d90495b3fd3005c51ec2d75d46c893b225e236dd66
+Size (tor-browser-linux64-9.5.4_en-US.tar.xz) = 79033640 bytes
SHA1 (patch-.mozconfig) = 66fbb2f113091eee1f022cd656231f845b04b0f8
SHA1 (patch-aa) = 9f7200c411cd2217a80ec10a276c8877bc6b845c
SHA1 (patch-browser_app_profile_000-tor-browser.js) = 84a0a15605fff0e22f3150bce901a296fc920280
SHA1 (patch-browser_app_profile_firefox.js) = cf93582b68b8d4e72c3c25682ab9138e185418c8
SHA1 (patch-build_moz.configure_rust.configure) = b57a9b1451dc426d75774f73d7c05fc98fe6e317
SHA1 (patch-config_gcc-stl-wrapper.template.h) = 11b45e0c7a9399c5b74b170648280a388dd67d89
+SHA1 (patch-config_makefiles_rust.mk) = 41f88d91b3ebcc55085b3e6c37f9ec2995fc9c7b
SHA1 (patch-dom_base_nsAttrName.h) = ac7ba441a3b27df2855cf2673eea36b1cb44ad49
SHA1 (patch-dom_media_CubebUtils.cpp) = 3cd2c65ab281d802c56216565970450767a3fb24
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_lib.rs) = c0dfe8b1e7ebbc7c1d6066c204030f13b063b8d7
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs) = 091ffab5bd6a15425acb2ab023cc26f6b23324c6
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs) = 57f5c3c879b07375234e5cb0cbe0469b15105a6a
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs) = 7160fc9fe6d197b42104856b997337f823d2a791
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs) = 527722bd4fbf0aca07d710e0a8b73f95b2adad40
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs) = aeafe7c1df614bb5e46cb7fb1cb351001f292caf
+SHA1 (patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs) = c1d2157350803fb3eaef6f7a00e7c81dd9cf708b
SHA1 (patch-gfx_angle_checkout_src_common_third__party_smhasher_src_PMurHash.cpp) = e458c9c8dc66edc69c1874734af28a77fc5e3993
SHA1 (patch-gfx_angle_checkout_src_compiler_translator_InfoSink.h) = 2f73c76c48852613e0c55c1680fcc2a9eb3cf4ef
SHA1 (patch-gfx_gl_GLContextProviderGLX.cpp) = 2c909a10a341e600392417240ad0c556f495d6ba
diff --git a/security/tor-browser/options.mk b/security/tor-browser/options.mk
index a216e3b3a3f..a535018006b 100644
--- a/security/tor-browser/options.mk
+++ b/security/tor-browser/options.mk
@@ -1,9 +1,9 @@
-# $NetBSD: options.mk,v 1.6 2020/06/07 13:06:00 wiz Exp $
+# $NetBSD: options.mk,v 1.6.2.1 2020/08/28 19:05:42 bsiegert Exp $
PKG_OPTIONS_VAR= PKG_OPTIONS.tor-browser
-PKG_SUPPORTED_OPTIONS+= alsa debug debug-info mozilla-jemalloc pulseaudio
+PKG_SUPPORTED_OPTIONS+= alsa dbus debug debug-info mozilla-jemalloc pulseaudio
-PKG_SUGGESTED_OPTIONS.Linux+= alsa mozilla-jemalloc
+PKG_SUGGESTED_OPTIONS.Linux+= alsa dbus mozilla-jemalloc
.include "../../mk/bsd.fast.prefs.mk"
@@ -20,6 +20,13 @@ CONFIGURE_ARGS+= --enable-alsa
CONFIGURE_ARGS+= --disable-alsa
.endif
+.if !empty(PKG_OPTIONS:Mdbus)
+CONFIGURE_ARGS+= --enable-dbus
+.include "../../sysutils/dbus-glib/buildlink3.mk"
+.else
+CONFIGURE_ARGS+= --disable-dbus
+.endif
+
.if !empty(PKG_OPTIONS:Mmozilla-jemalloc)
CONFIGURE_ARGS+= --enable-jemalloc
.else
diff --git a/security/tor-browser/patches/patch-config_makefiles_rust.mk b/security/tor-browser/patches/patch-config_makefiles_rust.mk
new file mode 100644
index 00000000000..dd1bd0245cf
--- /dev/null
+++ b/security/tor-browser/patches/patch-config_makefiles_rust.mk
@@ -0,0 +1,17 @@
+$NetBSD: patch-config_makefiles_rust.mk,v 1.2.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+NetBSD<10 doesn't get along with parallel rust builds (it causes issues
+with ld.so) which are the default. Force -j1.
+
+--- config/makefiles/rust.mk.orig 2020-08-18 09:41:09.000000000 +0000
++++ config/makefiles/rust.mk
+@@ -59,6 +59,9 @@ endif
+ ifdef CARGO_INCREMENTAL
+ export CARGO_INCREMENTAL
+ endif
++ifeq ($(OS_ARCH),NetBSD)
++cargo_build_flags += -j1
++endif
+
+ rustflags_neon =
+ ifeq (neon,$(MOZ_FPU))
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_lib.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_lib.rs
new file mode 100644
index 00000000000..5b9eb12ba48
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_lib.rs
@@ -0,0 +1,34 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_lib.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/lib.rs.orig 2020-06-22 22:55:03.000000000 +0000
++++ dom/webauthn/u2f-hid-rs/src/lib.rs
+@@ -5,7 +5,7 @@
+ #[macro_use]
+ mod util;
+
+-#[cfg(any(target_os = "linux", target_os = "freebsd"))]
++#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "netbsd"))]
+ pub mod hidproto;
+
+ #[cfg(any(target_os = "linux"))]
+@@ -22,6 +22,10 @@ extern crate devd_rs;
+ #[path = "freebsd/mod.rs"]
+ pub mod platform;
+
++#[cfg(any(target_os = "netbsd"))]
++#[path = "netbsd/mod.rs"]
++pub mod platform;
++
+ #[cfg(any(target_os = "macos"))]
+ extern crate core_foundation;
+
+@@ -36,6 +40,7 @@ pub mod platform;
+ #[cfg(not(any(
+ target_os = "linux",
+ target_os = "freebsd",
++ target_os = "netbsd",
+ target_os = "macos",
+ target_os = "windows"
+ )))]
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs
new file mode 100644
index 00000000000..a9370ea64f1
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs
@@ -0,0 +1,141 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_device.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/device.rs.orig 2020-07-15 16:19:08.142403669 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/device.rs
+@@ -0,0 +1,134 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++extern crate libc;
++
++use std::mem;
++use std::io::Read;
++use std::io::Write;
++use std::io;
++
++use consts::CID_BROADCAST;
++use consts::HID_RPT_SIZE;
++use platform::fd::Fd;
++use platform::uhid;
++use u2ftypes::U2FDevice;
++use util::io_err;
++
++#[derive(Debug)]
++pub struct Device {
++ fd: Fd,
++ cid: [u8; 4],
++}
++
++impl Device {
++ pub fn new(fd: Fd) -> io::Result<Self> {
++ Ok(Self { fd, cid: CID_BROADCAST })
++ }
++
++ pub fn is_u2f(&mut self) -> bool {
++ if !uhid::is_u2f_device(&self.fd) {
++ return false;
++ }
++ // This step is not strictly necessary -- NetBSD puts fido
++ // devices into raw mode automatically by default, but in
++ // principle that might change, and this serves as a test to
++ // verify that we're running on a kernel with support for raw
++ // mode at all so we don't get confused issuing writes that try
++ // to set the report descriptor rather than transfer data on
++ // the output interrupt pipe as we need.
++ match uhid::hid_set_raw(&self.fd, true) {
++ Ok(_) => (),
++ Err(_) => return false,
++ }
++ if let Err(_) = self.ping() {
++ return false;
++ }
++ true
++ }
++
++ fn ping(&mut self) -> io::Result<()> {
++ for i in 0..10 {
++ let mut buf = vec![0u8; 1 + HID_RPT_SIZE];
++
++ buf[0] = 0; // report number
++ buf[1] = 0xff; // CID_BROADCAST
++ buf[2] = 0xff;
++ buf[3] = 0xff;
++ buf[4] = 0xff;
++ buf[5] = 0x81; // ping
++ buf[6] = 0;
++ buf[7] = 1; // one byte
++
++ self.write(&buf[..])?;
++
++ // Wait for response
++ let mut pfd: libc::pollfd = unsafe { mem::zeroed() };
++ pfd.fd = self.fd.fileno;
++ pfd.events = libc::POLLIN;
++ let nfds = unsafe { libc::poll(&mut pfd, 1, 100) };
++ if nfds == -1 {
++ return Err(io::Error::last_os_error());
++ }
++ if nfds == 0 {
++ debug!("device timeout {}", i);
++ continue;
++ }
++
++ // Read response
++ self.read(&mut buf[..])?;
++
++ return Ok(());
++ }
++
++ Err(io_err("no response from device"))
++ }
++}
++
++impl PartialEq for Device {
++ fn eq(&self, other: &Device) -> bool {
++ self.fd == other.fd
++ }
++}
++
++impl Read for Device {
++ fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
++ let bufp = buf.as_mut_ptr() as *mut libc::c_void;
++ let nread = unsafe { libc::read(self.fd.fileno, bufp, buf.len()) };
++ if nread == -1 {
++ return Err(io::Error::last_os_error());
++ }
++ Ok(nread as usize)
++ }
++}
++
++impl Write for Device {
++ fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
++ // Always skip the first byte (report number)
++ let data = &buf[1..];
++ let data_ptr = data.as_ptr() as *const libc::c_void;
++ let nwrit = unsafe {
++ libc::write(self.fd.fileno, data_ptr, data.len())
++ };
++ if nwrit == -1 {
++ return Err(io::Error::last_os_error());
++ }
++ // Pretend we wrote the report number byte
++ Ok(nwrit as usize + 1)
++ }
++
++ fn flush(&mut self) -> io::Result<()> {
++ Ok(())
++ }
++}
++
++impl U2FDevice for Device {
++ fn get_cid<'a>(&'a self) -> &'a [u8; 4] {
++ &self.cid
++ }
++
++ fn set_cid(&mut self, cid: [u8; 4]) {
++ self.cid = cid;
++ }
++}
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs
new file mode 100644
index 00000000000..3f80d89cacd
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs
@@ -0,0 +1,54 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_fd.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/fd.rs.orig 2020-07-15 16:19:08.142740434 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/fd.rs
+@@ -0,0 +1,47 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++extern crate libc;
++
++use std::ffi::CString;
++use std::io;
++use std::mem;
++use std::os::raw::c_int;
++use std::os::unix::io::RawFd;
++
++#[derive(Debug)]
++pub struct Fd {
++ pub fileno: RawFd,
++}
++
++impl Fd {
++ pub fn open(path: &str, flags: c_int) -> io::Result<Fd> {
++ let cpath = CString::new(path.as_bytes())?;
++ let rv = unsafe { libc::open(cpath.as_ptr(), flags) };
++ if rv == -1 {
++ return Err(io::Error::last_os_error());
++ }
++ Ok(Fd { fileno: rv })
++ }
++}
++
++impl Drop for Fd {
++ fn drop(&mut self) {
++ unsafe { libc::close(self.fileno) };
++ }
++}
++
++impl PartialEq for Fd {
++ fn eq(&self, other: &Fd) -> bool {
++ let mut st: libc::stat = unsafe { mem::zeroed() };
++ let mut sto: libc::stat = unsafe { mem::zeroed() };
++ if unsafe { libc::fstat(self.fileno, &mut st) } == -1 {
++ return false;
++ }
++ if unsafe { libc::fstat(other.fileno, &mut sto) } == -1 {
++ return false;
++ }
++ (st.st_dev == sto.st_dev) & (st.st_ino == sto.st_ino)
++ }
++}
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs
new file mode 100644
index 00000000000..4eca9d4e19a
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs
@@ -0,0 +1,17 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_mod.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/mod.rs.orig 2020-07-15 16:19:08.143016295 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/mod.rs
+@@ -0,0 +1,10 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++pub mod device;
++pub mod transaction;
++
++mod fd;
++mod monitor;
++mod uhid;
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs
new file mode 100644
index 00000000000..044d48c4181
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs
@@ -0,0 +1,96 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_monitor.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/monitor.rs.orig 2020-07-15 16:19:08.143281894 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/monitor.rs
+@@ -0,0 +1,89 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++use std::collections::HashMap;
++use std::ffi::OsString;
++use std::io;
++use std::sync::Arc;
++use std::thread;
++use std::time::Duration;
++
++use runloop::RunLoop;
++
++use platform::fd::Fd;
++
++// XXX Should use drvctl, but it doesn't do pubsub properly yet so
++// DRVGETEVENT requires write access to /dev/drvctl. Instead, for now,
++// just poll every 500ms.
++const POLL_TIMEOUT: u64 = 500;
++
++pub struct Monitor<F>
++where
++ F: Fn(Fd, &dyn Fn() -> bool) + Send + Sync + 'static,
++{
++ runloops: HashMap<OsString, RunLoop>,
++ new_device_cb: Arc<F>,
++}
++
++impl<F> Monitor<F>
++where
++ F: Fn(Fd, &dyn Fn() -> bool) + Send + Sync + 'static,
++{
++ pub fn new(new_device_cb: F) -> Self {
++ Self {
++ runloops: HashMap::new(),
++ new_device_cb: Arc::new(new_device_cb),
++ }
++ }
++
++ pub fn run(&mut self, alive: &dyn Fn() -> bool) -> io::Result<()> {
++ while alive() {
++ for n in 0..100 {
++ let uhidpath = format!("/dev/uhid{}", n);
++ match Fd::open(&uhidpath, libc::O_RDWR | libc::O_CLOEXEC) {
++ Ok(uhid) => {
++ self.add_device(uhid, OsString::from(&uhidpath));
++ },
++ Err(ref err) => {
++ match err.raw_os_error() {
++ Some(libc::EBUSY) => continue,
++ Some(libc::ENOENT) => break,
++ _ => self.remove_device(OsString::from(&uhidpath)),
++ }
++ },
++ }
++ }
++ thread::sleep(Duration::from_millis(POLL_TIMEOUT));
++ }
++ self.remove_all_devices();
++ Ok(())
++ }
++
++ fn add_device(&mut self, fd: Fd, path: OsString) {
++ let f = self.new_device_cb.clone();
++
++ let runloop = RunLoop::new(move |alive| {
++ if alive() {
++ f(fd, alive);
++ }
++ });
++
++ if let Ok(runloop) = runloop {
++ self.runloops.insert(path.clone(), runloop);
++ }
++ }
++
++ fn remove_device(&mut self, path: OsString) {
++ if let Some(runloop) = self.runloops.remove(&path) {
++ runloop.cancel();
++ }
++ }
++
++ fn remove_all_devices(&mut self) {
++ while !self.runloops.is_empty() {
++ let path = self.runloops.keys().next().unwrap().clone();
++ self.remove_device(path);
++ }
++ }
++}
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs
new file mode 100644
index 00000000000..1185ca8a4f1
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs
@@ -0,0 +1,57 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_transaction.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/transaction.rs.orig 2020-07-15 16:19:08.143583561 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/transaction.rs
+@@ -0,0 +1,50 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++use runloop::RunLoop;
++use util::OnceCallback;
++
++use platform::fd::Fd;
++use platform::monitor::Monitor;
++
++pub struct Transaction {
++ // Handle to the thread loop.
++ thread: Option<RunLoop>,
++}
++
++impl Transaction {
++ pub fn new<F, T>(
++ timeout: u64,
++ callback: OnceCallback<T>,
++ new_device_cb: F,
++ ) -> Result<Self, ::Error>
++ where
++ F: Fn(Fd, &dyn Fn() -> bool) + Sync + Send + 'static,
++ T: 'static,
++ {
++ let thread = RunLoop::new_with_timeout(
++ move |alive| {
++ // Create a new device monitor.
++ let mut monitor = Monitor::new(new_device_cb);
++
++ // Start polling for new devices.
++ try_or!(monitor.run(alive), |_| callback.call(Err(::Error::Unknown)));
++
++ // Send an error, if the callback wasn't called already.
++ callback.call(Err(::Error::NotAllowed));
++ },
++ timeout,
++ )
++ .map_err(|_| ::Error::Unknown)?;
++
++ Ok(Self {
++ thread: Some(thread),
++ })
++ }
++
++ pub fn cancel(&mut self) {
++ // This must never be None.
++ self.thread.take().unwrap().cancel();
++ }
++}
diff --git a/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs
new file mode 100644
index 00000000000..b48d9029e96
--- /dev/null
+++ b/security/tor-browser/patches/patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs
@@ -0,0 +1,86 @@
+$NetBSD: patch-dom_webauthn_u2f-hid-rs_src_netbsd_uhid.rs,v 1.1.2.2 2020/08/28 19:05:42 bsiegert Exp $
+
+Add NetBSD support for U2F.
+
+--- dom/webauthn/u2f-hid-rs/src/netbsd/uhid.rs.orig 2020-07-15 16:19:08.143860020 +0000
++++ dom/webauthn/u2f-hid-rs/src/netbsd/uhid.rs
+@@ -0,0 +1,79 @@
++/* 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
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++extern crate libc;
++
++use std::io;
++use std::mem;
++use std::os::raw::c_int;
++use std::os::raw::c_uchar;
++
++use hidproto::ReportDescriptor;
++use hidproto::has_fido_usage;
++use platform::fd::Fd;
++use util::io_err;
++
++/* sys/ioccom.h */
++
++const IOCPARM_MASK: u32 = 0x1fff;
++const IOCPARM_SHIFT: u32 = 16;
++const IOCGROUP_SHIFT: u32 = 8;
++
++//const IOC_VOID: u32 = 0x20000000;
++const IOC_OUT: u32 = 0x40000000;
++const IOC_IN: u32 = 0x80000000;
++//const IOC_INOUT: u32 = IOC_IN|IOC_OUT;
++
++macro_rules! ioctl {
++ ($dir:expr, $name:ident, $group:expr, $nr:expr, $ty:ty) => {
++ unsafe fn $name(fd: libc::c_int, val: *mut $ty)
++ -> io::Result<libc::c_int> {
++ let ioc = ($dir as u32)
++ | ((mem::size_of::<$ty>() as u32 & IOCPARM_MASK)
++ << IOCPARM_SHIFT)
++ | (($group as u32) << IOCGROUP_SHIFT)
++ | ($nr as u32);
++ let rv = libc::ioctl(fd, ioc as libc::c_ulong, val);
++ if rv == -1 {
++ return Err(io::Error::last_os_error());
++ }
++ Ok(rv)
++ }
++ };
++}
++
++#[allow(non_camel_case_types)]
++#[repr(C)]
++struct usb_ctl_report_desc {
++ ucrd_size: c_int,
++ ucrd_data: [c_uchar; 1024],
++}
++
++ioctl!(IOC_OUT, usb_get_report_desc, b'U', 21, usb_ctl_report_desc);
++
++fn read_report_descriptor(fd: &Fd) -> io::Result<ReportDescriptor> {
++ let mut desc = unsafe { mem::zeroed() };
++ unsafe { usb_get_report_desc(fd.fileno, &mut desc) }?;
++ if desc.ucrd_size < 0 {
++ return Err(io_err("negative report descriptor size"));
++ }
++ let size = desc.ucrd_size as usize;
++ let value = Vec::from(&desc.ucrd_data[..size]);
++ Ok(ReportDescriptor { value })
++}
++
++pub fn is_u2f_device(fd: &Fd) -> bool {
++ match read_report_descriptor(fd) {
++ Ok(desc) => has_fido_usage(desc),
++ Err(_) => false,
++ }
++}
++
++ioctl!(IOC_IN, usb_hid_set_raw_ioctl, b'h', 2, c_int);
++
++pub fn hid_set_raw(fd: &Fd, raw: bool) -> io::Result<()> {
++ let mut raw_int: c_int = if raw { 1 } else { 0 };
++ unsafe { usb_hid_set_raw_ioctl(fd.fileno, &mut raw_int) }?;
++ Ok(())
++}