You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
9.3 KiB
243 lines
9.3 KiB
Support for kernel 6.8.x.
|
|
|
|
https://www.virtualbox.org/changeset/102989/vbox
|
|
https://www.virtualbox.org/changeset/102990/vbox
|
|
https://www.virtualbox.org/changeset/102992/vbox
|
|
https://www.virtualbox.org/changeset/102993/vbox
|
|
https://www.virtualbox.org/changeset/102994/vbox
|
|
|
|
------------------------------------------------------------------------
|
|
r102989 | vboxsync | 2024-01-22 19:12:25 +0200 (Lu, 22 ian 2024) | 2 lines
|
|
|
|
iprt: Add wrapper for strlcpy/strscpy functions, bugref:10584.
|
|
|
|
|
|
--- a/include/iprt/string.h
|
|
+++ b/include/iprt/string.h
|
|
@@ -245,7 +245,29 @@
|
|
# define RT_BCOPY_UNFORTIFIED(a_pDst, a_pSrc, a_cbToCopy) memcpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
#endif /* !RT_OS_LINUX && !__KERNEL__ */
|
|
|
|
+/** @def RT_STRSCPY
|
|
+ * Copy string and NULL-terminate output buffer.
|
|
+ *
|
|
+ * This macro should mostly be used in Linux kernel code. This is
|
|
+ * the replacement for deprecated strlcpy. It was deprecated since 3.16.60
|
|
+ * when strscpy was introduced as an alternative. Finally, strlcpy was
|
|
+ * completely removed from kernel code in 6.8.0.
|
|
+ *
|
|
+ * @param a_pDst Pointer to the destination string buffer.
|
|
+ * @param a_pSrc Pointer to the source NULL-terminated string buffer.
|
|
+ * @param a_cbToCopy Size of destination buffer..
|
|
+ */
|
|
+#if defined(RT_OS_LINUX) && defined(__KERNEL__)
|
|
+# if (RTLNX_VER_MIN(3,16,60))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strscpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+# else /* < 3.16.60 */
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strlcpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+# endif
|
|
+#else /* !RT_OS_LINUX && !__KERNEL__ */
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strscpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+#endif /* !RT_OS_LINUX && !__KERNEL__ */
|
|
|
|
+
|
|
#ifdef IN_RING3
|
|
|
|
/**
|
|
|
|
------------------------------------------------------------------------
|
|
------------------------------------------------------------------------
|
|
r102990 | vboxsync | 2024-01-22 19:13:50 +0200 (Lu, 22 ian 2024) | 2 lines
|
|
|
|
Additions: Linux: Introduce initial support for kernel 6.8, bugref:10584.
|
|
|
|
|
|
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
|
|
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
|
|
@@ -1410,7 +1410,7 @@
|
|
RTLogGroupSettings(pLogger, pszValue);
|
|
}
|
|
else if (pParam->name[0] != 'd')
|
|
- strlcpy(&g_szLogGrp[0], pszValue, sizeof(g_szLogGrp));
|
|
+ RT_STRSCPY(&g_szLogGrp[0], pszValue, sizeof(g_szLogGrp));
|
|
|
|
return 0;
|
|
}
|
|
@@ -1436,7 +1436,7 @@
|
|
RTLogFlags(pLogger, pszValue);
|
|
}
|
|
else if (pParam->name[0] != 'd')
|
|
- strlcpy(&g_szLogFlags[0], pszValue, sizeof(g_szLogFlags));
|
|
+ RT_STRSCPY(&g_szLogFlags[0], pszValue, sizeof(g_szLogFlags));
|
|
return 0;
|
|
}
|
|
|
|
@@ -1461,7 +1461,7 @@
|
|
RTLogDestinations(pLogger, pszValue);
|
|
}
|
|
else if (pParam->name[0] != 'd')
|
|
- strlcpy(&g_szLogDst[0], pszValue, sizeof(g_szLogDst));
|
|
+ RT_STRSCPY(&g_szLogDst[0], pszValue, sizeof(g_szLogDst));
|
|
return 0;
|
|
}
|
|
|
|
--- a/src/VBox/Additions/linux/drm/vbox_drv.h
|
|
+++ b/src/VBox/Additions/linux/drm/vbox_drv.h
|
|
@@ -538,9 +538,7 @@
|
|
int vbox_irq_init(struct vbox_private *vbox);
|
|
void vbox_irq_fini(struct vbox_private *vbox);
|
|
void vbox_report_hotplug(struct vbox_private *vbox);
|
|
-#if RTLNX_VER_MAX(5,15,0) && !RTLNX_RHEL_MAJ_PREREQ(9,1) && !RTLNX_SUSE_MAJ_PREREQ(15,5)
|
|
irqreturn_t vbox_irq_handler(int irq, void *arg);
|
|
-#endif
|
|
|
|
/* vbox_hgsmi.c */
|
|
void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size,
|
|
--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.c
|
|
+++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
|
|
@@ -1408,7 +1408,7 @@
|
|
switch (opt) {
|
|
case Opt_iocharset:
|
|
case Opt_nls:
|
|
- strlcpy(info->nls_name, param->string, sizeof(info->nls_name));
|
|
+ RT_STRSCPY(info->nls_name, param->string, sizeof(info->nls_name));
|
|
break;
|
|
case Opt_uid:
|
|
info->uid = result.uint_32;
|
|
@@ -1469,7 +1469,7 @@
|
|
printk(KERN_WARNING "vboxsf: cache mode (%u) is out of range, using default instead.\n", result.uint_32);
|
|
break;
|
|
case Opt_tag:
|
|
- strlcpy(info->szTag, param->string, sizeof(info->szTag));
|
|
+ RT_STRSCPY(info->szTag, param->string, sizeof(info->szTag));
|
|
break;
|
|
default:
|
|
return invalf(fc, "Invalid mount option: '%s'", param->key);
|
|
@@ -1528,7 +1528,7 @@
|
|
}
|
|
|
|
/* fc->source (the shared folder name) is set after vbsf_init_fs_ctx() */
|
|
- strlcpy(info->name, fc->source, sizeof(info->name));
|
|
+ RT_STRSCPY(info->name, fc->source, sizeof(info->name));
|
|
|
|
# if RTLNX_VER_MAX(5,3,0)
|
|
return vfs_get_super(fc, vfs_get_independent_super, vbsf_read_super_aux);
|
|
--- a/src/VBox/Additions/linux/sharedfolders/regops.c
|
|
+++ b/src/VBox/Additions/linux/sharedfolders/regops.c
|
|
@@ -3505,7 +3505,7 @@
|
|
};
|
|
|
|
/** file_operations::mmap wrapper for logging purposes. */
|
|
-extern int vbsf_reg_mmap(struct file *file, struct vm_area_struct *vma)
|
|
+static int vbsf_reg_mmap(struct file *file, struct vm_area_struct *vma)
|
|
{
|
|
int rc;
|
|
SFLOGFLOW(("vbsf_reg_mmap: file=%p vma=%p\n", file, vma));
|
|
@@ -3786,7 +3786,7 @@
|
|
}
|
|
|
|
# if RTLNX_VER_MIN(5,19,0) || RTLNX_RHEL_RANGE(9,3, 9,99)
|
|
-int vbsf_write_begin(struct file *file, struct address_space *mapping, loff_t pos,
|
|
+static int vbsf_write_begin(struct file *file, struct address_space *mapping, loff_t pos,
|
|
unsigned len, struct page **pagep, void **fsdata)
|
|
{
|
|
vbsf_write_begin_warn(pos, len, 0);
|
|
@@ -3793,7 +3793,7 @@
|
|
return simple_write_begin(file, mapping, pos, len, pagep, fsdata);
|
|
}
|
|
# else
|
|
-int vbsf_write_begin(struct file *file, struct address_space *mapping, loff_t pos,
|
|
+static int vbsf_write_begin(struct file *file, struct address_space *mapping, loff_t pos,
|
|
unsigned len, unsigned flags, struct page **pagep, void **fsdata)
|
|
{
|
|
vbsf_write_begin_warn(pos, len, flags);
|
|
|
|
------------------------------------------------------------------------
|
|
------------------------------------------------------------------------
|
|
r102992 | vboxsync | 2024-01-22 19:33:49 +0200 (Lu, 22 ian 2024) | 5 lines
|
|
|
|
iprt: Add wrapper for strlcpy/strscpy functions, build fix, bugref:10584.
|
|
|
|
Ignore return code of strscpy() in RT_STRSCPY macro sinse we have no caller
|
|
who is using it. Also rename macro parameter, so it makes more sense.
|
|
|
|
|
|
--- a/include/iprt/string.h
|
|
+++ b/include/iprt/string.h
|
|
@@ -255,16 +255,16 @@
|
|
*
|
|
* @param a_pDst Pointer to the destination string buffer.
|
|
* @param a_pSrc Pointer to the source NULL-terminated string buffer.
|
|
- * @param a_cbToCopy Size of destination buffer..
|
|
+ * @param a_cbDst Size of destination buffer.
|
|
*/
|
|
#if defined(RT_OS_LINUX) && defined(__KERNEL__)
|
|
# if (RTLNX_VER_MIN(3,16,60))
|
|
-# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strscpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) (void)strscpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
# else /* < 3.16.60 */
|
|
-# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strlcpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) strlcpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
# endif
|
|
#else /* !RT_OS_LINUX && !__KERNEL__ */
|
|
-# define RT_STRSCPY(a_pDst, a_pSrc, a_cbToCopy) strscpy((a_pDst), (a_pSrc), (a_cbToCopy))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) (void)strscpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
#endif /* !RT_OS_LINUX && !__KERNEL__ */
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|
|
r102993 | vboxsync | 2024-01-22 19:41:44 +0200 (Lu, 22 ian 2024) | 5 lines
|
|
|
|
Add wrapper for strlcpy/strscpy functions, build fix, bugref:10584.
|
|
|
|
It seem, strscpy was added around 4.3.0. Older kernels probably
|
|
have it as a backport. So, stick to 4.3.0.
|
|
|
|
|
|
--- a/include/iprt/string.h
|
|
+++ b/include/iprt/string.h
|
|
@@ -258,7 +258,7 @@
|
|
* @param a_cbDst Size of destination buffer.
|
|
*/
|
|
#if defined(RT_OS_LINUX) && defined(__KERNEL__)
|
|
-# if (RTLNX_VER_MIN(3,16,60))
|
|
+# if (RTLNX_VER_MIN(4,3,0))
|
|
# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) (void)strscpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
# else /* < 3.16.60 */
|
|
# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) strlcpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
|
|
------------------------------------------------------------------------
|
|
r102994 | vboxsync | 2024-01-22 20:06:29 +0200 (Lu, 22 ian 2024) | 6 lines
|
|
|
|
iprt: Add wrapper for strlcpy/strscpy functions, build fix, bugref:10584.
|
|
|
|
Another way around to suppress build error when strscpy return status
|
|
is not used. Also, turn macro into strlcpy for non-Linux systems,
|
|
so for them it will be no change.
|
|
|
|
|
|
--- a/include/iprt/string.h
|
|
+++ b/include/iprt/string.h
|
|
@@ -259,12 +259,16 @@
|
|
*/
|
|
#if defined(RT_OS_LINUX) && defined(__KERNEL__)
|
|
# if (RTLNX_VER_MIN(4,3,0))
|
|
-# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) (void)strscpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) \
|
|
+ { \
|
|
+ ssize_t _ret; \
|
|
+ _ret = strscpy((a_pDst), (a_pSrc), (a_cbDst)); \
|
|
+ }
|
|
# else /* < 3.16.60 */
|
|
# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) strlcpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
# endif
|
|
#else /* !RT_OS_LINUX && !__KERNEL__ */
|
|
-# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) (void)strscpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
+# define RT_STRSCPY(a_pDst, a_pSrc, a_cbDst) strlcpy((a_pDst), (a_pSrc), (a_cbDst))
|
|
#endif /* !RT_OS_LINUX && !__KERNEL__ */
|
|
|
|
|
|
|
|
------------------------------------------------------------------------
|