[Feature][ZXW-452]merge P54U02 version
Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: I17e6795ab66e2b9d1cbbfec4b7c0028d666e177d
diff --git a/ap/os/linux/linux-3.4.x/net/core/fastproc/fast6.c b/ap/os/linux/linux-3.4.x/net/core/fastproc/fast6.c
index 1474611..637d373 100755
--- a/ap/os/linux/linux-3.4.x/net/core/fastproc/fast6.c
+++ b/ap/os/linux/linux-3.4.x/net/core/fastproc/fast6.c
@@ -300,7 +300,11 @@
//print_sun(SUN_DBG, "fast_6_recv fast_6_find null \n");
return 0;
}
-
+ if(fast6_entry_data->indev != NULL && fast6_entry_data->indev != skb->indev){
+ /*tupleÏàͬµ«indev²»Í¬£¬ÊÇÆäËûÁ÷³Ì·ÓÉת·¢µÄ°ü£¬µ±Ç°Ö»ÐèÒª¶þ´Î½»»»*/
+ rcu_read_unlock();
+ return 0;
+ }
/*Åжϱ¨Îij¤¶ÈÊÇ·ñ³¬¹ý³ö¿ÚDEVµÄMTU*/
dev = fast6_entry_data->outdev;
if (!dev || (skb->len > dev->mtu))
diff --git a/ap/os/linux/linux-3.4.x/net/socket_rpmsg.c b/ap/os/linux/linux-3.4.x/net/socket_rpmsg.c
index a42bfc2..8b225b6 100755
--- a/ap/os/linux/linux-3.4.x/net/socket_rpmsg.c
+++ b/ap/os/linux/linux-3.4.x/net/socket_rpmsg.c
@@ -80,6 +80,9 @@
DEFINE_SPINLOCK(sock_release_peer_lock);
EXPORT_SYMBOL_GPL(sock_release_peer_lock);
+DEFINE_SPINLOCK(sock_socketaddr_table_lock);
+EXPORT_SYMBOL_GPL(sock_socketaddr_table_lock);
+
static struct dentry *ipcsocket_debugfs_dir_entry_root;
static struct dentry *ipcsocket_debugfs_dir_entry_proc;
@@ -622,15 +625,15 @@
{
struct sock_sunaddr_info *p;
struct hlist_node *pos,*n;
-
+ spin_lock(&sock_socketaddr_table_lock);
hlist_for_each_entry_safe(p, pos, n, &g_sunaddr_info, hlist_node) {
if((p->sockaddr.sun_family == psockaddr_un->sun_family) \
&&(0 == memcmp(p->sockaddr.sun_path, psockaddr_un->sun_path, UNIX_PATH_MAX))){
-
+ spin_unlock(&sock_socketaddr_table_lock);
return true;
}
}
-
+ spin_unlock(&sock_socketaddr_table_lock);
return false;
}
@@ -653,7 +656,9 @@
memcpy(&psock_sunaddr_info->sockaddr, psockaddr_un, sizeof(struct sockaddr_un));
INIT_HLIST_NODE(&psock_sunaddr_info->hlist_node);
- hlist_add_head(&psock_sunaddr_info->hlist_node, &g_sunaddr_info);
+ spin_lock(&sock_socketaddr_table_lock);
+ hlist_add_head(&psock_sunaddr_info->hlist_node, &g_sunaddr_info);
+ spin_unlock(&sock_socketaddr_table_lock);
}
static int sock_soc_del_ipc_sunaddr(struct sockaddr_un *psockaddr_un)
@@ -661,6 +666,7 @@
struct sock_sunaddr_info *p;
struct hlist_node *pos,*n;
int ret;
+ spin_lock(&sock_socketaddr_table_lock);
hlist_for_each_entry_safe(p, pos, n, &g_sunaddr_info, hlist_node) {
if(psockaddr_un->sun_path[0]){
ret = strncmp(p->sockaddr.sun_path, psockaddr_un->sun_path, strlen(psockaddr_un->sun_path));
@@ -672,10 +678,12 @@
hlist_del(&p->hlist_node);
kfree(p);
sk_soc_info("sun_path=%s, del sucess.", psockaddr_un->sun_path);
+ spin_unlock(&sock_socketaddr_table_lock);
return 0;
}
}
sk_soc_info("sun_path=%s, del failed", psockaddr_un->sun_path);
+ spin_unlock(&sock_socketaddr_table_lock);
return -1;
}
diff --git a/ap/os/linux/linux-3.4.x/net/xfrm/xfrm_user.c b/ap/os/linux/linux-3.4.x/net/xfrm/xfrm_user.c
index c2d1e93..e63e597 100755
--- a/ap/os/linux/linux-3.4.x/net/xfrm/xfrm_user.c
+++ b/ap/os/linux/linux-3.4.x/net/xfrm/xfrm_user.c
@@ -478,7 +478,8 @@
struct nlattr *et = attrs[XFRMA_ETIMER_THRESH];
struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH];
- if (re) {
+ //BDSA-2023-1941
+ if (re && x->replay_esn && x->preplay_esn) {
struct xfrm_replay_state_esn *replay_esn;
replay_esn = nla_data(re);
memcpy(x->replay_esn, replay_esn,