summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2015-10-21 04:30:27 -0400
committerAnthony G. Basile <blueness@gentoo.org>2015-10-21 04:30:27 -0400
commit5897e96e7aaecac005baec1bc0770d24f41df0d9 (patch)
treee5b5a0ec7efb1b956226e0be81a117c7274eb59a
parentgrsecurity-3.1-4.2.3-201510200858 (diff)
downloadhardened-patchset-5897e96e7aaecac005baec1bc0770d24f41df0d9.tar.gz
hardened-patchset-5897e96e7aaecac005baec1bc0770d24f41df0d9.tar.bz2
hardened-patchset-5897e96e7aaecac005baec1bc0770d24f41df0d9.zip
grsecurity-3.1-4.2.3-201510202025
-rw-r--r--4.2.3/0000_README2
-rw-r--r--4.2.3/4420_grsecurity-3.1-4.2.3-201510202025.patch (renamed from 4.2.3/4420_grsecurity-3.1-4.2.3-201510200858.patch)169
2 files changed, 96 insertions, 75 deletions
diff --git a/4.2.3/0000_README b/4.2.3/0000_README
index d0e396e..08cde44 100644
--- a/4.2.3/0000_README
+++ b/4.2.3/0000_README
@@ -2,7 +2,7 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 4420_grsecurity-3.1-4.2.3-201510200858.patch
+Patch: 4420_grsecurity-3.1-4.2.3-201510202025.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/4.2.3/4420_grsecurity-3.1-4.2.3-201510200858.patch b/4.2.3/4420_grsecurity-3.1-4.2.3-201510202025.patch
index 0d6eb57..87c4cb1 100644
--- a/4.2.3/4420_grsecurity-3.1-4.2.3-201510200858.patch
+++ b/4.2.3/4420_grsecurity-3.1-4.2.3-201510202025.patch
@@ -51934,6 +51934,19 @@ index dab2513..4c4b65d 100644
{
return msecs_to_jiffies((s->poll_timeout[2] << 16)
| (s->poll_timeout[1] << 8)
+diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
+index e508c65..fb0dbae 100644
+--- a/drivers/net/wireless/ath/ath10k/ce.c
++++ b/drivers/net/wireless/ath/ath10k/ce.c
+@@ -896,7 +896,7 @@ static int ath10k_ce_init_dest_ring(struct ath10k *ar,
+ return 0;
+ }
+
+-static struct ath10k_ce_ring *
++static struct ath10k_ce_ring * __intentional_overflow(-1)
+ ath10k_ce_alloc_src_ring(struct ath10k *ar, unsigned int ce_id,
+ const struct ce_attr *attr)
+ {
diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c
index 85bfa2a..3f6e72c 100644
--- a/drivers/net/wireless/ath/ath10k/htc.c
@@ -57769,7 +57782,7 @@ index 2a3bbdf..91d72cf 100644
file->f_version = event_count;
return POLLIN | POLLRDNORM;
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
-index 986abde..80e8279 100644
+index 986abde..2af59b11 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -187,7 +187,7 @@ static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes,
@@ -57808,6 +57821,15 @@ index 986abde..80e8279 100644
if (copy_to_user(buf,
dev->rawdescriptors[i] + (*ppos - pos),
min(len, alloclen))) {
+@@ -1499,7 +1499,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
+ }
+ }
+ as->urb->dev = ps->dev;
+- as->urb->pipe = (uurb->type << 30) |
++ as->urb->pipe = ((unsigned int)uurb->type << 30) |
+ __create_pipe(ps->dev, uurb->endpoint & 0xf) |
+ (uurb->endpoint & USB_DIR_IN);
+
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index cbcd092..e783f87 100644
--- a/drivers/usb/core/hcd.c
@@ -77013,6 +77035,19 @@ index c711be8..23b8df9 100644
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
+diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
+index 754fd6c..ed6acbe 100644
+--- a/fs/dlm/lowcomms.c
++++ b/fs/dlm/lowcomms.c
+@@ -538,7 +538,7 @@ static void close_connection(struct connection *con, bool and_other)
+ /* We only send shutdown messages to nodes that are not part of the cluster */
+ static void sctp_send_shutdown(sctp_assoc_t associd)
+ {
+- static char outcmsg[CMSG_SPACE(sizeof(struct sctp_sndrcvinfo))];
++ char outcmsg[CMSG_SPACE(sizeof(struct sctp_sndrcvinfo))];
+ struct msghdr outmessage;
+ struct cmsghdr *cmsg;
+ struct sctp_sndrcvinfo *sinfo;
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 3c4db11..a43976f 100644
--- a/fs/ecryptfs/inode.c
@@ -77040,7 +77075,7 @@ index e4141f2..d8263e8 100644
i += packet_length_size;
if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size))
diff --git a/fs/exec.c b/fs/exec.c
-index 1977c2a..6371905 100644
+index 1977c2a..b6b953a 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -56,8 +56,20 @@
@@ -77536,7 +77571,7 @@ index 1977c2a..6371905 100644
out:
if (bprm->mm) {
acct_arg_size(bprm, 0);
-@@ -1743,3 +1918,317 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
+@@ -1743,3 +1918,324 @@ COMPAT_SYSCALL_DEFINE5(execveat, int, fd,
argv, envp, flags);
}
#endif
@@ -77841,11 +77876,18 @@ index 1977c2a..6371905 100644
+#endif
+
+#ifdef CONFIG_PAX_SIZE_OVERFLOW
++
++#ifdef CONFIG_PAX_SIZE_OVERFLOW_DISABLE_KILL
++static DEFINE_RATELIMIT_STATE(size_overflow_ratelimit, 15 * HZ, 3);
++#endif
++
+void __nocapture(1, 3, 4) __used report_size_overflow(const char *file, unsigned int line, const char *func, const char *ssa_name)
+{
+#ifdef CONFIG_PAX_SIZE_OVERFLOW_DISABLE_KILL
-+ printk_ratelimited(KERN_EMERG "PAX: size overflow detected in function %s %s:%u %s", func, file, line, ssa_name);
-+ dump_stack();
++ if (__ratelimit(&size_overflow_ratelimit)) {
++ printk(KERN_EMERG "PAX: size overflow detected in function %s %s:%u %s", func, file, line, ssa_name);
++ dump_stack();
++ }
+#else
+ printk(KERN_EMERG "PAX: size overflow detected in function %s %s:%u %s", func, file, line, ssa_name);
+ dump_stack();
@@ -119212,18 +119254,21 @@ index 0861018..1fd388b 100644
if (1) {
diff --git a/net/core/scm.c b/net/core/scm.c
-index 3b6899b..cf36238 100644
+index 3b6899b..20d20e7 100644
--- a/net/core/scm.c
+++ b/net/core/scm.c
-@@ -209,7 +209,7 @@ EXPORT_SYMBOL(__scm_send);
+@@ -209,9 +209,9 @@ EXPORT_SYMBOL(__scm_send);
int put_cmsg(struct msghdr * msg, int level, int type, int len, void *data)
{
struct cmsghdr __user *cm
- = (__force struct cmsghdr __user *)msg->msg_control;
+ = (struct cmsghdr __force_user *)msg->msg_control;
struct cmsghdr cmhdr;
- int cmlen = CMSG_LEN(len);
+- int cmlen = CMSG_LEN(len);
++ size_t cmlen = CMSG_LEN(len);
int err;
+
+ if (MSG_CMSG_COMPAT & msg->msg_flags)
@@ -232,7 +232,7 @@ int put_cmsg(struct msghdr * msg, int level, int type, int len, void *data)
err = -EFAULT;
if (copy_to_user(cm, &cmhdr, sizeof cmhdr))
@@ -119251,6 +119296,24 @@ index 3b6899b..cf36238 100644
i++, cmfptr++)
{
struct socket *sock;
+@@ -297,7 +297,7 @@ void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
+
+ if (i > 0)
+ {
+- int cmlen = CMSG_LEN(i*sizeof(int));
++ size_t cmlen = CMSG_LEN(i*sizeof(int));
+ err = put_user(SOL_SOCKET, &cm->cmsg_level);
+ if (!err)
+ err = put_user(SCM_RIGHTS, &cm->cmsg_type);
+@@ -305,6 +305,8 @@ void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
+ err = put_user(cmlen, &cm->cmsg_len);
+ if (!err) {
+ cmlen = CMSG_SPACE(i*sizeof(int));
++ if (msg->msg_controllen < cmlen)
++ cmlen = msg->msg_controllen;
+ msg->msg_control += cmlen;
+ msg->msg_controllen -= cmlen;
+ }
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 7b84330..e0f5a86 100644
--- a/net/core/skbuff.c
@@ -132439,10 +132502,10 @@ index 0000000..4c7f7c6
+targets += size_overflow_hash.h size_overflow_hash_aux.h disable_size_overflow_hash.h
diff --git a/tools/gcc/size_overflow_plugin/disable_size_overflow_hash.data b/tools/gcc/size_overflow_plugin/disable_size_overflow_hash.data
new file mode 100644
-index 0000000..675f934
+index 0000000..3baef37
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/disable_size_overflow_hash.data
-@@ -0,0 +1,12396 @@
+@@ -0,0 +1,12398 @@
+disable_so_interrupt_pnode_gru_message_queue_desc_4 interrupt_pnode gru_message_queue_desc 0 4 NULL
+disable_so_bch_btree_insert_fndecl_12 bch_btree_insert fndecl 0 12 NULL
+disable_so_macvlan_sync_address_fndecl_22 macvlan_sync_address fndecl 0 22 NULL nohasharray
@@ -143960,7 +144023,8 @@ index 0000000..675f934
+disable_so_time_to_send_netem_skb_cb_60711 time_to_send netem_skb_cb 0 60711 NULL nohasharray
+disable_so_ref_div_atom_clock_dividers_60711 ref_div atom_clock_dividers 0 60711 &disable_so_time_to_send_netem_skb_cb_60711
+disable_so_dev_sof_uvc_clock_sample_60716 dev_sof uvc_clock_sample 0 60716 NULL
-+disable_so_addr_reg_musb_qh_60718 addr_reg musb_qh 0 60718 NULL
++disable_so_addr_reg_musb_qh_60718 addr_reg musb_qh 0 60718 NULL nohasharray
++enable_so_acpi_ex_do_math_op_fndecl_60718 acpi_ex_do_math_op fndecl 0-3-2 60718 &disable_so_addr_reg_musb_qh_60718
+disable_so_reg_clock_sx150x_789_pri_60721 reg_clock sx150x_789_pri 0 60721 NULL
+disable_so___parse_nl_addr_fndecl_60734 __parse_nl_addr fndecl 0 60734 NULL
+disable_so_frequency_zl10036_state_60737 frequency zl10036_state 0 60737 NULL
@@ -144839,6 +144903,7 @@ index 0000000..675f934
+disable_so_si_pt_regs_65527 si pt_regs 0 65527 NULL
+enable_so_rts_threshold_wiphy_15170 rts_threshold wiphy 0 15170 NULL
+enable_so_value_iw_param_65472 value iw_param 0 65472 NULL
++enable_so_value_acpi_object_integer_44755 value acpi_object_integer 0 44755 NULL
diff --git a/tools/gcc/size_overflow_plugin/generate_size_overflow_hash.sh b/tools/gcc/size_overflow_plugin/generate_size_overflow_hash.sh
new file mode 100644
index 0000000..be9724d
@@ -145372,10 +145437,10 @@ index 0000000..37e2e91
+#endif
diff --git a/tools/gcc/size_overflow_plugin/intentional_overflow.c b/tools/gcc/size_overflow_plugin/intentional_overflow.c
new file mode 100644
-index 0000000..72d6a8f
+index 0000000..3f67add
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/intentional_overflow.c
-@@ -0,0 +1,985 @@
+@@ -0,0 +1,941 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -146317,50 +146382,6 @@ index 0000000..72d6a8f
+ so_stmt = get_dup_stmt(visited, stmt);
+ create_up_and_down_cast(visited, so_stmt, lhs_type, gimple_assign_rhs1(so_stmt));
+}
-+
-+bool is_intentional_truncation(gassign *assign)
-+{
-+ enum machine_mode lhs_mode, def_rhs_mode;
-+ gimple def_stmt;
-+ const_tree decl, rhs, def_rhs, def_def_rhs, lhs;
-+
-+ if (gimple_num_ops(assign) != 2)
-+ return false;
-+
-+ lhs = gimple_assign_lhs(assign);
-+ if (VAR_P(lhs))
-+ return false;
-+
-+ // structure field write
-+ decl = get_ref_field(lhs);
-+ if (TREE_CODE(decl) != FIELD_DECL)
-+ return false;
-+
-+ rhs = gimple_assign_rhs1(assign);
-+ def_stmt = get_def_stmt(rhs);
-+ if (!def_stmt || !gimple_assign_cast_p(def_stmt))
-+ return false;
-+
-+ lhs_mode = TYPE_MODE(TREE_TYPE(rhs));
-+ def_rhs = gimple_assign_rhs1(def_stmt);
-+ def_rhs_mode = TYPE_MODE(TREE_TYPE(def_rhs));
-+ // cast from 16 to 8
-+ if (def_rhs_mode != HImode || lhs_mode != QImode)
-+ return false;
-+
-+ def_stmt = get_def_stmt(def_rhs);
-+ if (!def_stmt || !is_gimple_assign(def_stmt) || gimple_num_ops(def_stmt) != 2)
-+ return false;
-+
-+ def_def_rhs = gimple_assign_rhs1(def_stmt);
-+ // structure field read
-+#if BUILDING_GCC_VERSION == 4005
-+ return TREE_CODE(def_def_rhs) == INDIRECT_REF;
-+#else
-+ return TREE_CODE(def_def_rhs) == MEM_REF;
-+#endif
-+}
-+
diff --git a/tools/gcc/size_overflow_plugin/remove_unnecessary_dup.c b/tools/gcc/size_overflow_plugin/remove_unnecessary_dup.c
new file mode 100644
index 0000000..5622b51
@@ -146506,10 +146527,10 @@ index 0000000..5622b51
+
diff --git a/tools/gcc/size_overflow_plugin/size_overflow.h b/tools/gcc/size_overflow_plugin/size_overflow.h
new file mode 100644
-index 0000000..1efcc60
+index 0000000..2d733e1
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow.h
-@@ -0,0 +1,323 @@
+@@ -0,0 +1,322 @@
+#ifndef SIZE_OVERFLOW_H
+#define SIZE_OVERFLOW_H
+
@@ -146713,7 +146734,6 @@ index 0000000..1efcc60
+extern bool is_a_neg_overflow(const gassign *stmt, const_tree rhs);
+extern enum intentional_overflow_type add_mul_intentional_overflow(const gassign *stmt);
+extern void unsigned_signed_cast_intentional_overflow(struct visited *visited, gassign *stmt);
-+extern bool is_intentional_truncation(gassign *assign);
+
+
+// insert_size_overflow_asm.c
@@ -147035,10 +147055,10 @@ index 0000000..ab2d25a
+}
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
new file mode 100644
-index 0000000..ba470a6
+index 0000000..d372a51
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
-@@ -0,0 +1,20761 @@
+@@ -0,0 +1,20759 @@
+enable_so_recv_ctrl_pipe_us_data_0 recv_ctrl_pipe us_data 0 0 NULL
+enable_so___earlyonly_bootmem_alloc_fndecl_3 __earlyonly_bootmem_alloc fndecl 2-3-4 3 NULL
+enable_so_size_ttm_mem_reg_8 size ttm_mem_reg 0 8 NULL
@@ -161256,7 +161276,6 @@ index 0000000..ba470a6
+enable_so_ext4_journalled_write_end_fndecl_44742 ext4_journalled_write_end fndecl 5-3 44742 NULL
+enable_so_erst_clearer_fndecl_44743 erst_clearer fndecl 2 44743 NULL
+enable_so_max_phy_id_vardecl_x86_pkg_temp_thermal_c_44750 max_phy_id vardecl_x86_pkg_temp_thermal.c 0 44750 NULL
-+enable_so_value_acpi_object_integer_44755 value acpi_object_integer 0 44755 NULL
+enable_so_dev_sectors_mddev_44756 dev_sectors mddev 0 44756 NULL
+enable_so_brd_probe_fndecl_44758 brd_probe fndecl 1 44758 NULL
+enable_so_set_ssp_fndecl_44760 set_ssp fndecl 4 44760 NULL
@@ -166285,8 +166304,7 @@ index 0000000..ba470a6
+enable_so_usbdev_read_fndecl_60713 usbdev_read fndecl 3 60713 NULL
+enable_so_pwr_missing_bcns_cnt_read_fndecl_60714 pwr_missing_bcns_cnt_read fndecl 3 60714 NULL
+enable_so_sock_sendmsg_fndecl_60718 sock_sendmsg fndecl 0 60718 NULL nohasharray
-+enable_so_v9fs_xattr_user_set_fndecl_60718 v9fs_xattr_user_set fndecl 4 60718 &enable_so_sock_sendmsg_fndecl_60718 nohasharray
-+enable_so_acpi_ex_do_math_op_fndecl_60718 acpi_ex_do_math_op fndecl 0-3-2 60718 &enable_so_v9fs_xattr_user_set_fndecl_60718
++enable_so_v9fs_xattr_user_set_fndecl_60718 v9fs_xattr_user_set fndecl 4 60718 &enable_so_sock_sendmsg_fndecl_60718
+enable_so_HighPriorityCredit_mpt3sas_facts_60721 HighPriorityCredit mpt3sas_facts 0 60721 NULL
+enable_so_reserved_pebs_ubi_volume_60725 reserved_pebs ubi_volume 0 60725 NULL
+enable_so_c2_pseudo_change_mtu_fndecl_60734 c2_pseudo_change_mtu fndecl 2 60734 NULL
@@ -169642,7 +169660,7 @@ index 0000000..6075e8f
+
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin/size_overflow_plugin.c
new file mode 100644
-index 0000000..8838f04
+index 0000000..2fef709
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_plugin.c
@@ -0,0 +1,318 @@
@@ -169677,7 +169695,7 @@ index 0000000..8838f04
+tree size_overflow_type_TI;
+
+static struct plugin_info size_overflow_plugin_info = {
-+ .version = "20151020",
++ .version = "20151021",
+ .help = "no-size-overflow\tturn off size overflow checking\n",
+};
+
@@ -170324,10 +170342,10 @@ index 0000000..317cd6c
+
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_transform.c b/tools/gcc/size_overflow_plugin/size_overflow_transform.c
new file mode 100644
-index 0000000..ee7633e
+index 0000000..0395a48
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_transform.c
-@@ -0,0 +1,742 @@
+@@ -0,0 +1,739 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -170876,9 +170894,6 @@ index 0000000..ee7633e
+ if (mark != MARK_NO)
+ return head;
+
-+ if (is_intentional_truncation(assign))
-+ return head;
-+
+ rhs1 = gimple_assign_rhs1(assign);
+ head = search_interesting_stmt(head, next_node, assign, rhs1, 0);
+
@@ -171072,10 +171087,10 @@ index 0000000..ee7633e
+}
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c b/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c
new file mode 100644
-index 0000000..e7a17f5
+index 0000000..4ac2d6e
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin/size_overflow_transform_core.c
-@@ -0,0 +1,1004 @@
+@@ -0,0 +1,1010 @@
+/*
+ * Copyright 2011-2015 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -171747,6 +171762,12 @@ index 0000000..e7a17f5
+ if (handle_unsigned_neg_or_bit_not(visited, expand_from, stmt))
+ return dup_assign(visited, stmt, lhs, new_rhs1, NULL_TREE, NULL_TREE);
+
++ // skip lhs check on HI -> QI cast
++ if (rhs_mode == HImode && lhs_mode == QImode) {
++ pointer_set_insert(visited->no_cast_check, stmt);
++ return dup_assign(visited, stmt, lhs, new_rhs1, NULL_TREE, NULL_TREE);
++ }
++
+ // skip lhs check on signed SI -> HI cast or signed SI -> QI cast
+ if (rhs_mode == SImode && !TYPE_UNSIGNED(rhs_type) && (lhs_mode == HImode || lhs_mode == QImode))
+ return create_assign(visited, stmt, lhs, AFTER_STMT);