6 Commits
Author SHA1 Message Date
Paul Hollinsky 8a21b53cd1 v2.0.5
Add support for kernels 5.9+
	Tested on 5.11.0-rc5

CAN frames with length > 8 from userspace are rejected rather
than truncated
2021-01-29 15:54:24 -05:00
Paul Hollinsky 9da27da69e Use non-sensitive kfree function
This is not sensitive data, kzfree was just used for symmetry.

kzfree was actually renamed to kfree_sensitive to show that
the symmetry was unfounded.

This change will allow us to compile in kernels 5.10+
2021-01-29 15:50:05 -05:00
Paul Hollinsky 6bbcf1b527 Reject CAN frames with length > 8
Previously, they were just truncated.

In any case, this is only hit if the userspace daemon
gives us more than 8 bytes for CAN, which it shouldn't.
2021-01-29 15:47:43 -05:00
ARughani-IntrepidandPaul Hollinsky 668e50d08c Typo "accomplished" 2020-08-06 18:10:07 -04:00
Paul Hollinsky 6025ea1349 v2.0.4
Ensure carrier is up on new kernels which require it
2019-11-13 22:49:35 -05:00
Paul Hollinsky d75acfa8a5 v2.0.3
Add support for kernels 5.1+
	Tested on 5.3.0 (Ubuntu 19.10)
2019-11-06 10:14:53 -05:00
3 changed files with 28 additions and 6 deletions
+12
View File
@@ -1,3 +1,15 @@
v2.0.5
Add support for kernels 5.9+
Tested on 5.11.0-rc5
CAN frames with length > 8 from userspace are rejected rather than truncated
v2.0.4
Ensure carrier is up on new kernels which require it
v2.0.3
Add support for kernels 5.1+
Tested on 5.3.0 (Ubuntu 19.10)
v2.0.2 v2.0.2
Add support for older kernels Add support for older kernels
Tested working properly back to 4.4 Tested working properly back to 4.4
+2 -2
View File
@@ -1,10 +1,10 @@
Version 2.0.2 Version 2.0.5
This is the kernel object portion of the Intrepid Control Systems SocketCAN support. For SocketCAN to work with Intrepid devices you will need to have this kernel object loaded on your system. Once the module is built and loaded run [icsscand](https://github.com/intrepidcs/icsscand) to turn on SocketCAN support. This is the kernel object portion of the Intrepid Control Systems SocketCAN support. For SocketCAN to work with Intrepid devices you will need to have this kernel object loaded on your system. Once the module is built and loaded run [icsscand](https://github.com/intrepidcs/icsscand) to turn on SocketCAN support.
First, install the necessary dependencies for building kernel modules. First, install the necessary dependencies for building kernel modules.
On Ubuntu, this is acomplished by running `sudo apt install linux-headers-generic build-essential gcc git` On Ubuntu, this is accomplished by running `sudo apt install linux-headers-generic build-essential gcc git`
Clone this repository by running `git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git` Clone this repository by running `git clone https://github.com/intrepidcs/intrepid-socketcan-kernel-module.git`
+14 -4
View File
@@ -57,7 +57,7 @@
#define KO_DESC "Netdevice driver for Intrepid CAN/Ethernet devices" #define KO_DESC "Netdevice driver for Intrepid CAN/Ethernet devices"
#define KO_MAJOR 2 #define KO_MAJOR 2
#define KO_MINOR 0 #define KO_MINOR 0
#define KO_PATCH 2 #define KO_PATCH 5
#define KO_VERSION str(KO_MAJOR) "." str(KO_MINOR) "." str(KO_PATCH) #define KO_VERSION str(KO_MAJOR) "." str(KO_MINOR) "." str(KO_PATCH)
#define KO_VERSION_INT (KO_MAJOR << 16) | (KO_MINOR << 8) | KO_PATCH #define KO_VERSION_INT (KO_MAJOR << 16) | (KO_MINOR << 8) | KO_PATCH
@@ -92,6 +92,11 @@ MODULE_VERSION(KO_VERSION);
#define KERNEL_CHECKS_MTU_RANGE (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) #define KERNEL_CHECKS_MTU_RANGE (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
#define KERNEL_FAULT_TAKES_VMA (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0)) #define KERNEL_FAULT_TAKES_VMA (LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0))
#define KERNEL_SUPPORTS_ALIASES (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) #define KERNEL_SUPPORTS_ALIASES (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0))
#define KERNEL_DEFINES_VM_FAULT_T (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0))
#if KERNEL_DEFINES_VM_FAULT_T == 0
typedef int vm_fault_t;
#endif
struct intrepid_pending_tx_info { struct intrepid_pending_tx_info {
int tx_box_index; int tx_box_index;
@@ -268,6 +273,7 @@ static int intrepid_netdevice_stop(struct net_device *dev)
spin_lock_bh(&ics->lock); spin_lock_bh(&ics->lock);
netif_stop_queue(dev); netif_stop_queue(dev);
netif_carrier_off(dev);
spin_unlock_bh(&ics->lock); spin_unlock_bh(&ics->lock);
return 0; return 0;
@@ -276,6 +282,7 @@ static int intrepid_netdevice_stop(struct net_device *dev)
static int intrepid_netdevice_open(struct net_device *dev) static int intrepid_netdevice_open(struct net_device *dev)
{ {
netif_start_queue(dev); netif_start_queue(dev);
netif_carrier_on(dev);
return 0; return 0;
} }
@@ -464,7 +471,10 @@ static int intrepid_fill_can_frame_from_neomessage(
if (msg->status.remoteFrame) if (msg->status.remoteFrame)
cf->can_id |= CAN_RTR_FLAG; cf->can_id |= CAN_RTR_FLAG;
cf->can_dlc = get_can_dlc(msg->length); if (unlikely(msg->length > 8))
return -1;
cf->can_dlc = msg->length;
memcpy(cf->data, data, cf->can_dlc); memcpy(cf->data, data, cf->can_dlc);
stats->rx_bytes += cf->can_dlc; stats->rx_bytes += cf->can_dlc;
@@ -651,7 +661,7 @@ static long intrepid_dev_ioctl(struct file *fp, unsigned int cmd, unsigned long
* *
* Starting in kernel version 4.11, (struct vm_operations_struct *)->fault() no * Starting in kernel version 4.11, (struct vm_operations_struct *)->fault() no
* longer takes the vma parameter (since it resides in vmf) */ * longer takes the vma parameter (since it resides in vmf) */
static int intrepid_vm_fault( static vm_fault_t intrepid_vm_fault(
#if KERNEL_FAULT_TAKES_VMA #if KERNEL_FAULT_TAKES_VMA
struct vm_area_struct *vma, struct vm_area_struct *vma,
#endif #endif
@@ -828,7 +838,7 @@ exit:
return ret; return ret;
free_net_devices: free_net_devices:
kzfree(net_devices); kfree(net_devices);
free_shared_mem: free_shared_mem:
vfree(shared_mem); vfree(shared_mem);
return ret; return ret;