From ee9619ba0c8840db6d59d11989c31e24a8f0d806 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sun, 8 Nov 2020 12:25:43 +0000 Subject: [PATCH] Fix kernel 5.10-rc1 --- core/rtw_btcoex.c | 7 ++++++- core/rtw_wlan_util.c | 10 ++++++---- os_dep/linux/os_intfs.c | 19 +++++++++++++----- os_dep/osdep_service.c | 43 +++++++++++++++++++++++++++-------------- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/core/rtw_btcoex.c b/core/rtw_btcoex.c index d5b89bd..f5e0f56 100644 --- a/core/rtw_btcoex.c +++ b/core/rtw_btcoex.c @@ -1443,7 +1443,9 @@ u8 rtw_btcoex_sendmsgbysocket(_adapter *padapter, u8 *msg, u8 msg_size, bool for { u8 error; struct msghdr udpmsg; +#ifdef set_fs mm_segment_t oldfs; +#endif struct iovec iov; struct bt_coex_info *pcoex_info = &padapter->coex_info; @@ -1473,15 +1475,18 @@ u8 rtw_btcoex_sendmsgbysocket(_adapter *padapter, u8 *msg, u8 msg_size, bool for udpmsg.msg_control = NULL; udpmsg.msg_controllen = 0; udpmsg.msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL; +#ifdef set_fs oldfs = get_fs(); set_fs(KERNEL_DS); - +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) error = sock_sendmsg(pcoex_info->udpsock, &udpmsg); #else error = sock_sendmsg(pcoex_info->udpsock, &udpmsg, msg_size); #endif +#ifdef set_fs set_fs(oldfs); +#endif if (error < 0) { RTW_INFO("Error when sendimg msg, error:%d\n", error); return _FAIL; diff --git a/core/rtw_wlan_util.c b/core/rtw_wlan_util.c index b4cecd1..e465e9b 100644 --- a/core/rtw_wlan_util.c +++ b/core/rtw_wlan_util.c @@ -4744,7 +4744,9 @@ int rtw_dev_nlo_info_set(struct pno_nlo_info *nlo_info, pno_ssid_t *ssid, int i = 0; struct file *fp; +#ifdef set_fs mm_segment_t fs; +#endif loff_t pos = 0; u8 *source = NULL; long len = 0; @@ -4780,10 +4782,10 @@ int rtw_dev_nlo_info_set(struct pno_nlo_info *nlo_info, pno_ssid_t *ssid, RTW_INFO("Error, cipher array using default value.\n"); return 0; } - +#ifdef set_fs fs = get_fs(); set_fs(KERNEL_DS); - +#endif source = rtw_zmalloc(2048); if (source != NULL) { @@ -4791,10 +4793,10 @@ int rtw_dev_nlo_info_set(struct pno_nlo_info *nlo_info, pno_ssid_t *ssid, rtw_parse_cipher_list(nlo_info, source); rtw_mfree(source, 2048); } - +#ifdef set_fs set_fs(fs); filp_close(fp, NULL); - +#endif RTW_INFO("-%s-\n", __func__); return 0; } diff --git a/os_dep/linux/os_intfs.c b/os_dep/linux/os_intfs.c index 1085d6c..a37e488 100644 --- a/os_dep/linux/os_intfs.c +++ b/os_dep/linux/os_intfs.c @@ -4029,7 +4029,9 @@ static int route_dump(u32 *gw_addr , int *gw_index) struct msghdr msg; struct iovec iov; struct sockaddr_nl nladdr; +#ifdef set_fs mm_segment_t oldfs; +#endif char *pg; int size = 0; @@ -4067,16 +4069,18 @@ static int route_dump(u32 *gw_addr , int *gw_index) msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_flags = MSG_DONTWAIT; - +#ifdef set_fs oldfs = get_fs(); set_fs(KERNEL_DS); +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) err = sock_sendmsg(sock, &msg); #else err = sock_sendmsg(sock, &msg, sizeof(req)); #endif +#ifdef set_fs set_fs(oldfs); - +#endif if (err < 0) goto out_sock; @@ -4099,16 +4103,18 @@ restart: #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) iov_iter_init(&msg.msg_iter, READ, &iov, 1, PAGE_SIZE); #endif - +#ifdef set_fs oldfs = get_fs(); set_fs(KERNEL_DS); +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)) err = sock_recvmsg(sock, &msg, MSG_DONTWAIT); #else err = sock_recvmsg(sock, &msg, PAGE_SIZE, MSG_DONTWAIT); #endif +#ifdef set_fs set_fs(oldfs); - +#endif if (err < 0) goto out_sock_pg; @@ -4178,15 +4184,18 @@ done: msg.msg_controllen = 0; msg.msg_flags = MSG_DONTWAIT; +#ifdef set_fs oldfs = get_fs(); set_fs(KERNEL_DS); +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) err = sock_sendmsg(sock, &msg); #else err = sock_sendmsg(sock, &msg, sizeof(req)); #endif +#ifdef set_fs set_fs(oldfs); - +#endif if (err > 0) goto restart; } diff --git a/os_dep/osdep_service.c b/os_dep/osdep_service.c index 7c6d120..0769b49 100644 --- a/os_dep/osdep_service.c +++ b/os_dep/osdep_service.c @@ -2164,11 +2164,21 @@ static int writeFile(struct file *fp, char *buf, int len) { int wlen = 0, sum = 0; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) + if (!(fp->f_mode & FMODE_CAN_WRITE)) +#else if (!fp->f_op || !fp->f_op->write) +#endif return -EPERM; while (sum < len) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)) + wlen = kernel_write(fp, buf + sum, len - sum, &fp->f_pos); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) + wlen = __vfs_write(fp, buf + sum, len - sum, &fp->f_pos); +#else wlen = fp->f_op->write(fp, buf + sum, len - sum, &fp->f_pos); +#endif if (wlen > 0) sum += wlen; else if (0 != wlen) @@ -2191,19 +2201,19 @@ static int isFileReadable(const char *path, u32 *sz) { struct file *fp; int ret = 0; +#ifdef set_fs mm_segment_t oldfs; +#endif char buf; fp = filp_open(path, O_RDONLY, 0); if (IS_ERR(fp)) ret = PTR_ERR(fp); else { +#ifdef set_fs oldfs = get_fs(); - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)) set_fs(KERNEL_DS); - #else - set_fs(get_ds()); - #endif +#endif if (1 != readFile(fp, &buf, 1)) ret = PTR_ERR(fp); @@ -2215,8 +2225,9 @@ static int isFileReadable(const char *path, u32 *sz) *sz = i_size_read(fp->f_dentry->d_inode); #endif } - +#ifdef set_fs set_fs(oldfs); +#endif filp_close(fp, NULL); } return ret; @@ -2232,22 +2243,23 @@ static int isFileReadable(const char *path, u32 *sz) static int retriveFromFile(const char *path, u8 *buf, u32 sz) { int ret = -1; +#ifdef set_fs mm_segment_t oldfs; +#endif struct file *fp; if (path && buf) { ret = openFile(&fp, path, O_RDONLY, 0); if (0 == ret) { RTW_INFO("%s openFile path:%s fp=%p\n", __FUNCTION__, path , fp); - +#ifdef set_fs oldfs = get_fs(); - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)) set_fs(KERNEL_DS); - #else - set_fs(get_ds()); - #endif ret = readFile(fp, buf, sz); set_fs(oldfs); +#else + ret = readFile(fp, buf, sz); +#endif closeFile(fp); RTW_INFO("%s readFile, ret:%d\n", __FUNCTION__, ret); @@ -2271,22 +2283,23 @@ static int retriveFromFile(const char *path, u8 *buf, u32 sz) static int storeToFile(const char *path, u8 *buf, u32 sz) { int ret = 0; +#ifdef set_fs mm_segment_t oldfs; +#endif struct file *fp; if (path && buf) { ret = openFile(&fp, path, O_CREAT | O_WRONLY, 0666); if (0 == ret) { RTW_INFO("%s openFile path:%s fp=%p\n", __FUNCTION__, path , fp); - +#ifdef set_fs oldfs = get_fs(); - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0)) set_fs(KERNEL_DS); - #else - set_fs(get_ds()); - #endif ret = writeFile(fp, buf, sz); set_fs(oldfs); +#else + ret = writeFile(fp, buf, sz); +#endif closeFile(fp); RTW_INFO("%s writeFile, ret:%d\n", __FUNCTION__, ret);