summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2014-04-19 08:26:40 -0400
committerAnthony G. Basile <blueness@gentoo.org>2014-04-19 08:26:40 -0400
commit2794628c193b7390bac0ecb502ba56b73786c71c (patch)
tree179e5738f5c93a71b639bbb5ccf08a1dd52f5891
parentGrsec/PaX: 3.0-{3.2.57,3.13.10}-201404141717 (diff)
downloadhardened-patchset-2794628c193b7390bac0ecb502ba56b73786c71c.tar.gz
hardened-patchset-2794628c193b7390bac0ecb502ba56b73786c71c.tar.bz2
hardened-patchset-2794628c193b7390bac0ecb502ba56b73786c71c.zip
Grsec/PaX: 3.0-{3.2.57,3.13.10}-20140418211120140418
-rw-r--r--3.13.10/0000_README2
-rw-r--r--3.13.10/4420_grsecurity-3.0-3.13.10-201404182111.patch (renamed from 3.13.10/4420_grsecurity-3.0-3.13.10-201404141717.patch)112
-rw-r--r--3.2.57/0000_README2
-rw-r--r--3.2.57/4420_grsecurity-3.0-3.2.57-201404182109.patch (renamed from 3.2.57/4420_grsecurity-3.0-3.2.57-201404131252.patch)93
4 files changed, 180 insertions, 29 deletions
diff --git a/3.13.10/0000_README b/3.13.10/0000_README
index 02b8064..6937874 100644
--- a/3.13.10/0000_README
+++ b/3.13.10/0000_README
@@ -2,7 +2,7 @@ README
-----------------------------------------------------------------------------
Individual Patch Descriptions:
-----------------------------------------------------------------------------
-Patch: 4420_grsecurity-3.0-3.13.9-201404062127.patch
+Patch: 4420_grsecurity-3.0-3.13.10-201404182111.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/3.13.10/4420_grsecurity-3.0-3.13.10-201404141717.patch b/3.13.10/4420_grsecurity-3.0-3.13.10-201404182111.patch
index 10e9b5b..67863a9 100644
--- a/3.13.10/4420_grsecurity-3.0-3.13.10-201404141717.patch
+++ b/3.13.10/4420_grsecurity-3.0-3.13.10-201404182111.patch
@@ -32292,7 +32292,7 @@ index f971306..e83e0f6 100644
(unsigned long)(&__init_begin),
(unsigned long)(&__init_end));
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 4287f1f..3b99c71 100644
+index 4287f1f..1a4e8e9 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -62,33 +62,6 @@ static noinline int do_test_wp_bit(void);
@@ -32392,13 +32392,13 @@ index 4287f1f..3b99c71 100644
- if (addr >= (unsigned long)_text && addr <= (unsigned long)__init_end)
- return 1;
- return 0;
-+ if ((start > ktla_ktva((unsigned long)_etext) ||
++ if ((start >= ktla_ktva((unsigned long)_etext) ||
+ end <= ktla_ktva((unsigned long)_stext)) &&
-+ (start > ktla_ktva((unsigned long)_einittext) ||
++ (start >= ktla_ktva((unsigned long)_einittext) ||
+ end <= ktla_ktva((unsigned long)_sinittext)) &&
+
+#ifdef CONFIG_ACPI_SLEEP
-+ (start > (unsigned long)__va(acpi_wakeup_address) + 0x4000 || end <= (unsigned long)__va(acpi_wakeup_address)) &&
++ (start >= (unsigned long)__va(acpi_wakeup_address) + 0x4000 || end <= (unsigned long)__va(acpi_wakeup_address)) &&
+#endif
+
+ (start > (unsigned long)__va(0xfffff) || end <= (unsigned long)__va(0xc0000)))
@@ -58155,7 +58155,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 7ea097f..0158d8a 100644
+index 7ea097f..5862cb5 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -55,8 +55,20 @@
@@ -58872,13 +58872,13 @@ index 7ea097f..0158d8a 100644
+#ifdef CONFIG_X86_64
+ /* check against linear mapping as well */
+ if (high > (unsigned long)__va(__pa(textlow)) &&
-+ low <= (unsigned long)__va(__pa(texthigh)))
++ low < (unsigned long)__va(__pa(texthigh)))
+ return true;
+#endif
+
+#endif
+
-+ if (high <= textlow || low > texthigh)
++ if (high <= textlow || low >= texthigh)
+ return false;
+ else
+ return true;
@@ -83504,6 +83504,29 @@ index 7caf44c..23c6f27 100644
#if !defined (N_MAGIC)
#define N_MAGIC(exec) ((exec).a_info & 0xffff)
#endif
+diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h
+index 164a7e2..0f581a7 100644
+--- a/include/uapi/linux/bcache.h
++++ b/include/uapi/linux/bcache.h
+@@ -5,6 +5,7 @@
+ * Bcache on disk data structures
+ */
+
++#include <linux/compiler.h>
+ #include <asm/types.h>
+
+ #define BITMASK(name, type, field, offset, size) \
+@@ -20,8 +21,8 @@ static inline void SET_##name(type *k, __u64 v) \
+ /* Btree keys - all units are in sectors */
+
+ struct bkey {
+- __u64 high;
+- __u64 low;
++ __u64 high __intentional_overflow(-1);
++ __u64 low __intentional_overflow(-1);
+ __u64 ptr[];
+ };
+
diff --git a/include/uapi/linux/byteorder/little_endian.h b/include/uapi/linux/byteorder/little_endian.h
index d876736..ccce5c0 100644
--- a/include/uapi/linux/byteorder/little_endian.h
@@ -114377,11 +114400,12 @@ index 0000000..9529806
+tree_mod_log_eb_copy_65535 tree_mod_log_eb_copy 6 65535 NULL
diff --git a/tools/gcc/size_overflow_hash_aux.data b/tools/gcc/size_overflow_hash_aux.data
new file mode 100644
-index 0000000..5dd8a8f
+index 0000000..560cd7b
--- /dev/null
+++ b/tools/gcc/size_overflow_hash_aux.data
-@@ -0,0 +1,83 @@
+@@ -0,0 +1,92 @@
+spa_set_aux_vdevs_746 spa_set_aux_vdevs 3 746 NULL
++zfs_lookup_2144 zfs_lookup 0 2144 NULL
+mappedread_2627 mappedread 2 2627 NULL
+vdev_disk_dio_alloc_2957 vdev_disk_dio_alloc 1 2957 NULL
+nv_alloc_pushpage_spl_4286 nv_alloc_pushpage_spl 2 4286 NULL
@@ -114397,6 +114421,7 @@ index 0000000..5dd8a8f
+avl_numnodes_12384 avl_numnodes 0 12384 NULL
+dmu_write_uio_dnode_12473 dmu_write_uio_dnode 3 12473 NULL
+dmu_xuio_init_12866 dmu_xuio_init 2 12866 NULL
++zpl_read_common_14389 zpl_read_common 0 14389 NULL
+dmu_snapshot_realname_14632 dmu_snapshot_realname 4 14632 NULL
+kmem_alloc_debug_14852 kmem_alloc_debug 1 14852 NULL
+kmalloc_node_nofail_15151 kmalloc_node_nofail 1 15151 NULL
@@ -114404,12 +114429,14 @@ index 0000000..5dd8a8f
+zfs_log_write_16524 zfs_log_write 6-5 16524 NULL
+sa_build_layouts_16910 sa_build_layouts 3 16910 NULL
+dsl_dir_namelen_17053 dsl_dir_namelen 0 17053 NULL
++kcopy_copy_to_user_17336 kcopy_copy_to_user 5 17336 NULL
+sa_add_layout_entry_17507 sa_add_layout_entry 3 17507 NULL
+sa_attr_table_setup_18029 sa_attr_table_setup 3 18029 NULL
+uiocopy_18680 uiocopy 2 18680 NULL
+dmu_buf_hold_array_by_dnode_19125 dmu_buf_hold_array_by_dnode 2-3 19125 NULL
+zpl_acl_from_xattr_21141 zpl_acl_from_xattr 2 21141 NULL
+dsl_pool_tx_assign_init_22518 dsl_pool_tx_assign_init 2 22518 NULL
++nvlist_lookup_byte_array_22527 nvlist_lookup_byte_array 0 22527 NULL
+sa_replace_all_by_template_locked_22533 sa_replace_all_by_template_locked 3 22533 NULL
+tsd_hash_table_init_22559 tsd_hash_table_init 1 22559 NULL
+spa_vdev_remove_aux_23966 spa_vdev_remove_aux 4 23966 NULL
@@ -114441,16 +114468,21 @@ index 0000000..5dd8a8f
+vdev_raidz_matrix_reconstruct_40852 vdev_raidz_matrix_reconstruct 2-3 40852 NULL
+sa_find_layout_40892 sa_find_layout 4 40892 NULL
+zpl_xattr_get_dir_41918 zpl_xattr_get_dir 0 41918 NULL
++zfs_sa_get_xattr_42600 zfs_sa_get_xattr 0 42600 NULL
+zpl_xattr_acl_set_42808 zpl_xattr_acl_set 4 42808 NULL
+xdr_dec_array_43091 xdr_dec_array 5 43091 NULL
+dsl_dataset_namelen_43136 dsl_dataset_namelen 0 43136 NULL
++kcopy_write_43683 kcopy_write 3 43683 NULL
+uiomove_44355 uiomove 2 44355 NULL
+dmu_read_44418 dmu_read 4-3 44418 NULL
+ddi_copyin_44846 ddi_copyin 3 44846 NULL
++kcopy_do_get_45061 kcopy_do_get 5 45061 NULL
+copyin_45945 copyin 3 45945 NULL
+zil_itx_create_46555 zil_itx_create 2 46555 NULL
+dmu_write_uio_dbuf_48064 dmu_write_uio_dbuf 3 48064 NULL
++blk_rq_pos_48233 blk_rq_pos 0 48233 NULL
+spa_history_write_49650 spa_history_write 3 49650 NULL
++kcopy_copy_pages_to_user_49823 kcopy_copy_pages_to_user 3-4 49823 NULL
+zfs_log_write_50162 zfs_log_write 6-5 50162 NULL
+i_fm_alloc_51038 i_fm_alloc 2 51038 NULL
+copyout_51409 copyout 3 51409 NULL
@@ -114466,10 +114498,10 @@ index 0000000..5dd8a8f
+zpios_read_64734 zpios_read 3 64734 NULL
diff --git a/tools/gcc/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin.c
new file mode 100644
-index 0000000..0a9dd22
+index 0000000..ed21b21
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin.c
-@@ -0,0 +1,4110 @@
+@@ -0,0 +1,4166 @@
+/*
+ * Copyright 2011-2014 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -114498,7 +114530,7 @@ index 0000000..0a9dd22
+int plugin_is_GPL_compatible;
+
+static struct plugin_info size_overflow_plugin_info = {
-+ .version = "20140402",
++ .version = "20140407",
+ .help = "no-size-overflow\tturn off size overflow checking\n",
+};
+
@@ -115828,12 +115860,62 @@ index 0000000..0a9dd22
+ insert_check_size_overflow(caller_node, stmt, LT_EXPR, cast_rhs, type_min, before, MIN_CHECK);
+}
+
++static bool is_lt_signed_type_max(const_tree rhs)
++{
++ const_tree new_type, type_max, type = TREE_TYPE(rhs);
++
++ if (!TYPE_UNSIGNED(type))
++ return true;
++
++ switch (TYPE_MODE(type)) {
++ case QImode:
++ new_type = intQI_type_node;
++ break;
++ case HImode:
++ new_type = intHI_type_node;
++ break;
++ case SImode:
++ new_type = intSI_type_node;
++ break;
++ case DImode:
++ new_type = intDI_type_node;
++ break;
++ default:
++ debug_tree((tree)type);
++ gcc_unreachable();
++ }
++
++ type_max = TYPE_MAX_VALUE(new_type);
++ if (!tree_int_cst_lt(type_max, rhs))
++ return true;
++
++ return false;
++}
++
++static bool is_gt_zero(const_tree rhs)
++{
++ const_tree type = TREE_TYPE(rhs);
++
++ if (TYPE_UNSIGNED(type))
++ return true;
++
++ if (!tree_int_cst_lt(rhs, integer_zero_node))
++ return true;
++
++ return false;
++}
++
+static bool is_a_constant_overflow(const_gimple stmt, const_tree rhs)
+{
+ if (gimple_assign_rhs_code(stmt) == MIN_EXPR)
+ return false;
+ if (!is_gimple_constant(rhs))
+ return false;
++
++ // If the const is between 0 and the max value of the signed type of the same bitsize then there is no intentional overflow
++// if (is_lt_signed_type_max(rhs) && is_gt_zero(rhs))
++// return false;
++
+ return true;
+}
+
@@ -116037,6 +116119,12 @@ index 0000000..0a9dd22
+ if (is_a_constant_overflow(def_stmt, rhs1))
+ return handle_intentional_overflow(visited, caller_node, !is_a_cast_and_const_overflow(rhs2), def_stmt, new_rhs2, new_rhs2);
+
++ // the const is between 0 and (signed) MAX
++ if (is_gimple_constant(rhs1))
++ new_rhs1 = create_assign(visited, def_stmt, rhs1, BEFORE_STMT);
++ if (is_gimple_constant(rhs2))
++ new_rhs2 = create_assign(visited, def_stmt, rhs2, BEFORE_STMT);
++
+ return dup_assign(visited, def_stmt, lhs, new_rhs1, new_rhs2, NULL_TREE);
+}
+
diff --git a/3.2.57/0000_README b/3.2.57/0000_README
index fa70e2f..44dacca 100644
--- a/3.2.57/0000_README
+++ b/3.2.57/0000_README
@@ -146,7 +146,7 @@ Patch: 1056_linux-3.2.57.patch
From: http://www.kernel.org
Desc: Linux 3.2.57
-Patch: 4420_grsecurity-3.0-3.2.57-201404131252.patch
+Patch: 4420_grsecurity-3.0-3.2.57-201404182109.patch
From: http://www.grsecurity.net
Desc: hardened-sources base patch from upstream grsecurity
diff --git a/3.2.57/4420_grsecurity-3.0-3.2.57-201404131252.patch b/3.2.57/4420_grsecurity-3.0-3.2.57-201404182109.patch
index d27fdf9..08bad77 100644
--- a/3.2.57/4420_grsecurity-3.0-3.2.57-201404131252.patch
+++ b/3.2.57/4420_grsecurity-3.0-3.2.57-201404182109.patch
@@ -28706,7 +28706,7 @@ index a4cca06..9e00106 100644
(unsigned long)(&__init_begin),
(unsigned long)(&__init_end));
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 29f7c6d..7500c2f 100644
+index 29f7c6d..5122941 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -74,36 +74,6 @@ static __init void *alloc_low_page(void)
@@ -28809,13 +28809,13 @@ index 29f7c6d..7500c2f 100644
- if (addr >= (unsigned long)_text && addr <= (unsigned long)__init_end)
- return 1;
- return 0;
-+ if ((start > ktla_ktva((unsigned long)_etext) ||
++ if ((start >= ktla_ktva((unsigned long)_etext) ||
+ end <= ktla_ktva((unsigned long)_stext)) &&
-+ (start > ktla_ktva((unsigned long)_einittext) ||
++ (start >= ktla_ktva((unsigned long)_einittext) ||
+ end <= ktla_ktva((unsigned long)_sinittext)) &&
+
+#ifdef CONFIG_ACPI_SLEEP
-+ (start > (unsigned long)__va(acpi_wakeup_address) + 0x4000 || end <= (unsigned long)__va(acpi_wakeup_address)) &&
++ (start >= (unsigned long)__va(acpi_wakeup_address) + 0x4000 || end <= (unsigned long)__va(acpi_wakeup_address)) &&
+#endif
+
+ (start > (unsigned long)__va(0xfffff) || end <= (unsigned long)__va(0xc0000)))
@@ -55664,7 +55664,7 @@ index 451b9b8..12e5a03 100644
out_free_fd:
diff --git a/fs/exec.c b/fs/exec.c
-index 78199eb..793dc44 100644
+index 78199eb..1781a561 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -55,12 +55,35 @@
@@ -56504,13 +56504,13 @@ index 78199eb..793dc44 100644
+#ifdef CONFIG_X86_64
+ /* check against linear mapping as well */
+ if (high > (unsigned long)__va(__pa(textlow)) &&
-+ low <= (unsigned long)__va(__pa(texthigh)))
++ low < (unsigned long)__va(__pa(texthigh)))
+ return true;
+#endif
+
+#endif
+
-+ if (high <= textlow || low > texthigh)
++ if (high <= textlow || low >= texthigh)
+ return false;
+ else
+ return true;
@@ -111853,10 +111853,10 @@ index 0000000..8dafb22
+}
diff --git a/tools/gcc/size_overflow_hash.data b/tools/gcc/size_overflow_hash.data
new file mode 100644
-index 0000000..6111b9b
+index 0000000..6bf14a6
--- /dev/null
+++ b/tools/gcc/size_overflow_hash.data
-@@ -0,0 +1,6002 @@
+@@ -0,0 +1,6001 @@
+intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL
+ocfs2_get_refcount_tree_3 ocfs2_get_refcount_tree 0 3 NULL
+storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL
@@ -113167,7 +113167,6 @@ index 0000000..6111b9b
+dma_declare_coherent_memory_14244 dma_declare_coherent_memory 4 14244 NULL
+snd_soc_hw_bulk_write_raw_14245 snd_soc_hw_bulk_write_raw 4 14245 NULL
+ext4_journal_restart_14251 ext4_journal_restart 0 14251 NULL
-+radix_tree_prev_hole_14252 radix_tree_prev_hole 0-2 14252 NULL
+ath6kl_connect_event_14267 ath6kl_connect_event 7-8-9 14267 NULL
+add_numbered_child_14273 add_numbered_child 5 14273 NULL
+OS_mem_token_alloc_14276 OS_mem_token_alloc 1 14276 NULL
@@ -117861,11 +117860,12 @@ index 0000000..6111b9b
+selnl_msglen_65499 selnl_msglen 0 65499 NULL
diff --git a/tools/gcc/size_overflow_hash_aux.data b/tools/gcc/size_overflow_hash_aux.data
new file mode 100644
-index 0000000..5dd8a8f
+index 0000000..4ad4525
--- /dev/null
+++ b/tools/gcc/size_overflow_hash_aux.data
-@@ -0,0 +1,83 @@
+@@ -0,0 +1,91 @@
+spa_set_aux_vdevs_746 spa_set_aux_vdevs 3 746 NULL
++zfs_lookup_2144 zfs_lookup 0 2144 NULL
+mappedread_2627 mappedread 2 2627 NULL
+vdev_disk_dio_alloc_2957 vdev_disk_dio_alloc 1 2957 NULL
+nv_alloc_pushpage_spl_4286 nv_alloc_pushpage_spl 2 4286 NULL
@@ -117881,6 +117881,7 @@ index 0000000..5dd8a8f
+avl_numnodes_12384 avl_numnodes 0 12384 NULL
+dmu_write_uio_dnode_12473 dmu_write_uio_dnode 3 12473 NULL
+dmu_xuio_init_12866 dmu_xuio_init 2 12866 NULL
++zpl_read_common_14389 zpl_read_common 0 14389 NULL
+dmu_snapshot_realname_14632 dmu_snapshot_realname 4 14632 NULL
+kmem_alloc_debug_14852 kmem_alloc_debug 1 14852 NULL
+kmalloc_node_nofail_15151 kmalloc_node_nofail 1 15151 NULL
@@ -117888,12 +117889,14 @@ index 0000000..5dd8a8f
+zfs_log_write_16524 zfs_log_write 6-5 16524 NULL
+sa_build_layouts_16910 sa_build_layouts 3 16910 NULL
+dsl_dir_namelen_17053 dsl_dir_namelen 0 17053 NULL
++kcopy_copy_to_user_17336 kcopy_copy_to_user 5 17336 NULL
+sa_add_layout_entry_17507 sa_add_layout_entry 3 17507 NULL
+sa_attr_table_setup_18029 sa_attr_table_setup 3 18029 NULL
+uiocopy_18680 uiocopy 2 18680 NULL
+dmu_buf_hold_array_by_dnode_19125 dmu_buf_hold_array_by_dnode 2-3 19125 NULL
+zpl_acl_from_xattr_21141 zpl_acl_from_xattr 2 21141 NULL
+dsl_pool_tx_assign_init_22518 dsl_pool_tx_assign_init 2 22518 NULL
++nvlist_lookup_byte_array_22527 nvlist_lookup_byte_array 0 22527 NULL
+sa_replace_all_by_template_locked_22533 sa_replace_all_by_template_locked 3 22533 NULL
+tsd_hash_table_init_22559 tsd_hash_table_init 1 22559 NULL
+spa_vdev_remove_aux_23966 spa_vdev_remove_aux 4 23966 NULL
@@ -117925,16 +117928,20 @@ index 0000000..5dd8a8f
+vdev_raidz_matrix_reconstruct_40852 vdev_raidz_matrix_reconstruct 2-3 40852 NULL
+sa_find_layout_40892 sa_find_layout 4 40892 NULL
+zpl_xattr_get_dir_41918 zpl_xattr_get_dir 0 41918 NULL
++zfs_sa_get_xattr_42600 zfs_sa_get_xattr 0 42600 NULL
+zpl_xattr_acl_set_42808 zpl_xattr_acl_set 4 42808 NULL
+xdr_dec_array_43091 xdr_dec_array 5 43091 NULL
+dsl_dataset_namelen_43136 dsl_dataset_namelen 0 43136 NULL
++kcopy_write_43683 kcopy_write 3 43683 NULL
+uiomove_44355 uiomove 2 44355 NULL
+dmu_read_44418 dmu_read 4-3 44418 NULL
+ddi_copyin_44846 ddi_copyin 3 44846 NULL
++kcopy_do_get_45061 kcopy_do_get 5 45061 NULL
+copyin_45945 copyin 3 45945 NULL
+zil_itx_create_46555 zil_itx_create 2 46555 NULL
+dmu_write_uio_dbuf_48064 dmu_write_uio_dbuf 3 48064 NULL
+spa_history_write_49650 spa_history_write 3 49650 NULL
++kcopy_copy_pages_to_user_49823 kcopy_copy_pages_to_user 3-4 49823 NULL
+zfs_log_write_50162 zfs_log_write 6-5 50162 NULL
+i_fm_alloc_51038 i_fm_alloc 2 51038 NULL
+copyout_51409 copyout 3 51409 NULL
@@ -117950,10 +117957,10 @@ index 0000000..5dd8a8f
+zpios_read_64734 zpios_read 3 64734 NULL
diff --git a/tools/gcc/size_overflow_plugin.c b/tools/gcc/size_overflow_plugin.c
new file mode 100644
-index 0000000..0a9dd22
+index 0000000..ed21b21
--- /dev/null
+++ b/tools/gcc/size_overflow_plugin.c
-@@ -0,0 +1,4110 @@
+@@ -0,0 +1,4166 @@
+/*
+ * Copyright 2011-2014 by Emese Revfy <re.emese@gmail.com>
+ * Licensed under the GPL v2, or (at your option) v3
@@ -117982,7 +117989,7 @@ index 0000000..0a9dd22
+int plugin_is_GPL_compatible;
+
+static struct plugin_info size_overflow_plugin_info = {
-+ .version = "20140402",
++ .version = "20140407",
+ .help = "no-size-overflow\tturn off size overflow checking\n",
+};
+
@@ -119312,12 +119319,62 @@ index 0000000..0a9dd22
+ insert_check_size_overflow(caller_node, stmt, LT_EXPR, cast_rhs, type_min, before, MIN_CHECK);
+}
+
++static bool is_lt_signed_type_max(const_tree rhs)
++{
++ const_tree new_type, type_max, type = TREE_TYPE(rhs);
++
++ if (!TYPE_UNSIGNED(type))
++ return true;
++
++ switch (TYPE_MODE(type)) {
++ case QImode:
++ new_type = intQI_type_node;
++ break;
++ case HImode:
++ new_type = intHI_type_node;
++ break;
++ case SImode:
++ new_type = intSI_type_node;
++ break;
++ case DImode:
++ new_type = intDI_type_node;
++ break;
++ default:
++ debug_tree((tree)type);
++ gcc_unreachable();
++ }
++
++ type_max = TYPE_MAX_VALUE(new_type);
++ if (!tree_int_cst_lt(type_max, rhs))
++ return true;
++
++ return false;
++}
++
++static bool is_gt_zero(const_tree rhs)
++{
++ const_tree type = TREE_TYPE(rhs);
++
++ if (TYPE_UNSIGNED(type))
++ return true;
++
++ if (!tree_int_cst_lt(rhs, integer_zero_node))
++ return true;
++
++ return false;
++}
++
+static bool is_a_constant_overflow(const_gimple stmt, const_tree rhs)
+{
+ if (gimple_assign_rhs_code(stmt) == MIN_EXPR)
+ return false;
+ if (!is_gimple_constant(rhs))
+ return false;
++
++ // If the const is between 0 and the max value of the signed type of the same bitsize then there is no intentional overflow
++// if (is_lt_signed_type_max(rhs) && is_gt_zero(rhs))
++// return false;
++
+ return true;
+}
+
@@ -119521,6 +119578,12 @@ index 0000000..0a9dd22
+ if (is_a_constant_overflow(def_stmt, rhs1))
+ return handle_intentional_overflow(visited, caller_node, !is_a_cast_and_const_overflow(rhs2), def_stmt, new_rhs2, new_rhs2);
+
++ // the const is between 0 and (signed) MAX
++ if (is_gimple_constant(rhs1))
++ new_rhs1 = create_assign(visited, def_stmt, rhs1, BEFORE_STMT);
++ if (is_gimple_constant(rhs2))
++ new_rhs2 = create_assign(visited, def_stmt, rhs2, BEFORE_STMT);
++
+ return dup_assign(visited, def_stmt, lhs, new_rhs1, new_rhs2, NULL_TREE);
+}
+