@@ -426,7 +426,13 @@ static void klp_free_object_dynamic(struct klp_object *obj)
426
426
kfree (obj );
427
427
}
428
428
429
- static struct klp_object * klp_alloc_object_dynamic (const char * name )
429
+ static void klp_init_func_early (struct klp_object * obj ,
430
+ struct klp_func * func );
431
+ static void klp_init_object_early (struct klp_patch * patch ,
432
+ struct klp_object * obj );
433
+
434
+ static struct klp_object * klp_alloc_object_dynamic (const char * name ,
435
+ struct klp_patch * patch )
430
436
{
431
437
struct klp_object * obj ;
432
438
@@ -442,7 +448,7 @@ static struct klp_object *klp_alloc_object_dynamic(const char *name)
442
448
}
443
449
}
444
450
445
- INIT_LIST_HEAD ( & obj -> func_list );
451
+ klp_init_object_early ( patch , obj );
446
452
obj -> dynamic = true;
447
453
448
454
return obj ;
@@ -471,6 +477,7 @@ static struct klp_func *klp_alloc_func_nop(struct klp_func *old_func,
471
477
}
472
478
}
473
479
480
+ klp_init_func_early (obj , func );
474
481
/*
475
482
* func->new_func is same as func->old_func. These addresses are
476
483
* set when the object is loaded, see klp_init_object_loaded().
@@ -490,11 +497,9 @@ static int klp_add_object_nops(struct klp_patch *patch,
490
497
obj = klp_find_object (patch , old_obj );
491
498
492
499
if (!obj ) {
493
- obj = klp_alloc_object_dynamic (old_obj -> name );
500
+ obj = klp_alloc_object_dynamic (old_obj -> name , patch );
494
501
if (!obj )
495
502
return - ENOMEM ;
496
-
497
- list_add_tail (& obj -> node , & patch -> obj_list );
498
503
}
499
504
500
505
klp_for_each_func (old_obj , old_func ) {
@@ -505,8 +510,6 @@ static int klp_add_object_nops(struct klp_patch *patch,
505
510
func = klp_alloc_func_nop (old_func , obj );
506
511
if (!func )
507
512
return - ENOMEM ;
508
-
509
- list_add_tail (& func -> node , & obj -> func_list );
510
513
}
511
514
512
515
return 0 ;
@@ -588,13 +591,7 @@ static void __klp_free_funcs(struct klp_object *obj, bool nops_only)
588
591
continue ;
589
592
590
593
list_del (& func -> node );
591
-
592
- /* Might be called from klp_init_patch() error path. */
593
- if (func -> kobj_added ) {
594
- kobject_put (& func -> kobj );
595
- } else if (func -> nop ) {
596
- klp_free_func_nop (func );
597
- }
594
+ kobject_put (& func -> kobj );
598
595
}
599
596
}
600
597
@@ -624,13 +621,7 @@ static void __klp_free_objects(struct klp_patch *patch, bool nops_only)
624
621
continue ;
625
622
626
623
list_del (& obj -> node );
627
-
628
- /* Might be called from klp_init_patch() error path. */
629
- if (obj -> kobj_added ) {
630
- kobject_put (& obj -> kobj );
631
- } else if (obj -> dynamic ) {
632
- klp_free_object_dynamic (obj );
633
- }
624
+ kobject_put (& obj -> kobj );
634
625
}
635
626
}
636
627
@@ -675,10 +666,8 @@ static void klp_free_patch_finish(struct klp_patch *patch)
675
666
* this is called when the patch gets disabled and it
676
667
* cannot get enabled again.
677
668
*/
678
- if (patch -> kobj_added ) {
679
- kobject_put (& patch -> kobj );
680
- wait_for_completion (& patch -> finish );
681
- }
669
+ kobject_put (& patch -> kobj );
670
+ wait_for_completion (& patch -> finish );
682
671
683
672
/* Put the module after the last access to struct klp_patch. */
684
673
if (!patch -> forced )
@@ -700,8 +689,6 @@ static void klp_free_patch_work_fn(struct work_struct *work)
700
689
701
690
static int klp_init_func (struct klp_object * obj , struct klp_func * func )
702
691
{
703
- int ret ;
704
-
705
692
if (!func -> old_name )
706
693
return - EINVAL ;
707
694
@@ -724,13 +711,9 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)
724
711
* object. If the user selects 0 for old_sympos, then 1 will be used
725
712
* since a unique symbol will be the first occurrence.
726
713
*/
727
- ret = kobject_init_and_add (& func -> kobj , & klp_ktype_func ,
728
- & obj -> kobj , "%s,%lu" , func -> old_name ,
729
- func -> old_sympos ? func -> old_sympos : 1 );
730
- if (!ret )
731
- func -> kobj_added = true;
732
-
733
- return ret ;
714
+ return kobject_add (& func -> kobj , & obj -> kobj , "%s,%lu" ,
715
+ func -> old_name ,
716
+ func -> old_sympos ? func -> old_sympos : 1 );
734
717
}
735
718
736
719
/* Arches may override this to finish any remaining arch-specific tasks */
@@ -801,11 +784,9 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
801
784
klp_find_object_module (obj );
802
785
803
786
name = klp_is_module (obj ) ? obj -> name : "vmlinux" ;
804
- ret = kobject_init_and_add (& obj -> kobj , & klp_ktype_object ,
805
- & patch -> kobj , "%s" , name );
787
+ ret = kobject_add (& obj -> kobj , & patch -> kobj , "%s" , name );
806
788
if (ret )
807
789
return ret ;
808
- obj -> kobj_added = true;
809
790
810
791
klp_for_each_func (obj , func ) {
811
792
ret = klp_init_func (obj , func );
@@ -819,6 +800,21 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
819
800
return ret ;
820
801
}
821
802
803
+ static void klp_init_func_early (struct klp_object * obj ,
804
+ struct klp_func * func )
805
+ {
806
+ kobject_init (& func -> kobj , & klp_ktype_func );
807
+ list_add_tail (& func -> node , & obj -> func_list );
808
+ }
809
+
810
+ static void klp_init_object_early (struct klp_patch * patch ,
811
+ struct klp_object * obj )
812
+ {
813
+ INIT_LIST_HEAD (& obj -> func_list );
814
+ kobject_init (& obj -> kobj , & klp_ktype_object );
815
+ list_add_tail (& obj -> node , & patch -> obj_list );
816
+ }
817
+
822
818
static int klp_init_patch_early (struct klp_patch * patch )
823
819
{
824
820
struct klp_object * obj ;
@@ -829,7 +825,7 @@ static int klp_init_patch_early(struct klp_patch *patch)
829
825
830
826
INIT_LIST_HEAD (& patch -> list );
831
827
INIT_LIST_HEAD (& patch -> obj_list );
832
- patch -> kobj_added = false ;
828
+ kobject_init ( & patch -> kobj , & klp_ktype_patch ) ;
833
829
patch -> enabled = false;
834
830
patch -> forced = false;
835
831
INIT_WORK (& patch -> free_work , klp_free_patch_work_fn );
@@ -839,13 +835,10 @@ static int klp_init_patch_early(struct klp_patch *patch)
839
835
if (!obj -> funcs )
840
836
return - EINVAL ;
841
837
842
- INIT_LIST_HEAD (& obj -> func_list );
843
- obj -> kobj_added = false;
844
- list_add_tail (& obj -> node , & patch -> obj_list );
838
+ klp_init_object_early (patch , obj );
845
839
846
840
klp_for_each_func_static (obj , func ) {
847
- func -> kobj_added = false;
848
- list_add_tail (& func -> node , & obj -> func_list );
841
+ klp_init_func_early (obj , func );
849
842
}
850
843
}
851
844
@@ -860,11 +853,9 @@ static int klp_init_patch(struct klp_patch *patch)
860
853
struct klp_object * obj ;
861
854
int ret ;
862
855
863
- ret = kobject_init_and_add (& patch -> kobj , & klp_ktype_patch ,
864
- klp_root_kobj , "%s" , patch -> mod -> name );
856
+ ret = kobject_add (& patch -> kobj , klp_root_kobj , "%s" , patch -> mod -> name );
865
857
if (ret )
866
858
return ret ;
867
- patch -> kobj_added = true;
868
859
869
860
if (patch -> replace ) {
870
861
ret = klp_add_nops (patch );
@@ -926,9 +917,6 @@ static int __klp_enable_patch(struct klp_patch *patch)
926
917
if (WARN_ON (patch -> enabled ))
927
918
return - EINVAL ;
928
919
929
- if (!patch -> kobj_added )
930
- return - EINVAL ;
931
-
932
920
pr_notice ("enabling patch '%s'\n" , patch -> mod -> name );
933
921
934
922
klp_init_transition (patch , KLP_PATCHED );
@@ -1003,11 +991,10 @@ int klp_enable_patch(struct klp_patch *patch)
1003
991
return - ENODEV ;
1004
992
1005
993
if (!klp_have_reliable_stack ()) {
1006
- pr_err ("This architecture doesn't have support for the livepatch consistency model.\n" );
1007
- return - EOPNOTSUPP ;
994
+ pr_warn ("This architecture doesn't have support for the livepatch consistency model.\n" );
995
+ pr_warn ( "The livepatch transition may never complete.\n" ) ;
1008
996
}
1009
997
1010
-
1011
998
mutex_lock (& klp_mutex );
1012
999
1013
1000
ret = klp_init_patch_early (patch );
0 commit comments