Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
30a27016ba | ||
![]() |
f1d5ed18a9 | ||
290adb044b | |||
8f9c2ce3b1 | |||
![]() |
25f85c939a | ||
![]() |
330b4c8908 | ||
![]() |
a1c272e8b0 |
38
a1.2.config
38
a1.2.config
@ -1,21 +1,20 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 6.1.134 Kernel Configuration
|
||||
# Linux/x86 6.1.55 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Debian 12.2.0-14) 12.2.0"
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Debian 13.2.0-23) 13.2.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=120200
|
||||
CONFIG_GCC_VERSION=130200
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_AS_IS_GNU=y
|
||||
CONFIG_AS_VERSION=24000
|
||||
CONFIG_AS_VERSION=24200
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24000
|
||||
CONFIG_LD_VERSION=24200
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y
|
||||
CONFIG_CC_HAS_ASM_INLINE=y
|
||||
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
|
||||
CONFIG_PAHOLE_VERSION=124
|
||||
@ -176,7 +175,7 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
|
||||
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
|
||||
CONFIG_CC_HAS_INT128=y
|
||||
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
|
||||
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_CC_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_ARCH_SUPPORTS_INT128=y
|
||||
# CONFIG_NUMA_BALANCING is not set
|
||||
@ -429,7 +428,6 @@ CONFIG_X86_INTEL_TSX_MODE_OFF=y
|
||||
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
# CONFIG_EFI_HANDOVER_PROTOCOL is not set
|
||||
CONFIG_EFI_MIXED=y
|
||||
# CONFIG_HZ_100 is not set
|
||||
# CONFIG_HZ_250 is not set
|
||||
@ -463,7 +461,7 @@ CONFIG_HAVE_LIVEPATCH=y
|
||||
|
||||
CONFIG_CC_HAS_SLS=y
|
||||
CONFIG_CC_HAS_RETURN_THUNK=y
|
||||
# CONFIG_CPU_MITIGATIONS is not set
|
||||
# CONFIG_SPECULATION_MITIGATIONS is not set
|
||||
CONFIG_ARCH_HAS_ADD_PAGES=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
|
||||
@ -620,7 +618,6 @@ CONFIG_AS_AVX512=y
|
||||
CONFIG_AS_SHA1_NI=y
|
||||
CONFIG_AS_SHA256_NI=y
|
||||
CONFIG_AS_TPAUSE=y
|
||||
CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y
|
||||
|
||||
#
|
||||
# General architecture-dependent options
|
||||
@ -868,7 +865,6 @@ CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
CONFIG_PAGE_REPORTING=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
|
||||
CONFIG_PCP_BATCH_SCALE_MAX=5
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_MMU_NOTIFIER=y
|
||||
# CONFIG_KSM is not set
|
||||
@ -1133,6 +1129,7 @@ CONFIG_NET_SCHED=y
|
||||
#
|
||||
# Queueing/Scheduling
|
||||
#
|
||||
# CONFIG_NET_SCH_CBQ is not set
|
||||
# CONFIG_NET_SCH_HTB is not set
|
||||
# CONFIG_NET_SCH_HFSC is not set
|
||||
# CONFIG_NET_SCH_PRIO is not set
|
||||
@ -1146,6 +1143,7 @@ CONFIG_NET_SCHED=y
|
||||
# CONFIG_NET_SCH_ETF is not set
|
||||
# CONFIG_NET_SCH_TAPRIO is not set
|
||||
# CONFIG_NET_SCH_GRED is not set
|
||||
# CONFIG_NET_SCH_DSMARK is not set
|
||||
# CONFIG_NET_SCH_NETEM is not set
|
||||
# CONFIG_NET_SCH_DRR is not set
|
||||
# CONFIG_NET_SCH_MQPRIO is not set
|
||||
@ -1286,6 +1284,8 @@ CONFIG_ETHTOOL_NETLINK=y
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
CONFIG_HAVE_EISA=y
|
||||
# CONFIG_EISA is not set
|
||||
CONFIG_HAVE_PCI=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
@ -1899,6 +1899,9 @@ CONFIG_E1000E_HWTS=y
|
||||
# CONFIG_ICE is not set
|
||||
# CONFIG_FM10K is not set
|
||||
# CONFIG_IGC is not set
|
||||
CONFIG_NET_VENDOR_WANGXUN=y
|
||||
# CONFIG_NGBE is not set
|
||||
# CONFIG_TXGBE is not set
|
||||
# CONFIG_JME is not set
|
||||
CONFIG_NET_VENDOR_LITEX=y
|
||||
CONFIG_NET_VENDOR_MARVELL=y
|
||||
@ -2000,9 +2003,6 @@ CONFIG_NET_VENDOR_VERTEXCOM=y
|
||||
CONFIG_NET_VENDOR_VIA=y
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_NET_VENDOR_WANGXUN=y
|
||||
# CONFIG_NGBE is not set
|
||||
# CONFIG_TXGBE is not set
|
||||
CONFIG_NET_VENDOR_WIZNET=y
|
||||
# CONFIG_WIZNET_W5100 is not set
|
||||
# CONFIG_WIZNET_W5300 is not set
|
||||
@ -2915,6 +2915,7 @@ CONFIG_BCMA_POSSIBLE=y
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_SKY81452 is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_MFD_TI_AM335X_TSCADC is not set
|
||||
# CONFIG_MFD_LP3943 is not set
|
||||
# CONFIG_MFD_LP8788 is not set
|
||||
# CONFIG_MFD_TI_LMU is not set
|
||||
@ -3755,9 +3756,9 @@ CONFIG_NVMEM_SYSFS=y
|
||||
# CONFIG_PECI is not set
|
||||
# CONFIG_HTE is not set
|
||||
CONFIG_SST=y
|
||||
|
||||
CONFIG_SST_MEMLEAK=y
|
||||
# CONFIG_SST_BOUNDS is not set
|
||||
# CONFIG_SST_ASYNC_SOURCE is not set
|
||||
# CONFIG_SST_LOCKING is not set
|
||||
# end of Device Drivers
|
||||
|
||||
#
|
||||
@ -3944,9 +3945,6 @@ CONFIG_KEYS=y
|
||||
# CONFIG_ENCRYPTED_KEYS is not set
|
||||
# CONFIG_KEY_DH_OPERATIONS is not set
|
||||
# CONFIG_SECURITY_DMESG_RESTRICT is not set
|
||||
CONFIG_PROC_MEM_ALWAYS_FORCE=y
|
||||
# CONFIG_PROC_MEM_FORCE_PTRACE is not set
|
||||
# CONFIG_PROC_MEM_NO_FORCE is not set
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_SECURITY_WRITABLE_HOOKS=y
|
||||
# CONFIG_SECURITYFS is not set
|
||||
@ -4445,7 +4443,7 @@ CONFIG_PTDUMP_CORE=y
|
||||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_SHRINKER_DEBUG is not set
|
||||
CONFIG_HAVE_DEBUG_KMEMLEAK=y
|
||||
CONFIG_DEBUG_KMEMLEAK=y
|
||||
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
# CONFIG_SCHED_STACK_END_CHECK is not set
|
||||
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
|
||||
|
10
a1.2.txt
10
a1.2.txt
@ -1,10 +0,0 @@
|
||||
1) a) um debug beim start des kerns zu aktivieren, reicht kern parameter (mit hilfe -a im unserem skript) zu geben dyndbg=\"module sst_chrdev +p\"
|
||||
b) gleiche idee aber statt module zu wählen, kann mann eine file und zeile auswählen wie z.B
|
||||
dyndbg=\"file sst_chrdev.c line 40 +p; file sst_chrdev.c line 72 +p\"
|
||||
|
||||
2) Mein grundlegendes Verständnis davon, wie kmemleak funktioniert, ist, dass jede neue Speicherzuweisung und ihre Zeiger zusammen mit einer Vielzahl von Metainformationen wie Größe verfolgt werden.
|
||||
Informationen wie z.B. der Größe verfolgt und in einer Baumstruktur (rbtree) gespeichert wird.
|
||||
einen Memory Allocator existiert, bedeutet dies, dass der Kernel nicht mehr in der Lage ist, ihn zu zerstören und er wird als Orphan bezeichnet.
|
||||
|
||||
|
||||
3) um detector standardmäßige auszuschalten, kann mann CONFIG_DEBUG_KMEMLEAK=n setzen oder entfernen im kconfig
|
47
a1.4.config
47
a1.4.config
@ -1,20 +1,21 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 6.1.55 Kernel Configuration
|
||||
# Linux/x86 6.1.134 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Debian 13.2.0-23) 13.2.0"
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Debian 12.2.0-14) 12.2.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=130200
|
||||
CONFIG_GCC_VERSION=120200
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_AS_IS_GNU=y
|
||||
CONFIG_AS_VERSION=24200
|
||||
CONFIG_AS_VERSION=24000
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24200
|
||||
CONFIG_LD_VERSION=24000
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
CONFIG_GCC_ASM_GOTO_OUTPUT_WORKAROUND=y
|
||||
CONFIG_CC_HAS_ASM_INLINE=y
|
||||
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
|
||||
CONFIG_PAHOLE_VERSION=124
|
||||
@ -175,7 +176,7 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
|
||||
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
|
||||
CONFIG_CC_HAS_INT128=y
|
||||
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
|
||||
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_CC_NO_ARRAY_BOUNDS=y
|
||||
CONFIG_ARCH_SUPPORTS_INT128=y
|
||||
# CONFIG_NUMA_BALANCING is not set
|
||||
@ -280,6 +281,7 @@ CONFIG_X86=y
|
||||
CONFIG_INSTRUCTION_DECODER=y
|
||||
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
|
||||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_LOCKDEP=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MIN=28
|
||||
@ -428,6 +430,7 @@ CONFIG_X86_INTEL_TSX_MODE_OFF=y
|
||||
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
# CONFIG_EFI_HANDOVER_PROTOCOL is not set
|
||||
CONFIG_EFI_MIXED=y
|
||||
# CONFIG_HZ_100 is not set
|
||||
# CONFIG_HZ_250 is not set
|
||||
@ -461,7 +464,7 @@ CONFIG_HAVE_LIVEPATCH=y
|
||||
|
||||
CONFIG_CC_HAS_SLS=y
|
||||
CONFIG_CC_HAS_RETURN_THUNK=y
|
||||
# CONFIG_SPECULATION_MITIGATIONS is not set
|
||||
# CONFIG_CPU_MITIGATIONS is not set
|
||||
CONFIG_ARCH_HAS_ADD_PAGES=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
|
||||
@ -618,6 +621,7 @@ CONFIG_AS_AVX512=y
|
||||
CONFIG_AS_SHA1_NI=y
|
||||
CONFIG_AS_SHA256_NI=y
|
||||
CONFIG_AS_TPAUSE=y
|
||||
CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y
|
||||
|
||||
#
|
||||
# General architecture-dependent options
|
||||
@ -641,6 +645,7 @@ CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
|
||||
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
|
||||
CONFIG_HAVE_NMI=y
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_TRACE_IRQFLAGS=y
|
||||
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
|
||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||
CONFIG_HAVE_DMA_CONTIGUOUS=y
|
||||
@ -865,6 +870,7 @@ CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
|
||||
CONFIG_PAGE_REPORTING=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
|
||||
CONFIG_PCP_BATCH_SCALE_MAX=5
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_MMU_NOTIFIER=y
|
||||
# CONFIG_KSM is not set
|
||||
@ -1129,7 +1135,6 @@ CONFIG_NET_SCHED=y
|
||||
#
|
||||
# Queueing/Scheduling
|
||||
#
|
||||
# CONFIG_NET_SCH_CBQ is not set
|
||||
# CONFIG_NET_SCH_HTB is not set
|
||||
# CONFIG_NET_SCH_HFSC is not set
|
||||
# CONFIG_NET_SCH_PRIO is not set
|
||||
@ -1143,7 +1148,6 @@ CONFIG_NET_SCHED=y
|
||||
# CONFIG_NET_SCH_ETF is not set
|
||||
# CONFIG_NET_SCH_TAPRIO is not set
|
||||
# CONFIG_NET_SCH_GRED is not set
|
||||
# CONFIG_NET_SCH_DSMARK is not set
|
||||
# CONFIG_NET_SCH_NETEM is not set
|
||||
# CONFIG_NET_SCH_DRR is not set
|
||||
# CONFIG_NET_SCH_MQPRIO is not set
|
||||
@ -1284,8 +1288,6 @@ CONFIG_ETHTOOL_NETLINK=y
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
CONFIG_HAVE_EISA=y
|
||||
# CONFIG_EISA is not set
|
||||
CONFIG_HAVE_PCI=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
@ -1899,9 +1901,6 @@ CONFIG_E1000E_HWTS=y
|
||||
# CONFIG_ICE is not set
|
||||
# CONFIG_FM10K is not set
|
||||
# CONFIG_IGC is not set
|
||||
CONFIG_NET_VENDOR_WANGXUN=y
|
||||
# CONFIG_NGBE is not set
|
||||
# CONFIG_TXGBE is not set
|
||||
# CONFIG_JME is not set
|
||||
CONFIG_NET_VENDOR_LITEX=y
|
||||
CONFIG_NET_VENDOR_MARVELL=y
|
||||
@ -2003,6 +2002,9 @@ CONFIG_NET_VENDOR_VERTEXCOM=y
|
||||
CONFIG_NET_VENDOR_VIA=y
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_NET_VENDOR_WANGXUN=y
|
||||
# CONFIG_NGBE is not set
|
||||
# CONFIG_TXGBE is not set
|
||||
CONFIG_NET_VENDOR_WIZNET=y
|
||||
# CONFIG_WIZNET_W5100 is not set
|
||||
# CONFIG_WIZNET_W5300 is not set
|
||||
@ -2915,7 +2917,6 @@ CONFIG_BCMA_POSSIBLE=y
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_SKY81452 is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_MFD_TI_AM335X_TSCADC is not set
|
||||
# CONFIG_MFD_LP3943 is not set
|
||||
# CONFIG_MFD_LP8788 is not set
|
||||
# CONFIG_MFD_TI_LMU is not set
|
||||
@ -3945,6 +3946,9 @@ CONFIG_KEYS=y
|
||||
# CONFIG_ENCRYPTED_KEYS is not set
|
||||
# CONFIG_KEY_DH_OPERATIONS is not set
|
||||
# CONFIG_SECURITY_DMESG_RESTRICT is not set
|
||||
CONFIG_PROC_MEM_ALWAYS_FORCE=y
|
||||
# CONFIG_PROC_MEM_FORCE_PTRACE is not set
|
||||
# CONFIG_PROC_MEM_NO_FORCE is not set
|
||||
CONFIG_SECURITY=y
|
||||
CONFIG_SECURITY_WRITABLE_HOOKS=y
|
||||
# CONFIG_SECURITYFS is not set
|
||||
@ -4495,14 +4499,15 @@ CONFIG_DEBUG_PREEMPT=y
|
||||
# Lock Debugging (spinlocks, mutexes, etc...)
|
||||
#
|
||||
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
# CONFIG_PROVE_LOCKING is not set
|
||||
CONFIG_PROVE_LOCKING=y
|
||||
CONFIG_PROVE_RCU=y
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_LOCK_ALLOC is not set
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_LOCK_TORTURE_TEST is not set
|
||||
@ -4511,7 +4516,7 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
# CONFIG_CSD_LOCK_WAIT_DEBUG is not set
|
||||
# end of Lock Debugging (spinlocks, mutexes, etc...)
|
||||
|
||||
# CONFIG_DEBUG_IRQFLAGS is not set
|
||||
CONFIG_DEBUG_IRQFLAGS=y
|
||||
CONFIG_STACKTRACE=y
|
||||
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
|
2
a1.4.txt
Normal file
2
a1.4.txt
Normal file
@ -0,0 +1,2 @@
|
||||
1) hardirq_safe bedeutet dass eine prozess läuft in einem Kontext, der sicher für Hardware-Unterbrechungen ist. es halt keine kmalloc, spin_locks...
|
||||
2) lockdep_assert_held()
|
@ -4,3 +4,6 @@
|
||||
#
|
||||
|
||||
obj-$(CONFIG_SST) += sst_chrdev.o boundedbuffer.o sst_common.o
|
||||
CFLAGS_sst_chrdev.o := -DDEBUG
|
||||
CFLAGS_sst_common.o := -DDEBUG
|
||||
CFLAGS_boundedbuffer.o := -DDEBUG
|
@ -1,12 +1,9 @@
|
||||
#include "sst_internal.h"
|
||||
#include "../../include/linux/slab.h"
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define SST_CHRDEV "the-universe"
|
||||
|
||||
@ -33,7 +30,6 @@ static ssize_t universe_read(struct file *file, char __user *buf, size_t count,
|
||||
|
||||
if (sst_consume_answer(sst_info, &answer)) {
|
||||
pr_debug("Cannot read from answers!\n");
|
||||
kfree(answer);
|
||||
return 0;
|
||||
}
|
||||
len = strlen(answer);
|
||||
@ -66,11 +62,9 @@ static ssize_t universe_write(struct file *file, const char __user *buf, size_t
|
||||
err = sst_produce_question(sst_info, buf_copy);
|
||||
if (err) {
|
||||
pr_err("Weird! The universe is full.\n");
|
||||
kfree(buf_copy);
|
||||
return -ENOMEM;
|
||||
}
|
||||
sst_debug("Asked the universe a question...\n");
|
||||
kfree(buf_copy);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include "sst_internal.h"
|
||||
#include "../../include/linux/spinlock.h"
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/random.h>
|
||||
@ -82,6 +84,7 @@ static int control_thread_work(void *data) {
|
||||
sst_debug("Randomly sleeping for %d secs. ZzzzZZzz\n", sleep);
|
||||
ssleep(sleep);
|
||||
#endif
|
||||
kfree(question);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -139,7 +142,6 @@ EXPORT_SYMBOL(sst_produce_question);
|
||||
int sst_produce_answer(sst_info_t *info, char *value) {
|
||||
int err = 0;
|
||||
unsigned long flags;
|
||||
|
||||
if (!info) {
|
||||
return -1;
|
||||
}
|
||||
@ -154,7 +156,6 @@ EXPORT_SYMBOL(sst_produce_answer);
|
||||
|
||||
int sst_consume_question(sst_info_t *info, char **value) {
|
||||
int err = 0;
|
||||
|
||||
if (!info) {
|
||||
return -1;
|
||||
}
|
||||
@ -169,7 +170,6 @@ EXPORT_SYMBOL(sst_consume_question);
|
||||
int sst_consume_answer(sst_info_t *info, char **value) {
|
||||
int err = 0;
|
||||
unsigned long flags;
|
||||
|
||||
if (!info) {
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user